Mercurial > libervia-web
diff libervia.py @ 18:795d144fc1d2
moved panels and menu in a separate file
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 15 Apr 2011 15:30:31 +0200 |
parents | c725b702e927 |
children | e8e3704eb97f |
line wrap: on
line diff
--- a/libervia.py Fri Apr 15 15:18:38 2011 +0200 +++ b/libervia.py Fri Apr 15 15:30:31 2011 +0200 @@ -22,24 +22,13 @@ import pyjd # this is dummy in pyjs from pyjamas.ui.SimplePanel import SimplePanel from pyjamas.ui.RootPanel import RootPanel -from pyjamas.ui.VerticalPanel import VerticalPanel -from pyjamas.ui.HorizontalPanel import HorizontalPanel -from pyjamas.ui.HTMLPanel import HTMLPanel -from pyjamas.ui.ScrollPanel import ScrollPanel -from pyjamas.ui.Grid import Grid -from pyjamas.ui.Label import Label -from pyjamas.ui import HasAlignment -from pyjamas.ui.MenuBar import MenuBar -from pyjamas.ui.MenuItem import MenuItem from pyjamas.ui.AutoComplete import AutoCompleteTextBox -from pyjamas.ui.DropWidget import DropWidget from pyjamas import Window from pyjamas.JSONService import JSONProxy from pyjamas.ui.KeyboardListener import KEY_ENTER from browser_side.register import RegisterPanel, RegisterBox -from pyjamas import DOM from browser_side.contact import ContactPanel -from datetime import datetime +from browser_side.panels import MainPanel, EmptyPanel, MicroblogPanel class LiberviaJsonProxy(JSONProxy): @@ -84,41 +73,6 @@ LiberviaJsonProxy.__init__(self, "/json_signal_api", ["getSignals"]) -class MenuCmd: - - def __init__(self, object, handler): - self._object = object - self._handler = handler - - def execute(self): - handler = getattr(self._object, self._handler) - handler() - -class Menu(SimplePanel): - - def __init__(self): - SimplePanel.__init__(self) - - menu_general = MenuBar(vertical=True) - menu_general.addItem("Properties", MenuCmd(self, "onProperties")) - - menu_games = MenuBar(vertical=True) - menu_games.addItem("Tarot", MenuCmd(self, "onTarotGame")) - menu_games.addItem("Xiangqi", MenuCmd(self, "onXiangqiGame")) - - menubar = MenuBar(vertical=False) - menubar.addItem(MenuItem("General", menu_general)) - menubar.addItem(MenuItem("Games", True, menu_games)) - self.add(menubar) - - def onProperties(self): - Window.alert("Properties selected") - - def onTarotGame(self): - Window.alert("Tarot selected") - - def onXiangqiGame(self): - Window.alert("Xiangqi selected") class UniBox(AutoCompleteTextBox): @@ -139,188 +93,6 @@ #XXX: fixed directly on pyjamas, if the patch is accepted, no need to walk around this return AutoCompleteTextBox.complete(self) -class DropCell(DropWidget): - """Cell in the middle grid which replace itself with the dropped widget on DnD""" - - def __init__(self): - DropWidget.__init__(self) - - def onDragEnter(self, event): - print "drag enter" - self.addStyleName('dragover') - DOM.eventPreventDefault(event) - - def onDragLeave(self, event): - print "drag leave" - self.removeStyleName('dragover') - - def onDragOver(self, event): - DOM.eventPreventDefault(event) - - def _getCellAndRow(self, grid, event): - """Return cell and row index where the event is occuring""" - cell = grid.getEventTargetCell(event) - row = DOM.getParent(cell) - return (row.rowIndex, cell.cellIndex) - - - def onDrop(self, event): - print "Empty Panel: onDrop" - dt = event.dataTransfer - #'text', 'text/plain', and 'Text' are equivalent. - try: - item = dt.getData("text/plain") - item_type = dt.getData("type") - print "message: %s" % item - print "type: %s" % item_type - except: - print "no message found" - item=' ' - item_type = None - DOM.eventPreventDefault(event) - if item_type=="GROUP": - _mblog = MicroblogPanel(self.host, item) - _mblog.setAcceptedGroup(item) - elif item_type=="CONTACT": - _mblog = MicroblogPanel(self.host, accept_all=True) - self.host.mpanels.remove(self) - self.host.mpanels.append(_mblog) - print "DEBUG" - grid = self.getParent() - row_idx, cell_idx = self._getCellAndRow(grid, event) - self.removeFromParent() - grid.setWidget(row_idx, cell_idx, _mblog) - print "index:", row_idx, cell_idx - #FIXME: delete object ? Check the right way with pyjamas - #self.host.middle_panel.changePanel(self.data,self.host.mpanels[0]) - - -class EmptyPanel(DropCell, SimplePanel): - """Empty dropable panel""" - - def __init__(self, host): - SimplePanel.__init__(self) - self.host = host - _panel = HTMLPanel(" ") - self.add(_panel) - self.setHeight('100%') - DropCell.__init__(self) - -class MicroblogEntry(SimplePanel): - - def __init__(self, body, author, timestamp): - SimplePanel.__init__(self) - - _datetime = datetime.fromtimestamp(timestamp) - - panel = HTMLPanel("<div class='mb_entry_header'><span class='mb_entry_author'>%(author)s</span> on <span class='mb_entry_timestamp'>%(timestamp)s</span></div><div class='mb_entry_body'>%(body)s</div>" % - {"author": author, - "timestamp": _datetime, - "body": body} - ) - panel.setStyleName('microblogEntry') - self.add(panel) - - -class MicroblogPanel(DropCell, ScrollPanel): - - def __init__(self,host, title=' ', accept_all=False): - """Panel used to show microblog - @param title: title of the panel - @param accept_all: if true, show every message, without filtering jids""" - self.host = host - self.accept_all = accept_all - title=title.replace('<','<').replace('>','>') - self.accepted_groups = [] - _class = ['mb_panel_header'] - if title == ' ': - _class.append('empty_header') - ScrollPanel.__init__(self) - self.vpanel = VerticalPanel() - self.vpanel.add(HTMLPanel("<div class='%s'>%s</div>" % (','.join(_class),title))) - self.vpanel.setWidth('100%') - self.setHeight('100%') - self.setStyleName('microblogPanel') - self.add(self.vpanel) - DropCell.__init__(self) - - def addEntry(self, text, author=None, timestamp=None): - """Add an entry to the panel - @param text: main text of the entry - @param author: who wrote the entry - @param date: when the entry was written""" - _entry = MicroblogEntry(text, author, timestamp) - self.vpanel.insert(_entry,1) - - def setAcceptedGroup(self, group): - """Set the group which can be displayed in this panel - @param group: string of the group, or list of string - """ - if isinstance(group, list): - self.accepted_groups.extend(group) - else: - self.accepted_groups.append(group) - - def isJidAccepted(self, jid): - """Tell if a jid is actepted and show in this panel - @param jid: jid - @return: True if the jid is accepted""" - if self.accept_all: - return True - for group in self.accepted_groups: - if self.host.contactPanel.isContactInGroup(group, jid): - return True - return False - - - -class MiddlePannel(HorizontalPanel): - - def __init__(self, host): - self.host=host - HorizontalPanel.__init__(self) - self._left = self.host.contactPanel - self._right = Grid(1,3) - self._right.setWidth('100%') - self._right.setHeight('100%') - self.add(self._left) - self.setCellWidth(self._left, "15%") - self.add(self._right) - self.setCellWidth(self._right, "85%") - self.setHeight('100%') - - def changePanel(self, idx, panel): - print "panel:",panel - print "idx:",idx - self._right.setWidget(0,idx,panel) - -class MainPanel(VerticalPanel): - - def __init__(self, host): - self.host=host - VerticalPanel.__init__(self) - - self.setHorizontalAlignment(HasAlignment.ALIGN_LEFT) - self.setVerticalAlignment(HasAlignment.ALIGN_TOP) - - menu = Menu() - uni_box = host.uniBox - self.middle_panel = MiddlePannel(self.host) - self.middle_panel.setWidth('100%') - - self.add(menu) - self.add(uni_box) - self.add(self.middle_panel) - - self.setCellHeight(menu, "5%") - self.setCellHeight(uni_box, "5%") - self.setCellVerticalAlignment(uni_box, HasAlignment.ALIGN_CENTER) - self.setCellHorizontalAlignment(uni_box, HasAlignment.ALIGN_CENTER) - self.setCellHeight(self.middle_panel, "90%") - self.setCellWidth(self.middle_panel, "100%") - - self.setWidth("100%") - self.setHeight("100%") class SatWebFrontend: def onModuleLoad(self):