def addContact(self, contact):
     link = HTML("<a href='javascript:;'>" + contact.name + "</a>")
     self.panel.add(link)
     
     # Add a click listener that displays a ContactPopup when it is clicked.
     listener = ContactListener(contact, link)
     link.addClickListener(listener)
    def __init__(self):
        Composite.__init__(self)
        self.signOutLink = HTML("<a href='javascript:;'>Sign Out</a>")
        self.aboutLink = HTML("<a href='javascript:;'>About</a>")

        outer = HorizontalPanel()
        inner = VerticalPanel()

        outer.setHorizontalAlignment(HasAlignment.ALIGN_RIGHT)
        inner.setHorizontalAlignment(HasAlignment.ALIGN_RIGHT)

        links = HorizontalPanel()
        links.setSpacing(4)
        links.add(self.signOutLink)
        links.add(self.aboutLink)

        outer.add(inner)
        inner.add(HTML("<b>Welcome back, [email protected]</b>"))
        inner.add(links)

        self.signOutLink.addClickListener(self)
        self.aboutLink.addClickListener(self)

        self.initWidget(outer)
        inner.setStyleName("mail-TopPanel")
        links.setStyleName("mail-TopPanelLinks")
  def __init__(self):
      DialogBox.__init__(self)
      # Use this opportunity to set the dialog's caption.
      self.setText("About the Mail Sample")

      # Create a DockPanel to contain the 'about' label and the 'OK' button.
      outer = DockPanel()
      outer.setSpacing(4)
      
      outer.add(Image(AboutDialog.LOGO_IMAGE), DockPanel.WEST)

      # Create the 'OK' button, along with a listener that hides the dialog
      # when the button is clicked. Adding it to the 'south' position within
      # the dock causes it to be placed at the bottom.
      buttonPanel = HorizontalPanel()
      buttonPanel.setHorizontalAlignment(HasAlignment.ALIGN_RIGHT)
      buttonPanel.add(Button("Close", self))
      outer.add(buttonPanel, DockPanel.SOUTH)

      # Create the 'about' label. Placing it in the 'rest' position within the
      # dock causes it to take up any remaining space after the 'OK' button
      # has been laid out.

      textplain =  "This sample application demonstrates the construction "
      textplain += "of a complex user interface using pyjamas' built-in widgets.  Have a look "
      textplain += "at the code to see how easy it is to build your own apps!"
      text = HTML(textplain)
      text.setStyleName("mail-AboutText")
      outer.add(text, DockPanel.CENTER)

      # Add a bit of spacing and margin to the dock to keep the components from
      # being placed too closely together.
      outer.setSpacing(8)

      self.setWidget(outer)
 def createLabelAndInput(self, label, field):
     h = HorizontalPanel()
     l = HTML(java.str(u"<b>" + java.str(label)) + u": </b>")
     l.setWidth(u"150px")
     h.add(l)
     h.add(field)
     return h
 def __init__(self, ):
     self.__init__._super()
     self.outer.getElement().setId(u"OuterRouter")
     class _anonymous(ClickHandler):
         
         @java.typed(ClickEvent)
         def onClick(self, event):
             class _anonymous(AsyncCallback):
                 
                 @java.typed(Throwable)
                 def onFailure(self, caught):
                     GWT.log(u"Require session failed: " + java.str(caught))
                 
                 @java.typed(Boolean)
                 def onSuccess(self, isLoggedIn):
                     if self.loginCallback is not None and isLoggedIn:
                         self.loginCallback.onLogin()
             FacebookConnect.requireSession(_anonymous())
     self.loginLink.addClickHandler(_anonymous()) #  Login with the javascript api. GWT client doesnt render the fb:login-button
     self.outer.getElement().setId(u"LoginBox")
     self.inner.addStyleName(u"inner")
     self.outer.add(HTML(u"<h1>Login with your facebook id: </h1>"))
     self.outer.add(HTML(u"This demo uses facebook data heavily to demonstrate API calls etc so you might as well login right away"))
     self.inner.setSpacing(10)
     self.inner.add(HTML(u"Click the button to allow this application to access your facebook account"))
     self.inner.add(self.loginButton)
     self.outer.add(self.inner)
     self.outer.add(self.loginLink)
     sourceCode = HTML(u"<br/><br/>This project on Gogle code : <a target=_blank href=\"http://code.google.com/p/gwt-facebook/\"> http://code.google.com/p/gwt-facebook/ </a>")
     sourceCode.addStyleName(u"sourceCode")
     self.outer.setWidth(u"400px")
     self.outer.add(sourceCode)
     Xfbml.parse(self.outer)
     self.initWidget(self.outer)
    def __init__(self):
        Composite.__init__(self)
        panel = VerticalPanel()
        headerPanel = VerticalPanel()
        self.subject = HTML()
        self.sender = HTML()
        self.recipient = HTML()
        self.body = HTML()
        self.scroller = ScrollPanel(self.body)

        self.body.setWordWrap(True)

        headerPanel.add(self.subject)
        headerPanel.add(self.sender)
        headerPanel.add(self.recipient)
        headerPanel.setWidth("100%")

        innerPanel = DockPanel()
        innerPanel.add(headerPanel, DockPanel.NORTH)
        innerPanel.add(self.scroller, DockPanel.CENTER)

        innerPanel.setCellHeight(self.scroller, "100%")
        panel.add(innerPanel)
        innerPanel.setSize("100%", "100%")
        self.scroller.setSize("100%", "100%")
        self.initWidget(panel)

        self.setStyleName("mail-Detail")
        headerPanel.setStyleName("mail-DetailHeader")
        innerPanel.setStyleName("mail-DetailInner")
        self.subject.setStyleName("mail-DetailSubject")
        self.sender.setStyleName("mail-DetailSender")
        self.recipient.setStyleName("mail-DetailRecipient")
        self.body.setStyleName("mail-DetailBody")
 def createInput(self, lbl, w):
     h = HorizontalPanel()
     lblHtml = HTML(lbl)
     lblHtml.setWidth(u"150px")
     h.add(lblHtml)
     h.add(w)
     return h
 def __init__(self):
     PopupPanel.__init__(self, True)
     
     contents = HTML("Click anywhere outside this popup to make it disappear.")
     contents.setWidth("128px")
     contents.setHeight("128px")
     self.setWidget(contents)
     
     self.setStyleName("ks-popups-Popup")
 def renderUI(self):
     fbName = FbName(self.apiClient.getLoggedInUser())
     fbName.setUseyou(False)
     text = HTML(java.str(u"This will send an email notification to  " + java.str(fbName)) + u"(you).")
     text.getElement().setId(u"text")
     self.notificationText.setWidth(u"500px")
     self.notificationText.setHeight(u"100px")
     self.notificationText.setFocus(True)
     self.outer.setSpacing(10)
     submit = Button(u"Send")
     submit.addClickHandler(self.NotificationSendHandler())
     self.outer.add(text)
     self.outer.add(self.notificationText)
     self.outer.add(submit)
     Xfbml.parse(text)
 def __init__(self, owner):
     Composite.__init__(self)
     self.owner = owner
     self.bar = DockPanel()
     self.gotoFirst = Button("&lt;&lt;", self)
     self.gotoNext = Button("&gt;", self)
     self.gotoPrev = Button("&lt;", self)
     self.status = HTML()
     
     self.initWidget(self.bar)
     self.bar.setStyleName("navbar")
     self.status.setStyleName("status")
     
     buttons = HorizontalPanel()
     buttons.add(self.gotoFirst)
     buttons.add(self.gotoPrev)
     buttons.add(self.gotoNext)
     self.bar.add(buttons, DockPanel.EAST)
     self.bar.setCellHorizontalAlignment(buttons, HasAlignment.ALIGN_RIGHT)
     self.bar.add(self.status, DockPanel.CENTER)
     self.bar.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE)
     self.bar.setCellHorizontalAlignment(self.status, HasAlignment.ALIGN_RIGHT)
     self.bar.setCellVerticalAlignment(self.status, HasAlignment.ALIGN_MIDDLE)
     self.bar.setCellWidth(self.status, "100%")
     
     self.gotoPrev.setEnabled(False)
     self.gotoFirst.setEnabled(False)
    def onModuleLoad(self):
        self.curInfo=''
        self.curSink=None
        self.description=HTML()
        self.sink_list=SinkList()
        self.panel=DockPanel()
        
        self.loadSinks()
        self.sinkContainer = DockPanel()
        self.sinkContainer.setStyleName("ks-Sink")

        vp=VerticalPanel()
        vp.setWidth("100%")
        vp.add(self.description)
        vp.add(self.sinkContainer)

        self.description.setStyleName("ks-Info")

        self.panel.add(self.sink_list, DockPanel.WEST)
        self.panel.add(vp, DockPanel.CENTER)

        self.panel.setCellVerticalAlignment(self.sink_list, HasAlignment.ALIGN_TOP)
        self.panel.setCellWidth(vp, "100%")

        History().addHistoryListener(self)
        RootPanel().add(self.panel)
        #RootPanel().add(Logger())

        #Show the initial screen.
        initToken = History().getToken()
        if len(initToken):
            self.onHistoryChanged(initToken)
        else:
			self.showInfo()
