[jboss-svn-commits] JBL Code SVN: r8271 - in labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client: . common modeldriven/ui

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Dec 12 16:28:39 EST 2006


Author: michael.neale at jboss.com
Date: 2006-12-12 16:28:34 -0500 (Tue, 12 Dec 2006)
New Revision: 8271

Added:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DatePicker.java
Modified:
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java
   labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java
Log:
some tweaks with drop downs and a date picker (calendar) widget

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java	2006-12-12 21:10:41 UTC (rev 8270)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/Packages.java	2006-12-12 21:28:34 UTC (rev 8271)
@@ -1,5 +1,6 @@
 package org.drools.brms.client;
 
+import org.drools.brms.client.common.DatePicker;
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.model.ActionAssertFact;
 import org.drools.brms.client.modeldriven.model.ActionFieldValue;
@@ -47,6 +48,10 @@
         panel.add( new RuleModeller(getDummySuggestionEngine(), getDummyData() ) );
         
         panel.setSpacing( 8 );
+        
+        DatePicker pick = new DatePicker();
+        panel.add( pick );
+        
         initWidget( panel );
     }
 

Added: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DatePicker.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DatePicker.java	2006-12-12 21:10:41 UTC (rev 8270)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DatePicker.java	2006-12-12 21:28:34 UTC (rev 8271)
@@ -0,0 +1,263 @@
+package org.drools.brms.client.common;
+
+import java.util.Date;
+
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Element;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.ChangeListener;
+import com.google.gwt.user.client.ui.ChangeListenerCollection;
+import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.DockPanel;
+import com.google.gwt.user.client.ui.Grid;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.HasAlignment;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.SourcesChangeEvents;
+import com.google.gwt.user.client.ui.Widget;
+
+public class DatePicker extends Composite 
+    implements ClickListener, SourcesChangeEvents {
+
+  private class NavBar extends Composite implements ClickListener {
+
+    public final DockPanel bar = new DockPanel();
+    public final Button prevMonth = new Button("<", this);
+    public final Button prevYear = new Button("<<", this);
+    public final Button nextYear = new Button(">>", this);
+    public final Button nextMonth = new Button(">", this);
+    public final HTML title = new HTML();
+
+    private final DatePicker calendar;
+
+    public NavBar(DatePicker calendar) {
+      this.calendar = calendar;
+
+      initWidget(bar);
+      bar.setStyleName("navbar");
+      title.setStyleName("header");
+
+      HorizontalPanel prevButtons = new HorizontalPanel();
+      prevButtons.add(prevMonth);
+      prevButtons.add(prevYear);
+
+      HorizontalPanel nextButtons = new HorizontalPanel();
+      nextButtons.add(nextYear);
+      nextButtons.add(nextMonth);
+
+      bar.add(prevButtons, DockPanel.WEST);
+      bar.setCellHorizontalAlignment(prevButtons, DockPanel.ALIGN_LEFT);
+      bar.add(nextButtons, DockPanel.EAST);
+      bar.setCellHorizontalAlignment(nextButtons, DockPanel.ALIGN_RIGHT);
+      bar.add(title, DockPanel.CENTER);
+      bar.setVerticalAlignment(DockPanel.ALIGN_MIDDLE);
+      bar.setCellHorizontalAlignment(title, HasAlignment.ALIGN_CENTER);
+      bar.setCellVerticalAlignment(title, HasAlignment.ALIGN_MIDDLE);
+      bar.setCellWidth(title, "100%");
+    }
+
+    public void onClick(Widget sender) {
+      if (sender == prevMonth) {
+        calendar.prevMonth();
+      } else if (sender == prevYear) {
+        calendar.prevYear();
+      } else if (sender == nextYear) {
+        calendar.nextYear();
+      } else if (sender == nextMonth) {
+        calendar.nextMonth();
+      }
+    }
+  }
+
+  private static class CellHTML extends HTML {
+    private int day;
+       
+    public CellHTML(String text, int day) {
+      super(text);
+      this.day = day;
+    }
+       
+    public int getDay() {
+      return day;
+    }
+  }
+  
+  private final NavBar navbar = new NavBar(this);
+  private final DockPanel outer = new DockPanel();
+
+  private final Grid grid = new Grid(6, 7) {
+    public boolean clearCell(int row, int column) {
+      boolean retValue = super.clearCell(row, column);
+           
+      Element td = getCellFormatter().getElement(row, column);
+      DOM.setInnerHTML(td, "");
+      return retValue;
+    }
+  };
+
+  private Date date = new Date();
+
+  private ChangeListenerCollection changeListeners;
+   
+  private String[] days = new String[] { "Sunday", "Monday", "Tuesday",
+      "Wednesday", "Thursday", "Friday", "Saturday" };
+
+  private String[] months = new String[] { "January", "February", "March",
+      "April", "May", "June", "July", "August", "September", "October",
+      "November", "December" };
+
+  public DatePicker() {
+    initWidget(outer);
+    grid.setStyleName("table");
+    grid.setCellSpacing(0);
+    outer.add(navbar, DockPanel.NORTH);
+    outer.add(grid, DockPanel.CENTER);
+    drawCalendar();
+    setStyleName("DatePicker");
+  }
+
+  private void drawCalendar() {
+    int year = getYear();
+    int month = getMonth();
+    int day = getDay();
+    setHeaderText(year, month);
+    grid.getRowFormatter().setStyleName(0, "weekheader");
+    for (int i = 0; i < days.length; i++) {
+      grid.getCellFormatter().setStyleName(0, i, "days");
+      grid.setText(0, i, days[i].substring(0, 3));
+    }
+
+    Date now = new Date();
+    int sameDay = now.getDate();
+    int today = (now.getMonth() == month && now.getYear()+1900 == year) ? sameDay : 0;
+       
+    int firstDay = new Date(year - 1900, month, 1).getDay();
+    int numOfDays = getDaysInMonth(year, month);
+
+    int j = 0;
+    for (int i = 1; i < 6; i++) {
+      for (int k = 0; k < 7; k++, j++) {
+        int displayNum = (j - firstDay + 1);
+        if (j < firstDay || displayNum > numOfDays) {
+          grid.getCellFormatter().setStyleName(i, k, "empty");
+          grid.setHTML(i, k, "&nbsp;");
+        } else {
+          HTML html = new CellHTML(
+            "<span>" + String.valueOf(displayNum) + "</span>", 
+            displayNum);
+          html.addClickListener(this);
+          grid.getCellFormatter().setStyleName(i, k, "cell");
+          if (displayNum == today) {
+            grid.getCellFormatter().addStyleName(i, k, "today");
+          } else if (displayNum == sameDay) {
+            grid.getCellFormatter().addStyleName(i, k, "day");
+          }
+          grid.setWidget(i, k, html);
+        }
+      }
+    }
+  }
+
+  protected void setHeaderText(int year, int month) {
+    navbar.title.setText(months[month] + ", " + year);
+  }
+   
+  private int getDaysInMonth(int year, int month) {
+    switch (month) {
+      case 1:
+        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
+          return 29; // leap year
+        else
+          return 28;
+      case 3:
+        return 30;
+      case 5:
+        return 30;
+      case 8:
+        return 30;
+      case 10:
+        return 30;
+      default:
+        return 31;
+    }
+  }
+
+  public void prevMonth() {
+    int month = getMonth() - 1;
+    if (month < 0) {
+      setDate(getYear() - 1, 11, getDay());
+    } else {
+      setMonth(month);
+    }
+    drawCalendar();
+  }
+
+  public void nextMonth() {
+    int month = getMonth() + 1;
+    if (month > 11) {
+      setDate(getYear() + 1, 0, getDay());
+    } else {
+      setMonth(month);
+    }
+    drawCalendar();
+  }
+   
+  public void prevYear() {
+    setYear(getYear() - 1);
+    drawCalendar();
+  }
+
+  public void nextYear() {
+    setYear(getYear() + 1);
+    drawCalendar();
+  }
+
+  private void setDate(int year, int month, int day) {
+    date = new Date(year - 1900, month, day);
+  }
+   
+  private void setYear(int year) {
+    date.setYear(year - 1900);
+  }
+
+  private void setMonth(int month) {
+    date.setMonth(month);
+  }
+
+  public int getYear() {
+    return 1900 + date.getYear();
+  }
+
+  public int getMonth() {
+    return date.getMonth();
+  }
+
+  public int getDay() {
+    return date.getDate();
+  }
+   
+  public Date getDate() {
+    return date;
+  }
+
+  public void onClick(Widget sender) {
+    CellHTML cell = (CellHTML)sender;
+    setDate(getYear(), getMonth(), cell.getDay());
+    drawCalendar();
+    if (changeListeners != null) {
+      changeListeners.fireChange(this);
+    }
+  }
+
+  public void addChangeListener(ChangeListener listener) {
+    if (changeListeners == null)
+      changeListeners = new ChangeListenerCollection();
+    changeListeners.add(listener);
+  }
+
+  public void removeChangeListener(ChangeListener listener) {
+    if (changeListeners != null)
+      changeListeners.remove(listener);
+  }
+}  


