[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, " ");
+ } 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