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='&nbsp;'
-            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("&nbsp;")
-        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='&nbsp;', 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('<','&lt;').replace('>','&gt;')
-        self.accepted_groups = []
-        _class = ['mb_panel_header']
-        if title == '&nbsp;':
-            _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):