class TopPanel(Composite):

    def __init__(self):
        Composite.__init__(self)
        self.signOutLink = HTML("<a href='javascript:;'>Sign Out</a>")
        self.aboutLink = HTML("<a href='javascript:;'>About</a>")

        outer = HorizontalPanel()
        inner = VerticalPanel()

        outer.setHorizontalAlignment(HasAlignment.ALIGN_RIGHT)
        inner.setHorizontalAlignment(HasAlignment.ALIGN_RIGHT)

        links = HorizontalPanel()
        links.setSpacing(4)
        links.add(self.signOutLink)
        links.add(self.aboutLink)

        outer.add(inner)
        inner.add(HTML("<b>Welcome back, [email protected]</b>"))
        inner.add(links)

        self.signOutLink.addClickListener(self)
        self.aboutLink.addClickListener(self)

        self.initWidget(outer)
        inner.setStyleName("mail-TopPanel")
        links.setStyleName("mail-TopPanelLinks")

    def onClick(self, sender, event):
        if (sender == self.signOutLink):
            Window.alert("If this were implemented, you would be signed out now.")
        elif (sender == self.aboutLink):
            # When the 'About' item is selected, show the AboutDialog.
            # Note that showing a dialog box does not block -- execution continues
            # normally, and the dialog fires an event when it is closed.
            dlg = AboutDialog()

            # Position it roughly in the middle of the screen.
            left = (Window.getClientWidth() - 512) / 2
            top = (Window.getClientHeight() - 256) / 2
            #Logger("TopPanel", "left: " + left)
            #Logger("TopPanel", "top: " + top)
            dlg.setPopupPosition(left, top)

            dlg.show()
