Revision: 4836
http://sourceforge.net/p/vexi/code/4836
Author: mkpg2
Date: 2015-12-19 06:32:58 +0000 (Sat, 19 Dec 2015)
Log Message:
-----------
datetime improvements.
- fix datepicker. Was initialising as today, not date.
- improve datepicker. Should initialise with default date.
- scroll between date and time fields (left right)
- enter/delete sets both fields
- ability to set default value on datetime
- removed some obselete (pre vexi.js.Date/vexi.js.Instant) code
Modified Paths:
--------------
branches/vexi3/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/datefield.t
branches/vexi3/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/datetime.t
branches/vexi3/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/timefield.t
branches/vexi3/org.vexi-vexi.widgets/src_poke/poke/widgets/datetime.t
Added Paths:
-----------
branches/vexi3/org.vexi-vexi.widgets/src_poke/poke/widgets/currencyfield.t
Modified:
branches/vexi3/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/datefield.t
===================================================================
---
branches/vexi3/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/datefield.t
2015-12-09 15:57:13 UTC (rev 4835)
+++
branches/vexi3/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/datefield.t
2015-12-19 06:32:58 UTC (rev 4836)
@@ -106,17 +106,27 @@
var min = function(a, b) { return a>b ? b : a; }
+ thisbox["default"] ++= function(){
+ var r = cascade;
+ if(r==null)
+ r = vexi.js.Date.today.as("YMD");
+ return r;
+ };
+
// set the surface position of the popbox
$popbox.surface_x ++= function() { return
min(surface.frame.distanceto(thisbox).x, surface.frame.width - $popbox.width); }
$popbox.surface_y ++= function() { return
min(surface.frame.distanceto(thisbox).y, surface.frame.height -
$popbox.height); }
/** assign date and popup */
$select.action ++= function(v) {
- popup = true;
var date = value;
+ if(date==null) date = thisbox["default"];
$datepicker.day = date?.day;
$datepicker.month = date?.month;
$datepicker.year = date?.year;
+ // have to set day,month,year before popuping up as widget
initialises based on values, but
+ // they cannot be set later ...
+ popup = true;
return;
}
@@ -129,6 +139,10 @@
finally { $editview.display = false; }
}
+ thisbox.setDefault = function(){
+ value = thisbox["default"];
+ };
+
thisbox.enabled ++= function(v) {
cascade = v;
var max = vexi.ui.maxdim;
@@ -177,6 +191,12 @@
return;
}
+ thisbox.enterRight = function(){
+ thisbox.focused = true;
+ thisbox.selected = $dateview[$dateview.numchildren-1];
+ };
+
+
thisbox.KeyPressed ++= function(v) {
if (popped) {
// delegate to datepicker if it's open
@@ -190,6 +210,11 @@
}
if (v.length>1) {
// timeview still on display
+ if(selected==null){
+ selected = $dateview[si-2];
+ return;
+ }
+
var si = dateview.indexof(selected);
switch(v) {
case "left":
@@ -200,6 +225,10 @@
case "right":
if (4>si) {
selected = $dateview[si+2];
+ }else{
+ if(exitRight){
+ exitRight();
+ }
}
break;
case "up":
@@ -213,7 +242,7 @@
break;
case "enter":
if (value==null) {
- value = vexi.js.Date.today.as("YMD");
+ setDefault();
} else {
value = value;
}
Modified:
branches/vexi3/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/datetime.t
===================================================================
---
branches/vexi3/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/datetime.t
2015-12-09 15:57:13 UTC (rev 4835)
+++
branches/vexi3/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/datetime.t
2015-12-19 06:32:58 UTC (rev 4836)
@@ -6,31 +6,79 @@
<ui:box margin="3" shrink="true">
<datefield id="date" margin="0" fieldid="datefield" />
<timefield id="time" margin="0" fieldid="timefield" />
-
const Date = vexi.js.Date;
+ const Instant = vexi.js.Instant;
+ thisbox["default"] ++= function(){
+ return ""+(cascade?:new vexi.js.Instant());
+ };
+
+ // handle interaction between the two widgets
+
+ $date["default"] ++= function(){
+ var dt = ""+(thisbox["default"]);
+ var arr = dt.split(' ');
+ return Date.tryParseString(arr[0]);
+ };
+
+ // scroll left/right between them
+ $date.exitRight = function(){
+ $time.enterLeft();
+ return true;
+ }
+ $time.exitLeft = function(){
+ $date.enterRight();
+ return true;
+ };
+
+ // pass over/underflow from timefield to date
+ $time.dayout ++= function(v){
+ $date.value = $date.value.addPeriod('day', v);
+ };
+
+
+ const castValue = function(v){
+ if((typeof v)=="string"){
+ return Instant.tryParseTimestamp(v);
+ }
+ return v;
+ };
+
+ const keyWrite = function(v){
+ switch(v){
+ case "enter":
+ if(value==null){
+ if($date.value!=null){
+ $time.setDefault();
+ }else if($time.value!=null){
+ $date.setDefault();
+ }else{
+ thisbox.value =
castValue(thisbox["default"]);
+ }
+ return;
+ }
+ break;
+ case "back_space":
+ case "delete":
+ $date.value = null;
+ $time.value = null;
+ return;
+ }
+
+ cascade = v;
+ };
+
+ $date.KeyPressed ++= keyWrite;
+ $time.KeyPressed ++= keyWrite;
+
thisbox.v_datefield = $date;
thisbox.v_timefield = $time;
thisbox.v_fillbox = thisbox;
thisbox.v_textbox = false;
thisbox.valuetype;
+
- thisbox.date ++= function(v) {
- $date.value = v;
- $time.value = v;
- return;
- }
-
- thisbox.date ++= function() {
- var dstr = $date.value+' '+$time.value;
- try {
- return vexi.date(dstr);
- } catch(e) {
- throw "invalid date string: "+d;
- }
- }
-
thisbox.enabled ++= function(v) {
cascade = v;
$date.enabled = v;
@@ -75,9 +123,12 @@
}
// purposefully fall through...
case "date":
+ $date.value = v;
+ $time.setDefault();
+ break;
case "null":
- $date.value = v;
- $time.value = v;
+ $date.value = null;
+ $time.value = null;
break;
default:
throw "unsupported datetime type '"+typeof(v)+"'";
@@ -94,17 +145,13 @@
}
var r = d+' '+t;
- if(valuetype=="vexi.js.Instant"){
- r = vexi.js.Instant.tryParseTimestamp(r);
- if(r==null) throw d+' '+t;
- }
-
+ r = vexi.js.Instant.tryParseTimestamp(r);
storeval = r;
return storeval;
}
- var updateValue = function(v) {
- cascade = v;
+ var updateValue = function(v1) {
+ cascade = v1;
value = value;
}
Modified:
branches/vexi3/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/timefield.t
===================================================================
---
branches/vexi3/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/timefield.t
2015-12-09 15:57:13 UTC (rev 4835)
+++
branches/vexi3/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/timefield.t
2015-12-19 06:32:58 UTC (rev 4836)
@@ -90,9 +90,11 @@
thisbox.hours ++= function(v){
while (v>23) {
v = v-24;
+ dayout = 1;
}
while (0>v) {
v = v+24;
+ dayout = -1;
}
if(_hours!=v){
@@ -273,6 +275,10 @@
thisbox.focused ++= .timefield..focusWrite;
thisbox.selected ++= .timefield..selectWrite;
+ thisbox.enterLeft = function(){
+ thisbox.focused = true;
+ thisbox.selected = $hours;
+ };
const selectPart = function(v) {
selected = trapee;
@@ -283,7 +289,7 @@
$mins.Press1 ++= selectPart;
$period.Press1 ++= selectPart;
- const setDefault = function(){
+ thisbox.setDefault = function(){
if(_hours==null and _mins==null){
parseValue(thisbox["default"]?:"now");
internalTrigger();
@@ -424,7 +430,11 @@
// timeview still on display
switch(v) {
case "left":
- selected = (selected==$period?$mins:$hours);
+ if(selected==$hours and exitLeft){
+ exitLeft();
+ }else{
+ selected = (selected==$period?$mins:$hours);
+ }
break;
case "right":
selected = (selected==$hours?$mins:$period);
Added:
branches/vexi3/org.vexi-vexi.widgets/src_poke/poke/widgets/currencyfield.t
===================================================================
--- branches/vexi3/org.vexi-vexi.widgets/src_poke/poke/widgets/currencyfield.t
(rev 0)
+++ branches/vexi3/org.vexi-vexi.widgets/src_poke/poke/widgets/currencyfield.t
2015-12-19 06:32:58 UTC (rev 4836)
@@ -0,0 +1,19 @@
+<!-- public domain -->
+
+<vexi xmlns:ui="vexi://ui" xmlns:w="vexi.widget">
+ <w:surface />
+ <ui:box orient="vertical">
+ <ui:Box text="currency"/>
+ <w:numfield id="field" scale="0" width="80">
+ <ui:Box align="left" id="box">
+ <ui:Box width="2" fill="#99ffffff"/>
+ <ui:Box text="$" hshrink="true" fill="#77ffffff"/>
+ </ui:Box>
+ thisbox.th_view.add($box);
+ </w:numfield>
+
+
+ vexi.ui.frame = thisbox;
+
+ </ui:box>
+</vexi>
Modified: branches/vexi3/org.vexi-vexi.widgets/src_poke/poke/widgets/datetime.t
===================================================================
--- branches/vexi3/org.vexi-vexi.widgets/src_poke/poke/widgets/datetime.t
2015-12-09 15:57:13 UTC (rev 4835)
+++ branches/vexi3/org.vexi-vexi.widgets/src_poke/poke/widgets/datetime.t
2015-12-19 06:32:58 UTC (rev 4836)
@@ -5,10 +5,15 @@
<ui:box orient="vertical">
<ui:box>
<ui:box id="set1" orient="vertical">
- <w:timefield fill="#ffff99" id="time"/>
- <w:datefield fill="#ffff99" id="date"/>
+ <!--<w:timefield fill="#ffff99" id="time"/>
+ <w:datefield fill="#ffff99" id="date"/>-->
<w:datetime fill="#ffff99" id="datetime"/>
- <w:weekfield fill="#ffff99" id="week"/>
+ <w:datetime fill="#ffff99" id="datetime2">
+ thisbox["default"] ++= function(){
+ return "1969-07-07 12:00:00";
+ };
+ </w:datetime>
+ <!-- <w:weekfield fill="#ffff99" id="week"/>
<w:monthfield fill="#ffff99" />
<w:quarterfield fill="#ffff99" />
<w:yearfield fill="#ffff99" />
@@ -20,7 +25,7 @@
<w:datetime />
<w:monthfield />
<w:quarterfield />
- <w:yearfield />
+ <w:yearfield />-->
</ui:box>
</ui:box>
<ui:box>
@@ -46,13 +51,14 @@
var printValueTrap = function(v){
cascade = v;
- vexi.trace(v);
+ vexi.trace([typeof v, v]);
+ if(v!=null and (typeof v)!="instant"){
+ trace(new vexi.js.Exception());
+ }
};
for (var i,b in $set1)
b.value ++= printValueTrap;
- $date.valuetype = "vexi.util.date";
- $datetime.valuetype = "vexi.js.Instant";
vexi.ui.frame = thisbox;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
_______________________________________________
Vexi-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vexi-svn