Property changes on: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/common/DatePicker.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java
===================================================================
--- labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java	2006-12-12 21:10:41 UTC (rev 8270)
+++ labs/jbossrules/trunk/drools-jbrms/src/main/java/org/drools/brms/client/modeldriven/ui/RuleModeller.java	2006-12-12 21:28:34 UTC (rev 8271)
@@ -148,7 +148,7 @@
             factTypeBox.addItem( facts[i] );
         }
         factTypeBox.setSelectedIndex( 0 );
-        popup.addAttribute( "Fact", factTypeBox );
+        if (facts.length > 0) popup.addAttribute( "Fact", factTypeBox );
         factTypeBox.addChangeListener( new ChangeListener() {
             public void onChange(Widget w) {
                 String s = factTypeBox.getItemText( factTypeBox.getSelectedIndex() );
@@ -172,7 +172,7 @@
         }
         ceBox.setSelectedIndex( 0 );
         
-        popup.addAttribute( "Condition type", ceBox );
+        if (ces.length > 0) popup.addAttribute( "Condition type", ceBox );
         ceBox.addChangeListener( new ChangeListener() {
             public void onChange(Widget w) {
                 String s = ceBox.getValue( ceBox.getSelectedIndex() );
@@ -193,8 +193,10 @@
         
         popup.setStyleName( "ks-popups-Popup" );
         
-        List vars = model.getBoundFacts();
-        
+        //
+        // First load up the stuff to do with bound variables or globals
+        //
+        List vars = model.getBoundFacts();        
         final ListBox varBox = new ListBox();
         final ListBox retractBox = new ListBox();
         varBox.addItem( "Choose ..." );        
@@ -217,9 +219,18 @@
             }
         });
         
+        if (varBox.getItemCount() > 1) {
+            popup.addAttribute( "Modify a field on", varBox );
+            
+        }
+        if (retractBox.getItemCount() > 1) {
+            popup.addAttribute( "Retract a fact", retractBox );
+        }
+        
+        
         retractBox.addChangeListener( new ChangeListener() {
             public void onChange(Widget w) {
-                addRetract(retractBox.getItemText( retractBox.getItemCount() ));
+                addRetract(retractBox.getItemText( retractBox.getSelectedIndex() ));
                 popup.hide();
             }            
         });
@@ -241,9 +252,10 @@
             }            
         });
         
-        popup.addAttribute( "Modify a field on", varBox );
-        popup.addAttribute( "Retract a fact", retractBox );
-        popup.addAttribute( "Assert a new fact", factsToAssert );
+        
+        if (factsToAssert.getItemCount() > 1) {
+            popup.addAttribute( "Assert a new fact", factsToAssert );
+        }
 
         popup.setPopupPosition( w.getAbsoluteLeft() - 400, w.getAbsoluteTop() );
         popup.show();




More information about the jboss-svn-commits mailing list