Exemple #13
0
 def __init__(self, *a, **kw):
     self.outer = VerticalPanel()
     self.topMenu = None
     self.apiClient = GWT.create(FacebookApi.__class__)
     self.loginBoxPanel = None
     self.loginCallback = None
     self.waitingText = HTML(u"Waiting for facebook connect status...")
     self.userService = GWT.create(UserService.__class__)
class NavBar(Composite):

    def __init__(self, owner):
        Composite.__init__(self)
        self.owner = owner
        self.bar = DockPanel()
        self.gotoFirst = Button("&lt;&lt;", self)
        self.gotoNext = Button("&gt;", self)
        self.gotoPrev = Button("&lt;", self)
        self.status = HTML()
        
        self.initWidget(self.bar)
        self.bar.setStyleName("navbar")
        self.status.setStyleName("status")
        
        buttons = HorizontalPanel()
        buttons.add(self.gotoFirst)
        buttons.add(self.gotoPrev)
        buttons.add(self.gotoNext)
        self.bar.add(buttons, DockPanel.EAST)
        self.bar.setCellHorizontalAlignment(buttons, HasAlignment.ALIGN_RIGHT)
        self.bar.add(self.status, DockPanel.CENTER)
        self.bar.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE)
        self.bar.setCellHorizontalAlignment(self.status, HasAlignment.ALIGN_RIGHT)
        self.bar.setCellVerticalAlignment(self.status, HasAlignment.ALIGN_MIDDLE)
        self.bar.setCellWidth(self.status, "100%")
        
        self.gotoPrev.setEnabled(False)
        self.gotoFirst.setEnabled(False)
        
    def onClick(self, sender):
        if sender == self.gotoNext:
            self.owner.startRow += self.owner.getDataRowCount()
            self.owner.refresh()
        elif sender == self.gotoPrev:
            self.owner.startRow -= self.owner.getDataRowCount()
            if self.owner.startRow < 0:
                self.owner.startRow = 0
            self.owner.refresh()
        elif sender == self.gotoFirst:
            self.owner.startRow = 0
            self.owner.refresh()
