===== About the script ======
* Purpose : Rolling Clock Widget (swipe for date)
* Author : Jappie Toutenhoofd (https://plus.google.com/+JappieToutenhoofd)
* Link: https://plus.google.com/+JappieToutenhoofd/posts/
====== How to use the script ======
* Import both script's from here.
* Add a text-item and theme it as you like. Then name it 'X'.
* Run 'Roll-Clock-create' from an empty spot.
====== Script code ======
======= Roll-Clock-create =======
// Style a Text-item and give it a name. Let's say 'X'.
var nameXample = "X";
var RC_script = LL.getScriptByName("Roll-Clock");
if ( RC_script == null)
{ alert( "Also install 'Roll-Clock' not just 'Roll-Clock-create'."); return;}
var Touch = LL.getEvent();
if (Touch.getItem() != null)
{ alert( "Run from empty spot. \n Do NOT set 'item menu'. \n Only set 'Lightning menu' in script-editor."); return;}
var Tcont = Touch.getContainer();
if ( Tcont.getId() == 99)
{ alert( "Cool, but messy! Let's not do this."); return;}
var Xmpl = Tcont.getItemByName(nameXample);
if (Xmpl == null)
{ alert( "Style a Text-Item and give it the name: " + nameXample); return;}
var background = Xmpl.getBoxBackground("n");
var xe = Xmpl.getProperties();
var bordercolor = xe.getBox("i.box").getColor("bl", "n");
var bordersize = xe.getBox("i.box").getSize( "bl");
var labelsize = xe.getFloat( "s.labelFontSize");
var labelcolor = xe.getInteger("s.labelFontColor");
var labelfont = xe.getString( "s.labelFontTypeFace");
var labelstyle = xe.getString( "s.labelFontStyle");
var labelshadow = xe.getBoolean("s.labelShadow");
var shadowradius = xe.getFloat( "s.labelShadowRadius");
var offsetx = xe.getFloat( "s.labelShadowOffsetX");
var offsety = xe.getFloat( "s.labelShadowOffsetY");
var shadowcolor = xe.getInteger("s.labelShadowColor");
var clockbase = Tcont.addPanel( Touch.getTouchX(), Touch.getTouchY(), (3* Tcont.getCellWidth()), Tcont.getCellHeight());
var ce = clockbase.getProperties().edit();
ce.getBox("i.box").setColor("bl,br,bt,bb", "ns", bordercolor);
ce.getBox("i.box").setSize( "bl,br,bt,bb", bordersize );
ce.commit();
var cc = clockbase.getContainer();
var ce = cc.getProperties().edit();
ce.setBoolean("newOnGrid" ,true );
ce.setBoolean("allowDualPosition" ,true );
ce.setBoolean("useDesktopSize" ,false);
ce.setString ("scrollingDirection","NONE");
ce.setString ("gridPColumnMode" ,"NUM" ); ce.setString ("gridLColumnMode" ,"NUM");
ce.setString ("gridPRowMode" ,"NUM" ); ce.setString ("gridLRowMode" ,"NUM");
ce.setInteger("gridPColumnNum" ,5); ce.setInteger("gridLColumnNum" ,5);
ce.setInteger("gridPRowNum" ,1); ce.setInteger("gridLRowNum" ,1);
ce.commit();
for(var i=0;i<=4;++i)
{ var dgt = cc.addPanel(0,0, cc.getCellWidth(), cc.getCellHeight());
dgt.setCell(i,0,(i+1),1,true);
dgt.setName("dgt"+i);
var de = dgt.getProperties().edit();
de.getBox("i.box").setColor("bl,br,bt,bb", "ns", bordercolor);
de.getBox("i.box").setSize( "bl,br,bt,bb", bordersize );
de.commit();
var dc = dgt.getContainer()
var de = dc.getProperties().edit();
de.setBoolean("newOnGrid" ,true );
de.setBoolean("allowDualPosition" ,true );
de.setBoolean("useDesktopSize" ,false);
de.setString ("scrollingDirection","Y");
de.setString ("gridPColumnMode" ,"NUM"); de.setString ("gridLColumnMode" ,"NUM");
de.setString ("gridPRowMode" ,"NUM"); de.setString ("gridLRowMode" ,"NUM");
de.setInteger("gridPColumnNum" ,1); de.setInteger("gridLColumnNum" ,1);
de.setInteger("gridPRowNum" ,1); de.setInteger("gridLRowNum" ,1);
de.getBox("i.box").setColor("bl,br,bt,bb", "ns", bordercolor);
de.setBoolean("i.enabled" , false);
de.commit();
if ( i == 2)
{ var newItem = dc.addShortcut( ":" ,new Intent(),0,0);
newItem.setCell(0, 0, 1, 1, true);
newItem.setBoxBackground(background, "n", true);
var ed = newItem.getProperties().edit();
ed.setBoolean("s.iconVisibility" , false);
ed.setBoolean("s.labelVisibility", true );
ed.setInteger("s.labelFontColor", labelcolor);
ed.setFloat("s.labelFontSize", labelsize);
ed.setString( "s.labelFontTypeFace", labelfont);
ed.setString( "s.labelFontStyle", labelstyle);
ed.setBoolean("s.labelShadow", labelshadow );
ed.setFloat( "s.labelShadowRadius", shadowradius);
ed.setFloat( "s.labelShadowOffsetX", offsetx);
ed.setFloat( "s.labelShadowOffsetY", offsety);
ed.setInteger("s.labelShadowColor", shadowcolor);
ed.setBoolean("i.enabled" , false);
ed.commit();
var newItem = dc.addShortcut( "/" ,new Intent(),0,0);
newItem.setCell(0, 1, 1, 2, true);
newItem.setBoxBackground(background, "n", true);
var ed = newItem.getProperties().edit();
ed.setBoolean("s.iconVisibility" , false);
ed.setBoolean("s.labelVisibility", true );
ed.setInteger("s.labelFontColor", labelcolor);
ed.setFloat("s.labelFontSize", labelsize);
ed.setString( "s.labelFontTypeFace", labelfont);
ed.setString( "s.labelFontStyle", labelstyle);
ed.setBoolean("s.labelShadow", labelshadow );
ed.setFloat( "s.labelShadowRadius", shadowradius);
ed.setFloat( "s.labelShadowOffsetX", offsetx);
ed.setFloat( "s.labelShadowOffsetY", offsety);
ed.setInteger("s.labelShadowColor", shadowcolor);
ed.setBoolean("i.enabled" , false);
ed.commit();
}
else
for(var j=0;j<=9;++j)
{ var newItem = dc.addShortcut( j ,new Intent(),0,0);
newItem.setCell(0, j, 1, (j+1), true);
newItem.setBoxBackground(background, "n", true);
var ed = newItem.getProperties().edit();
ed.setBoolean("s.iconVisibility" , false);
ed.setBoolean("s.labelVisibility", true );
ed.setInteger("s.labelFontColor", labelcolor);
ed.setFloat("s.labelFontSize", labelsize);
ed.setString( "s.labelFontTypeFace", labelfont);
ed.setString( "s.labelFontStyle", labelstyle);
ed.setBoolean("s.labelShadow", labelshadow );
ed.setFloat( "s.labelShadowRadius", shadowradius);
ed.setFloat( "s.labelShadowOffsetX", offsetx);
ed.setFloat( "s.labelShadowOffsetY", offsety);
ed.setInteger("s.labelShadowColor", shadowcolor);
ed.setBoolean("i.enabled" , false);
ed.commit();
}
}
var click = cc.addShortcut("click", new Intent(), 0, 0);
click.setCell(0, 0, 5, 1, true);
var pe = click.getProperties().edit();
pe.setBoolean("s.iconVisibility", false);
pe.setBoolean("s.labelVisibility", false);
pe.setEventHandler("i.resumed", EventHandler.RUN_SCRIPT, RC_script.getId());
pe.setEventHandler("i.paused", EventHandler.RUN_SCRIPT, RC_script.getId());
pe.setEventHandler("i.tap", EventHandler.RUN_SCRIPT, RC_script.getId());
pe.setEventHandler("i.swipeUp", EventHandler.RUN_SCRIPT, RC_script.getId());
pe.setEventHandler("i.swipeDown", EventHandler.RUN_SCRIPT, RC_script.getId());
pe.commit();
// hack: the resumed event is triggered as soon as the item is created, hence before the "i.resumed" event handler is set
// the following lines will effectively pause and resume the launcher, and start the clock
var intent = new Intent();
intent.setClassName( "net.pierrox.lightning_launcher_extreme", "net.pierrox.lightning_launcher.activities.Dashboard");
intent['putExtra(java.lang.String,int)']("p", LL.getCurrentDesktop().getId());
LL.startActivity(intent);
======= Roll-Clock =======
var Period = 3500;
var evnt = LL.getEvent();
var item = evnt.getItem();
var aktie = evnt.getSource();
var dgt0 = item.getParent().getItemByName("dgt0").getContainer();
var dgt1 = item.getParent().getItemByName("dgt1").getContainer();
var dgt2 = item.getParent().getItemByName("dgt2").getContainer();
var dgt3 = item.getParent().getItemByName("dgt3").getContainer();
var dgt4 = item.getParent().getItemByName("dgt4").getContainer();
var Hgt = dgt2.getCellHeight();
var curSt = dgt2.getPositionY();
var newSt = 0;
TimerCancel();
if (aktie == "I_PAUSED") { return;};
if (aktie == "I_RESUMED") { refresh(); };
if (aktie == "I_CLICK") { switchState(); };
if (aktie == "I_SWIPE_UP") { curSt=0; switchState(); };
if (aktie == "I_SWIPE_DOWN") { curSt=1; switchState(); };
function refresh()
{ newSt = 0;
setPos();
// reseting the timer is in setPos-function.
};
function TimerCancel()
{ var id = item.getTag();
if (id != null)
{ clearTimeout(parseInt(id)); };
};
function switchState()
{ if (curSt == 0)
{ newSt = 1; }
else { newSt = 0; };
setPos();
};
function setPos()
// get current Date and Time
{ var dt = new Date();
if (newSt == 0)
{ var dt01 = dt.getHours().toString().split("");
var dt34 = dt.getMinutes().toString().split("");
} else {
var dt01 = dt.getDate().toString().split("");
var dt34 = (1 + dt.getMonth()).toString().split("");
}
if (dt01.length == 1) {dt01.unshift(0);};
if (dt34.length == 1) {dt34.unshift(0);};
// move all containers to their position.
Hgt = dgt2.getCellHeight();
dgt0.setPosition(0,( dt01[0] * Hgt),1,true);
dgt1.setPosition(0,( dt01[1] * Hgt),1,true);
dgt2.setPosition(0,( newSt * Hgt),1,true);
dgt3.setPosition(0,( dt34[0] * Hgt),1,true);
dgt4.setPosition(0,( dt34[1] * Hgt),1,true);
// set the timer again
item.setTag(setTimeout(refresh, Period));
};