class ClassDoc(Composite):

    def __init__(self, classes, class_content):
        Composite.__init__(self)
        self.class_content = class_content

        t = Trees(self, classes)
        clspan = DockPanel()
        clspan.setWidth("100%%")
        self.clstext = HTML()
        txtscroll = ScrollPanel(self.clstext)
        clsscroll = ScrollPanel(t)
        clspan.add(clsscroll, DockPanel.WEST)
        clspan.add(txtscroll, DockPanel.EAST)
        clspan.setCellWidth(txtscroll, "100%%")
        clspan.setCellWidth(clsscroll, "260px")
        t.setWidth("250px")
        title = bigtitle('Classes')
        self.initWidget(section(title, 'classes', clspan))

        self.clspan = clspan
        self.txtscroll = txtscroll
        self.clsscroll = clsscroll
        self.t = t

    def setSize(self, width, height):

        #self.clsscroll.setWidth("%dpx" % cls_scroll_width)
        offs = self.clsscroll.getAbsoluteLeft() + 260
        self.txtscroll.setWidth("%dpx" % (width - offs))
        #self.clspan.setCellWidth(self.txtscroll, "%dpx" % (width - offs - 10))
        self.clstext.setWidth("%dpx" % (width - offs - 20))

        self.txtscroll.setHeight("%dpx" % height)
        self.clsscroll.setHeight("%dpx" % height)

    def class_show(self, itemname):

        self.clstext.setHTML(self.class_content[itemname])
    def __init__(self, mailObject):
        Composite.__init__(self)
        self.countLabel = HTML()
        self.newerButton = HTML("<a href='javascript:;'>&lt; newer</a>", True)
        self.olderButton = HTML("<a href='javascript:;'>older &gt;</a>", True)
        self.startIndex = 0
        self.selectedRow = -1
        self.table = FlexTable()
        self.navBar = HorizontalPanel()
        self.mailObject = mailObject

        # Setup the table.
        self.table.setCellSpacing(0)
        self.table.setCellPadding(2)
        self.table.setWidth("100%")

        # Hook up events.
        self.table.addTableListener(self)
        self.newerButton.addClickListener(self)
        self.olderButton.addClickListener(self)

        # Create the 'navigation' bar at the upper-right.
        innerNavBar = HorizontalPanel()
        innerNavBar.setStyleName("mail-ListNavBar")
        innerNavBar.setSpacing(8)
        innerNavBar.add(self.newerButton)
        innerNavBar.add(self.countLabel)
        innerNavBar.add(self.olderButton)

        self.navBar.setHorizontalAlignment(HasAlignment.ALIGN_RIGHT)
        self.navBar.add(innerNavBar)
        self.navBar.setWidth("100%")

        self.initWidget(self.table)
        self.setStyleName("mail-List")

        self.initTable()
        self.update()
    def __init__(self, classes, class_content):
        Composite.__init__(self)
        self.class_content = class_content

        t = Trees(self, classes)
        clspan = DockPanel()
        clspan.setWidth("100%%")
        self.clstext = HTML()
        txtscroll = ScrollPanel(self.clstext)
        clsscroll = ScrollPanel(t)
        clspan.add(clsscroll, DockPanel.WEST)
        clspan.add(txtscroll, DockPanel.EAST)
        clspan.setCellWidth(txtscroll, "100%%")
        clspan.setCellWidth(clsscroll, "260px")
        t.setWidth("250px")
        title = bigtitle('Classes')
        self.initWidget(section(title, 'classes', clspan))

        self.clspan = clspan
        self.txtscroll = txtscroll
        self.clsscroll = clsscroll
        self.t = t
class MailList(Composite):

    VISIBLE_EMAIL_COUNT = 10

    def __init__(self, mailObject):
        Composite.__init__(self)
        self.countLabel = HTML()
        self.newerButton = HTML("<a href='javascript:;'>&lt; newer</a>", True)
        self.olderButton = HTML("<a href='javascript:;'>older &gt;</a>", True)
        self.startIndex = 0
        self.selectedRow = -1
        self.table = FlexTable()
        self.navBar = HorizontalPanel()
        self.mailObject = mailObject

        # Setup the table.
        self.table.setCellSpacing(0)
        self.table.setCellPadding(2)
        self.table.setWidth("100%")

        # Hook up events.
        self.table.addTableListener(self)
        self.newerButton.addClickListener(self)
        self.olderButton.addClickListener(self)

        # Create the 'navigation' bar at the upper-right.
        innerNavBar = HorizontalPanel()
        innerNavBar.setStyleName("mail-ListNavBar")
        innerNavBar.setSpacing(8)
        innerNavBar.add(self.newerButton)
        innerNavBar.add(self.countLabel)
        innerNavBar.add(self.olderButton)

        self.navBar.setHorizontalAlignment(HasAlignment.ALIGN_RIGHT)
        self.navBar.add(innerNavBar)
        self.navBar.setWidth("100%")

        self.initWidget(self.table)
        self.setStyleName("mail-List")

        self.initTable()
        self.update()

    def onCellClicked(self, sender, row, cell):
        # Select the row that was clicked (-1 to account for header row).
        if (row > 0):
            self.selectRow(row - 1)

    def onClick(self, sender, event):
        print "click", sender
        if (sender == self.olderButton):
            # Move forward a page.
            self.startIndex = self.startIndex + MailList.VISIBLE_EMAIL_COUNT
            if (self.startIndex >= MailItems().getMailItemCount()):
                self.startIndex = self.startIndex - MailList.VISIBLE_EMAIL_COUNT
            else:
                self.styleRow(self.selectedRow, False)
                self.selectedRow = -1
                self.update()
    
        elif (sender == self.newerButton):
            # Move back a page.
            self.startIndex = self.startIndex - MailList.VISIBLE_EMAIL_COUNT
            if (self.startIndex < 0):
                self.startIndex = 0
            else:
                self.styleRow(self.selectedRow, False)
                self.selectedRow = -1
                self.update()

    def initTable(self):
        # Create the header row.
        self.table.setText(0, 0, "sender")
        self.table.setText(0, 1, "email")
        self.table.setText(0, 2, "subject")
        self.table.setWidget(0, 3, self.navBar)
        self.table.getRowFormatter().setStyleName(0, "mail-ListHeader")

        # Initialize the rest of the rows.
        i = 0
        while i < MailList.VISIBLE_EMAIL_COUNT:
            self.table.setText(i + 1, 0, "")
            self.table.setText(i + 1, 1, "")
            self.table.setText(i + 1, 2, "")
            self.table.getCellFormatter().setWordWrap(i + 1, 0, False)
            self.table.getCellFormatter().setWordWrap(i + 1, 1, False)
            self.table.getCellFormatter().setWordWrap(i + 1, 2, False)
            self.table.getFlexCellFormatter().setColSpan(i + 1, 2, 2)
            i = i + 1


    def selectRow(self, row):
        # When a row (other than the first one, which is used as a header) is
        # selected, display its associated MailItem.
        item = MailItems().getMailItem(self.startIndex + row)
        if (item == None):
            return
                    
        self.styleRow(self.selectedRow, False)
        self.styleRow(row, True)

        item.read = True
        self.selectedRow = row
        self.mailObject.get().displayItem(item)


    def styleRow(self, row, selected):
        if (row != -1):
            if (selected):
                self.table.getRowFormatter().addStyleName(row + 1, "mail-SelectedRow")
            else:
                self.table.getRowFormatter().removeStyleName(row + 1, "mail-SelectedRow")

    def update(self):
        # Update the older/newer buttons & label.
        count = MailItems().getMailItemCount()
        max = self.startIndex + MailList.VISIBLE_EMAIL_COUNT
        if (max > count):
            max = count

        self.newerButton.setVisible(self.startIndex != 0)
        self.olderButton.setVisible(self.startIndex + MailList.VISIBLE_EMAIL_COUNT < count)
        startIndexPlusOne = self.startIndex + 1
        self.countLabel.setText("" + "%d" % startIndexPlusOne + " - " + "%d" % max + " of " + "%d" % count)

        # Show the selected emails.
        i = 0
        while (i < MailList.VISIBLE_EMAIL_COUNT):
            # Don't read past the end.
            if (self.startIndex + i >= MailItems().getMailItemCount()):
                break

            item = MailItems().getMailItem(self.startIndex + i)

            # Add a row to the table, then set each of its columns to the
            # email's sender and subject values.

            self.table.setText(i + 1, 0, item.sender)
            self.table.setText(i + 1, 1, item.email)
            self.table.setText(i + 1, 2, item.subject)

            i = i + 1

        # Clear any remaining slots.
        while (i < MailList.VISIBLE_EMAIL_COUNT):
            self.table.setHTML(i + 1, 0, "&nbsp;")
            self.table.setHTML(i + 1, 1, "&nbsp;")
            self.table.setHTML(i + 1, 2, "&nbsp;")
            i = i + 1

        # Select the first row if none is selected.
        if (self.selectedRow == -1):
            self.selectRow(0)
class MailDetail(Composite):
    def __init__(self):
        Composite.__init__(self)
        panel = VerticalPanel()
        headerPanel = VerticalPanel()
        self.subject = HTML()
        self.sender = HTML()
        self.recipient = HTML()
        self.body = HTML()
        self.scroller = ScrollPanel(self.body)

        self.body.setWordWrap(True)

        headerPanel.add(self.subject)
        headerPanel.add(self.sender)
        headerPanel.add(self.recipient)
        headerPanel.setWidth("100%")

        innerPanel = DockPanel()
        innerPanel.add(headerPanel, DockPanel.NORTH)
        innerPanel.add(self.scroller, DockPanel.CENTER)

        innerPanel.setCellHeight(self.scroller, "100%")
        panel.add(innerPanel)
        innerPanel.setSize("100%", "100%")
        self.scroller.setSize("100%", "100%")
        self.initWidget(panel)

        self.setStyleName("mail-Detail")
        headerPanel.setStyleName("mail-DetailHeader")
        innerPanel.setStyleName("mail-DetailInner")
        self.subject.setStyleName("mail-DetailSubject")
        self.sender.setStyleName("mail-DetailSender")
        self.recipient.setStyleName("mail-DetailRecipient")
        self.body.setStyleName("mail-DetailBody")
        #Logger("Mail detail", " ")

    def setItem(self, item):
        self.subject.setHTML(item.subject)
        self.sender.setHTML("<b>From:</b>&nbsp;" + item.sender)
        self.recipient.setHTML("<b>To:</b>&nbsp;[email protected]")
        self.body.setHTML(item.body)
        
    def adjustSize(self, windowWidth, windowHeight):
        scrollWidth = windowWidth - self.scroller.getAbsoluteLeft() - 9
        if (scrollWidth < 1):
            scrollWidth = 1

        scrollHeight = windowHeight - self.scroller.getAbsoluteTop() - 9
        if (scrollHeight < 1):
            scrollHeight = 1

        self.scroller.setSize("%dpx" % scrollWidth, "%dpx" % scrollHeight)
class PermissionDialog(Composite):

    """
    Display permission dialog to user.
    """
    
    @java.init
    def __init__(self, *a, **kw):
        self.outer = VerticalPanel()
        self.handler = None
        self.apiClient = ApiFactory.getInstance()
        self.loader = HTML(u"Checking permission")
        self.message = None
    
    @java.interface
    class PermissionHandler(java.Interface):
        
        def onPermissionChange(self, granted):
            pass
    
    @__init__.register
    @java.typed()
    def __init__(self, ):
        self.__init__._super()
        """
        Create a new PermissionDialog
        """
        self.initWidget(self.outer)
    
    @__init__.register
    @java.typed(String)
    def __init__(self, message):
        self.__init__._super()
        self.initWidget(self.outer)
        self.message = message
    
    @java.private
    @java.typed(Permission)
    def createShowPermissionUI(self, permission):
        a = Anchor()
        if self.message is not None:
            a.setHTML(java.str(u"<h3>" + java.str(self.message)) + u"</h3>")
        else:
            a.setHTML(java.str(u"<h3>Grant  " + java.str(permission)) + u" permission</h3>")
        a.addStyleName(u"clickable")
        class _anonymous(ClickHandler):
            
            @java.typed(ClickEvent)
            def onClick(self, event):
                class _anonymous(AsyncCallback):
                    
                    @java.typed(Throwable)
                    def onFailure(self, caught):
                        ErrorResponseUI(caught).center()
                    
                    @java.typed(Boolean)
                    def onSuccess(self, result):
                        if self.handler is not None:
                            self.handler.onPermissionChange(result)
                FacebookConnect.showPermissionDialog(permission, _anonymous())
        a.addClickHandler(_anonymous())
        return a
    
    @java.typed(Permission)
    def checkPermission(self, permission):
        self.outer.clear()
        self.loader.setHTML(java.str(u"Checking " + java.str(permission)) + u" permission ")
        self.outer.add(self.loader)
        class _anonymous(AsyncCallback):
            
            @java.typed(Throwable)
            def onFailure(self, caught):
                ErrorResponseUI(caught).center()
            
            @java.typed(Boolean)
            def onSuccess(self, hasPermission):
                self.outer.remove(self.loader)
                if hasPermission:
                    self.handler.onPermissionChange(True)
                else:
                    self.outer.add(self.createShowPermissionUI(permission))
        self.apiClient.usersHasAppPermission(permission, _anonymous()) #  Check if user has the right permission. If not show permission dialog
    
    @java.typed(PermissionHandler)
    def addPermissionHandler(self, handler):
        self.handler = handler
 def __init__(self, *a, **kw):
     self.outer = VerticalPanel()
     self.handler = None
     self.apiClient = ApiFactory.getInstance()
     self.loader = HTML(u"Checking permission")
     self.message = None
Exemple #22
0
class GwittIt(Object):

    """
    Entry point classes define <code>onModuleLoad()</code>.
    """

    @java.init
    def __init__(self, *a, **kw):
        self.outer = VerticalPanel()
        self.topMenu = None
        self.apiClient = GWT.create(FacebookApi.__class__)
        self.loginBoxPanel = None
        self.loginCallback = None
        self.waitingText = HTML(u"Waiting for facebook connect status...")
        self.userService = GWT.create(UserService.__class__)

    #  Runs on every localhost port 8080
    API_KEY = u"1d81c942b38e2e6b3fc35a147d371ab3"

    @java.private
    @java.innerclass
    @java.implements(AsyncCallbackVoid)
    class LogCallback(Object):

        """
        Change this if you setup your own app
        """

        @java.init
        def __init__(self, *a, **kw):
            pass

        @java.typed(Throwable)
        def onFailure(self, caught):
            pass

        @java.typed(Void)
        def onSuccess(self, result):
            pass

    @java.private
    @java.innerclass
    @java.implements(AsyncCallbackConnectState)
    class RenderAppWhenReadyCallback(Object):

        """
        Fired when we know users status
        """

        @java.init
        def __init__(self, *a, **kw):
            pass

        @java.typed(Throwable)
        def onFailure(self, caught):
            Window.alert(u"Failed to get status:" + java.str(caught))

        @java.typed(ConnectState)
        def onSuccess(self, result):
            self.outer.remove(self.waitingText)
            if result == ConnectState.connected:
                self.renderWhenConnected()
            else:
                self.renderWhenNotConnected()

    @java.private
    @java.innerclass
    @java.implements(LoginCallback)
    class MyLoginCallback(Object):

        """
        Fired when user clicks fb login button
        """

        @java.init
        def __init__(self, *a, **kw):
            pass

        def onLogin(self):
            self.renderWhenConnected()
            self.sendNotificationToDeveloper()
            self.logUser()

    def onModuleLoad(self):
        """
        Load Main Module
        """
        self.loginCallback = self.MyLoginCallback()
        self.topMenu = TopMenu()
        self.outer.getElement().setId(u"GwittIt")
        self.outer.ensureDebugId(u"GwittIt")
        self.waitingText.getElement().setAttribute(u"style", u"color: white; font-weight: bold")
        self.outer.add(self.waitingText)
        FacebookConnect.init(
            self.__class__.API_KEY, u"/xd_receiver.htm", self.loginCallback
        )  #  Set up Facebook Connect
        FacebookConnect.waitUntilStatusReady(
            self.RenderAppWhenReadyCallback()
        )  #  Wait until we can determine the users status
        RootPanel.get().add(self.outer)  #  Add UI.

    def renderWhenConnected(self):
        """
        Render when user is connected
        """
        self.topMenu.renderLoginInfo()
        self.outer.clear()
        self.outer.add(self.topMenu)
        self.outer.add(ShowcaseClient())

    def renderWhenNotConnected(self):
        """
        Render when user is not connected
        """
        self.loginBoxPanel = LoginBox()
        self.loginBoxPanel.addLoginCallback(self.loginCallback)
        self.outer.add(self.topMenu)
        self.outer.add(self.loginBoxPanel)

    @java.private
    def sendNotificationToDeveloper(self):
        """
        Send notification about who added the app. used for personal stats .
        """
        notification = u" logged in using " + java.str(self.getUserAgent())
        recepients = ArrayList((Long))
        recepients.add(Long(744450545))
        self.apiClient.notificationsSendEmail(recepients, u"User logged in", notification, u"", Callback((List)))

    @java.private
    def logUser(self):
        self.userService.logUser(self.apiClient.getLoggedInUser(), self.LogCallback())

    @java.static
    @java.native
    def getUserAgent(self):
        """
 def makeLabel(self, caption):
     html = HTML(caption)
     html.setStyleName("ks-layouts-Label")
     return html
class KitchenSink:

    def onHistoryChanged(self, token):
        print "history changed", token
        info = self.sink_list.find(token)
        if info:
            self.show(info, False)
        else:
            self.showInfo()

    def onModuleLoad(self):
        self.curInfo=''
        self.curSink=None
        self.description=HTML()
        self.sink_list=SinkList()
        self.panel=DockPanel()
        
        self.loadSinks()
        self.sinkContainer = DockPanel()
        self.sinkContainer.setStyleName("ks-Sink")

        vp=VerticalPanel()
        vp.setWidth("100%")
        vp.add(self.description)
        vp.add(self.sinkContainer)

        self.description.setStyleName("ks-Info")

        self.panel.add(self.sink_list, DockPanel.WEST)
        self.panel.add(vp, DockPanel.CENTER)

        self.panel.setCellVerticalAlignment(self.sink_list, HasAlignment.ALIGN_TOP)
        self.panel.setCellWidth(vp, "100%")

        History().addHistoryListener(self)
        RootPanel().add(self.panel)
        #RootPanel().add(Logger())

        #Show the initial screen.
        initToken = History().getToken()
        if len(initToken):
            self.onHistoryChanged(initToken)
        else:
			self.showInfo()

    def show(self, info, affectHistory):
        if info == self.curInfo: return
        self.curInfo = info

        #Logger().write("", "showing " + info.getName())
        if self.curSink <> None:
            self.curSink.onHide()
            #Logger().write("", "removing " + self.curSink)
            self.sinkContainer.remove(self.curSink)

        self.curSink = info.getInstance()
        self.sink_list.setSinkSelection(info.getName())
        self.description.setHTML(info.getDescription())

        if (affectHistory):
            History().newItem(info.getName())

        self.sinkContainer.add(self.curSink, DockPanel.CENTER)
        self.sinkContainer.setCellWidth(self.curSink, "100%")
        self.sinkContainer.setCellHeight(self.curSink, "100%")
        self.sinkContainer.setCellVerticalAlignment(self.curSink, HasAlignment.ALIGN_TOP)
        self.curSink.onShow()
        
    def loadSinks(self):
        self.sink_list.addSink(Info.init())
        self.sink_list.addSink(Buttons.init())
        self.sink_list.addSink(Menus.init())
        self.sink_list.addSink(Images.init())
        self.sink_list.addSink(Layouts.init())
        self.sink_list.addSink(Lists.init())
        self.sink_list.addSink(Popups.init())
        self.sink_list.addSink(Tables.init())
        self.sink_list.addSink(Text.init())
        self.sink_list.addSink(Trees.init())
        self.sink_list.addSink(Frames.init())
        self.sink_list.addSink(Tabs.init())

    def showInfo(self):
        self.show(self.sink_list.find("Info"), False)