User Tools

Site Tools


script_multitool

====== Differences ====== This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
script_multitool [2014/09/14 14:49]
lm13 [Script] comment fail fix
script_multitool [2016/02/09 08:08] (current)
st1d
Line 2: Line 2:
   * Purpose : This script is a multifunctional tool to do or show a lot of stuff   * Purpose : This script is a multifunctional tool to do or show a lot of stuff
   * Author : [[https://​plus.google.com/​+LukasMorawietz|LM13]]   * Author : [[https://​plus.google.com/​+LukasMorawietz|LM13]]
-  * Current Version : 2.0 
   * Link : https://​plus.google.com/​115366157037831519359/​posts/​fQwfu5AUj5m   * Link : https://​plus.google.com/​115366157037831519359/​posts/​fQwfu5AUj5m
- +  ​Download available! ​(Check repository)
-====== Changelog ======  +
-  ​Version 1.0 (20/7/2014): initial release in wiki +
-  * Version 1.1 (21/​7/​2014):​ replaced move item script with trianguloY'​s solution.  +
-  * Version 1.2 (25/​7/​2014):​ replaced change home page with move pages to extend functionality,​ sorted choices on script-side +
-  * Version 1.2.1 (26/​7/​2014):​ added Intent to Item details  +
-  * Version 1.3 (28/​7/​2014):​ fix: no touch data in swipe event, add resize, add save, add containers ID +
-  * Version 1.3.1 (31/​8/​2014):​ fix: Intent also for folders +
-  * Version 2.0 (14/​9/​2014):​ new UI, added comments, removed the easteregg, because it's not reachable through the new UI+
  
 ====== How to use the script ====== ====== How to use the script ======
-  * enable the script in any menu or event you want to run it+  * see App
  
 ====== Current functionality ====== ====== Current functionality ======
Line 21: Line 12:
   * Show Container related parameters   * Show Container related parameters
   * Show Item related parameters   * Show Item related parameters
 +  * Show Icons and images for an item
   * Attach/​Detach all Items   * Attach/​Detach all Items
   * Resize all detached items   * Resize all detached items
   * Delete all Items   * Delete all Items
   * Move (a) specific page(s) to another position. This can be used to change the home page by selecting all items   * Move (a) specific page(s) to another position. This can be used to change the home page by selecting all items
-  * Reset Tag+  ​* Export Scripts 
 +  * Import Script 
 +  * Autoformat Script 
 +  * Search in Scripts 
 +  ​* Reset Tags
   * Reset Tool © by trianguloY   * Reset Tool © by trianguloY
   * save all Layout changes   * save all Layout changes
 +  * Reset the recent apps list
  
  
 //please report all bugs in the g+ community// //please report all bugs in the g+ community//
  
-====== ​Script ​====== +<​spoiler|Script ​(won't work without the apk)> 
-<sxh javascript;>//​Initialize List+<sxh javascript;>//​Created by Lukas Morawietz in collaboration with TrianguloY 
 //import java classes //import java classes
 LL.bindClass("​android.app.AlertDialog"​);​ LL.bindClass("​android.app.AlertDialog"​);​
 +LL.bindClass("​android.app.ProgressDialog"​);​
 LL.bindClass("​android.content.DialogInterface"​);​ LL.bindClass("​android.content.DialogInterface"​);​
 +LL.bindClass("​android.os.Environment"​);​
 +LL.bindClass("​android.R"​);​
 +LL.bindClass("​android.widget.ExpandableListView"​);​
 +LL.bindClass("​android.widget.ImageView"​);​
 +LL.bindClass("​android.widget.LinearLayout"​);​
 +LL.bindClass("​android.widget.ListView"​);​
 +LL.bindClass("​android.widget.NumberPicker"​);​
 +LL.bindClass("​android.widget.SimpleAdapter"​);​
 +LL.bindClass("​android.widget.SimpleExpandableListAdapter"​);​
 +LL.bindClass("​android.widget.ScrollView"​);​
 +LL.bindClass("​android.widget.TextView"​);​
 +LL.bindClass("​java.io.File"​);​
 +LL.bindClass("​java.io.BufferedReader"​);​
 +LL.bindClass("​java.io.FileReader"​);​
 +LL.bindClass("​java.io.FileWriter"​);​
 +LL.bindClass("​java.util.HashMap"​);​
 +LL.bindClass("​java.util.ArrayList"​);​
  
-//function to display a List in a Popup, where the user can select one item 
-list=function(items,​listener,​title) 
-{ 
- var builder=new AlertDialog.Builder(LL.getContext());​ 
- builder.setItems(items,​listener);​ 
- builder.setCancelable(true);​ 
- builder.setTitle(title);​ 
- builder.setNegativeButton("​Cancel",​new DialogInterface.OnClickListener(){onClick:​function(dialog,​id){dialog.cancel();​}});//​it has a Cancel Button 
- builder.create().show();​ 
-} 
  
 +var hasItem=(LL.getEvent().getItem()!=null);​
  
 //define Strings to display //define Strings to display
 var title="​What do you want to do?"; var title="​What do you want to do?";
-var items=["​Show Event related parameters","​Show Container ​related parameters","Show Item related parameters","​Attach/​Detach all Items","​Resize all detached Items","​Delete all Items","Move Pages","​Reset Tag","Reset Tool © by trianguloY","Save changes"​];​+var items=[] 
 +var info=["Information",[]]; 
 +info[1].push("​Event"​);​ 
 +info[1].push("​Container"​
 +if(hasItem){ 
 +    info[1].push("Item"); 
 +    info[1].push("​Intent"​);​ 
 +    info[1].push("​Icon"​);​ 
 +
 +var itemUtils=["​Item Utilities",[]]; 
 +itemUtils[1].push("​Attach/​Detach all Items"); 
 +itemUtils[1].push("​Resize all detached Items"); 
 +itemUtils[1].push("​Delete all Items"); 
 +itemUtils[1].push("Move Pages"); 
 +var scriptUtils=["​Script Tools",[]]; 
 +scriptUtils[1].push("​Export Scripts (Backup)"​);​ 
 +scriptUtils[1].push("​Import Script"​);​ 
 +scriptUtils[1].push("​Autoformat Scripts"​);​ 
 +scriptUtils[1].push("​Search in Scripts"​);​ 
 +var other = ["​Other",​[]];​ 
 +other[1].push("Reset Tag"); 
 +other[1].push("Reset Tool"); 
 +other[1].push("Save changes"​); 
 +other[1].push("​Delete recent app history"​);​ 
 +items.push(info);​ 
 +items.push(itemUtils);​ 
 +items.push(scriptUtils);​ 
 +items.push(other); 
  
 +//normal run
 +if(typeof resultCode==='​undefined'​) expandableList(items,​mainOnClick,​title);​
 +//user has selected a file to import
 +else import_handleInput();​
  
 //handle user selection //handle user selection
-var listener=new DialogInterface.OnClickListener(){ +function ​mainOnClick(groupPosition,childPosition){ 
- onClick:function(dialog,id) + switch(groupPosition){ 
- + case 0://​Information 
- setTimeout(function() + switch(childPosition){
- { +
- switch(id) +
- {+
  case 0://Event related  case 0://Event related
- var e=LL.getEvent(); +     eventData();
- try//​test if event contains toucg data +
-+
- e.getTouchScreenX();​ +
- var ok=true; +
-+
- catch(Exception) +
-+
- var ok=false; +
-+
- alert("​Source:​ "​+e.getSource()+"​\nDate:​ "​+e.getDate()+"​\nContainer:​ "​+e.getContainer()+"​\nItem:​ "​+e.getItem()+(ok?​("​\nTouch:​ "​+e.getTouchX()+","​+e.getTouchY()+"​\nTouch (Screen): "​+e.getTouchScreenX()+","​+e.getTouchScreenY()):""​));+
  break;  break;
  case 1://​container related  case 1://​container related
- var c=LL.getEvent().getContainer();​ +     containerData()
- var t=c.getType();//​Dirfferentiate between Desktop and other containers +
- alert("​Type:​ "​+t+"​\nName/​Label:​ "​+(t=="​Desktop"?​c.getName():​c.getOpener().getLabel())+"​\nID:​ "​+c.getId()+"​\nTag:​ "​+c.getTag()+"​\nSize:​ "​+c.getWidth()+","​+c.getHeight()+"​\nBoundingbox:​ "​+c.getBoundingBox()+"​\nCell Size: "​+c.getCellWidth()+","​+c.getCellHeight()+"​\nCurrent Position: "​+c.getPositionX()+","​+c.getPositionY()+"​\nCurrent Scale: "​+c.getPositionScale()+"​\nItems:​ "​+c.getItems());​+
  break;  break;
  case 2://item related  case 2://item related
- var i=LL.getEvent().getItem();​ +     itemData();
- alert(i==null/​*check if event contains item*/?"​no item found":"​Label:​ "​+i.getLabel()+"​\nType:​ "​+i.getType()+"​\nTag:​ "​+i.getTag()+"​\nID:​ "​+i.getId()+"​\nSize:​ "​+i.getWidth()+","​+i.getHeight()+"​\nPosition:​ "​+i.getPositionX()+","​+i.getPositionY()+"​\nScale:​ "​+i.getScaleX()+","​+i.getScaleY()+"​\nAngle:​ "​+i.getRotation()+"​\nCenter:​ "​+center(i)+((i.getType()=="​Shortcut"​||i.getType()=="​Folder"​)?"​\nIntent:"​+i.getIntent():""​));+
  break;  break;
- case 3://Attach/​Detach all items + case 3://intent 
- var items=LL.getEvent().getContainer().getItems(); +     intentData(); 
- var togrid=confirm("​Attach?​ if not, detach"​)+ break; 
- for(x=0;​x<​items.length;​x++) + case 4://icon 
- +     iconData();
- var i=items.getAt(x); +
- i.getProperties().edit().setBoolean("​i.onGrid",​togrid).commit();​ +
- }+
  break;  break;
- case 4://resize detached items +
- try + break; 
-+ case 1://item utilities 
- var s=JSON.parse("​["​+prompt("​which size? (input like width,​height)",""​)+"​]"​);​ + switch(childPosition){ 
- var items=LL.getEvent().getContainer().getItems();​ + case ​0://​Attach/​Detach all items 
- for(var a=0;a<items.length;​a++) +     attachDetachAll();
- items.getAt(a).setSize(s[0],​s[1]); +
-+
- catch(Exception) +
-+
- Android.makeNewToast("​Invalid input",​true).show();​ +
- }+
  break;  break;
- case ​5://delete ​items + case ​1://resize detached ​items 
- if(confirm("​Are you sure?"​)) +     resizeAllDetached();
-+
- var c=LL.getEvent().getContainer(); +
- var i=c.getItems();​ +
- for(a=0;​a<​i.length;​a++) +
- c.removeItem(i.getAt(a));​ +
- }+
  break;  break;
- case ​6://move pages + case ​2://delete ​items 
- var cont=LL.getEvent().getContainer();​ +     deleteAll();
- var ​items=cont.getItems();​ +
- var cwidth=cont.getWidth();​ +
- var cheight=cont.getHeight();​ +
- var cellsFloatX=cwidth/​cont.getCellWidth();​ +
- var cellsFloatY=cheight/​cont.getCellHeight();​ +
- var cellsX=Math.round(cellsFloatX);​ +
- var cellsY=Math.round(cellsFloatY);​ +
- //​check for safe cell sizes +
- if(Math.abs(cellsFloatX-cellsX)>​0.00001) +
- if(!confirm("​Warning,​ the cells don't fill the screen as an exact horizontal number.\nDo you want to continue?"​))return;​ +
- if(Math.abs(cellsFloatY-cellsY)>​0.00001) +
- if(!confirm("​Warning,​ the cells don't fill the screen as an exact vertical number.\nDo you want to continue?"​))return;​ +
- try +
-+
- //​page(s) selection +
- var s=prompt("​Which page do you want to move? (* for all) input has to be x,y (e.g. *,* for all pages)",""​).split(","​);​ +
- var move=JSON.parse("​[\""​+s[0]+"​\",​\""​+s[1]+"​\"​]"​);​ +
- var done=true;​ +
-+
- catch(Exception) +
-+
- var done=false;​ +
-+
- //​check for valid input  +
- if(!done||move==null||move[0]==null||(move[0]!="​*"&&​isNaN(parseInt(move[0])))||move[1]==null||(move[1]!="​*"&&​isNaN(parseInt(move[1])))) +
-+
- Android.makeNewToast("​Invalid input",​true).show();​ +
- return;​ +
-+
- //​format to int if needed  +
- if(move[0]!="​*"​)move[0]=parseInt(move[0]);​ +
- if(move[1]!="​*"​)move[1]=parseInt(move[1]);​ +
- try +
-+
- //​user selection: destination +
- var dist=JSON.parse("​["​+prompt("​How far do you want to move? input has to be x,y (e.g. 1,0 for one page right)",""​)+"​]"​);​ +
- var done=true;​ +
-+
- catch(Exception) +
-+
- var done=false;​ +
-+
- //​check for valid input  +
- if(!done||dist==null||dist[0]==null||isNaN(dist[0])||dist[1]==null||isNaN(dist[1])) +
-+
- Android.makeNewToast("​Invalid input",​true).show();​ +
- return;​ +
-+
- if(dist[0]==0&&​dist[1]==0)return;//​if nothing to do, do nothing :P +
- +
- //do the movement +
- for(var i=items.getLength()-1;​i>​=0;​--i) +
-+
- var item=items.getAt(i);​ +
- var pos=[item.getPositionX(),​item.getPositionY()];​ +
- //​check if item should be moved  +
- if((move[0]=="​*"​||(pos[0]>​cwidth*move[0]&&​pos[0]<​cwidth*(move[0]+1)))&&​(move[1]=="​*"​||(pos[1]>​cheight*move[1]&&​pos[1]<​cheight*(move[1]+1)))) +
-+
- var prop=item.getProperties();​ +
- +
- //​handle pinned item +
- var xx=1,​yy=1;​ +
- var pinmode=prop.getString("​i.pinMode"​);​ +
- if(pinmode[0]=="​X"​)xx=0;​ +
- if(pinmode.indexOf("​Y"​)!=-1)yy=0;​ +
- +
- //​move it +
- if(prop.getBoolean("​i.onGrid"​)) +
-+
- var cell=item.getCell();​ +
- item.setCell(cell.getLeft()+cellsX*dist[0]*xx,​cell.getTop()+cellsY*dist[1]*yy,​cell.getRight()+cellsX*dist[0]*xx,​cell.getBottom()+cellsY*dist[1]*yy);​ +
-+
- else +
- {item.setPosition(pos[0]+cwidth*dist[0]*xx,​pos[1]+cheight*dist[1]*yy);​ +
-+
-+
- } +
- LL.save();+
  break;  break;
- case ​7://reset Tag + case ​3://move pages 
- var d=LL.getEvent().getContainer();​ +     movePages();
- var i=LL.getEvent().getItem();​(i!=null?​i:​d).setTag(null);​ +
- Android.makeNewToast((i==null?"​container":"​item"​)+"​s tag resetted.",​false).show();+
  break;  break;
- case 8://reset tool by trianguloY, ask him how it works :D +
- var cont=LL.getEvent().getContainer();​ + break; 
- var items=cont.getItems();​ + case 2://Script Tools 
- var bools=[];​bools[0]=confirm("​Reset cell? (only grid items) [0,​0]"​);​ + switch(childPosition){ 
- bools[1]=confirm("​Reset position? (only free items) [0,0] "); + case ​0://export 
- bools[2]=confirm("​Reset rotation? (only free items) [0]"​);​ +     exportScripts();
- bools[3]=confirm("​Reset scale? (only free items) [1,​1]"​);​ +
- bools[4]=confirm("​Reset skew? (only free items) [0,​0]"​);​ +
- bools[5]=confirm("​Reset size? (only free items) [cell size]"​);​ +
- bools[6]=confirm("​Reset visibility? [true]"​);​ +
- for(var i=0;​i<​items.getLength();​++i) +
- +
- var t=items.getAt(i);​ +
- if(bools[0])t.setCell(0,​0,​1,​1);​ +
- if(bools[1])t.setPosition(0,​0); +
- if(bools[2])t.setRotation(0);​ +
- if(bools[3])t.setScale(1,​1);​ +
- if(bools[4])t.setSkew(0,​0);​ +
- if(bools[5])t.setSize(cont.getCellWidth(),​cont.getCellHeight());​ +
- if(bools[6])t.setVisibility(true);​ +
- }+
  break;  break;
- case ​9+ case ​1://import 
- LL.save();​ +     import_askForInput();
- Android.makeNewToast("​Done!",​true).show();+
  break;  break;
- default://should never occur: illegal selection + case 2://autoformat 
- Android.makeNewToast(txt==null?"​Aborted":"​illegal case: "​+txt,​false).show();+     autoFormat();
  break;  break;
 +     case 3://serach in scripts
 +         searchScripts();​
 +         break;
  }  }
- },0);+ break; 
 + case 3://other 
 + switch(childPosition){ 
 + case ​0://reset Tag 
 +     resetTags()
 + break;​ 
 + case 1://reset tool by trianguloY, ask him how it works :D 
 +     resetTool();​ 
 + break;​ 
 + case 2: 
 +     saveLayout();​ 
 + break;​ 
 + case 3: 
 +     resetRecents();​ 
 +     break; 
 +
 + break;
  }  }
 } }
  
-//display the list 
-list(items,​listener,​title);​ 
  
-//helper ​function for item related ​(case 2), compute the center of an item +function eventData(){ 
-function ​center(item+ var e=LL.getEvent();​ 
-+ try{ //test if event contains touch data 
- var r=item.getRotation()*Math.PI/180+ e.getTouchScreenX();​ 
- var sin=Math.abs(Math.sin(r)); + var ok=true; 
- var cos=Math.abs(Math.cos(r)); +
- var w=item.getWidth()*item.getScaleX(); + catch(Exception){ 
- var h=item.getHeight()*item.getScaleY(); + var ok=false; 
- return[item.getPositionX()+(w*cos+h*sin)*0.5,item.getPositionY()+(h*cos+w*sin)*0.5]; +    } 
-} + text("​Source:​ "​+e.getSource()+"​\nDate:​ "​+e.getDate()+"​\nContainer:​ "​+e.getContainer()+"​\nItem:​ "​+e.getItem()+(ok?​("​\nTouch:​ "​+e.getTouchX()+","​+e.getTouchY()+"​\nTouch (Screen): "​+e.getTouchScreenX()+","​+e.getTouchScreenY()):""​),"​Event Information"​);​ 
-</sxh>+
 + 
 +function ​containerData(){ 
 + var c=LL.getEvent().getContainer();​ 
 + var t=c.getType();//​Differentiate between Desktop and other containers 
 + 
 + //read Tags from launcher file 
 + var s=read(LL.getContext().getFilesDir().getPath()+"/​pages/"​+c.getId()+"/​conf"​);​ 
 + var data=JSON.parse(s);​ 
 + var tags="​Default:​ "​+c.getTag();​ 
 + for(property in data.tags) 
 + tags+="​\n"​+property+":​ "​+data.tags[property];​ 
 +    text("​Type:​ "​+t+"​\nName/​Label:​ "​+(t=="​Desktop"?​c.getName():​c.getOpener().getLabel())+"​\nID:​ "​+c.getId()+"​\nSize:​ "​+c.getWidth()+","​+c.getHeight()+"​\nBoundingbox:​ "​+c.getBoundingBox()+"​\nCell Size: "​+c.getCellWidth()+","​+c.getCellHeight()+"​\nCurrent Position: "​+c.getPositionX()+","​+c.getPositionY()+"​\nCurrent Scale: "​+c.getPositionScale()+"​\nTags:​ "​+tags+"​\nItems:​ "​+c.getItems(),"​Container Information"​);​ 
 +
 + 
 +function itemData(){ 
 + var i=LL.getEvent().getItem();​if(i==null)//​check if event contains ​item 
 + text("no item found","​Error 5")
 + 
 + //read tags from launcher file 
 + var s=read(LL.getContext().getFilesDir().getPath()+"/​pages/"​+LL.getEvent().getContainer().getId()+"/​items"​);​ 
 + var all=JSON.parse(s).i;​ 
 + var x; 
 + var item; 
 + for(x=0;​x<​all.length;​x++){ 
 + item=all[x];​ 
 + if(item.b==i.getId())break;​ 
 +
 + if(x==all.length){ 
 + text("​Can'​t find Tags","Error 6"); 
 + return; 
 +
 + var tags="​Default:​ "​+i.getTag();​ 
 + for(property in item.an){ 
 + if(property=="​_"​)continue;​ 
 + tags+="​\n"​+property+":​ "+item.an[property];​ 
 +
 +    text("​Label:​ "​+i.getLabel()+"​\nType:​ "​+i.getType()+"​\nID:​ "​+i.getId()+"​\nSize:​ "​+i.getWidth()+","​+i.getHeight()+"​\nPosition:​ "​+i.getPositionX()+","​+i.getPositionY()+"​\nScale:​ "​+i.getScaleX()+","​+i.getScaleY()+"​\nAngle:​ "​+i.getRotation()+"​\nCenter:​ "+center(i)+((i.getType()=="​Shortcut"​||i.getType()=="​Folder"​)?"​\nIntent:"​+i.getIntent():""​)+"​\nTags:​ "​+tags,"​Item Information"​);​ 
 +
 + 
 +function intentData(){ 
 +    it=LL.getEvent().getItem();​ 
 + if(it==null)text("​No Intent found.","​Error 1"); 
 + else text("​Intent:​ "​+it.getIntent()+"​\nExtras:​ "​+it.getIntent().getExtras(),"​Intent Information"​);​ 
 +
 + 
 +function iconData(){ 
 + it=LL.getEvent().getItem();​ 
 + //create view structure 
 + var root=new LinearLayout(LL.getContext());​ 
 + root.setOrientation(LinearLayout.VERTICAL);​ 
 + 
 + //check for all kinds of images in this item and add them to the view if there are any 
 + addImageIfNotNull(root,​it.getBoxBackground("​n"​),"​Normal Box Background"​);​ 
 + addImageIfNotNull(root,​it.getBoxBackground("​s"​),"​Selected Box Background"​);​ 
 + addImageIfNotNull(root,​it.getBoxBackground("​f"​),"​Focused Box Background"​);​ 
 + if(it.getType()=="​Shortcut"​){ 
 + addImageIfNotNull(root,​image=it.getDefaultIcon(),"​Default Icon"​);​ 
 + addImageIfNotNull(root,​image=it.getCustomIcon(),"​Custom Icon"​);​ 
 +
 + if(root.getChildCount()>​0){ ​//at least one image found 
 +     var scroll=new ScrollView(LL.getContext()); 
 + scroll.addView(root);​ 
 + customDialog(scroll,"​Icon"​);​ 
 +
 + else Android.makeNewToast("​No Image Data available",​true).show();​ //no image found 
 +
 + 
 +function attachDetachAll(){ 
 + var items=LL.getEvent().getContainer().getItems(); 
 + var attachDetach ​function(toGrid){ 
 +     for(x=0;​x<​items.length;​x++) 
 +     { 
 +     var i=items.getAt(x); 
 +        i.getProperties().edit().setBoolean("​i.onGrid",​toGrid).commit(); 
 +     } 
 +     Android.makeNewToast("​Done!",​true).show();​ 
 + } 
 + var attach ​function(){attachDetach(true);​} 
 + var detach = function(){attachDetach(false);​} 
 + chooser([function(){},​attach,​detach],​["​Cancel","​Attach","​Detach"​],"​Do you want to attach or detach all items?","​MultiTool"​);​ 
 +
 + 
 +function resizeAllDetached(){ 
 +    var linearLayout = new LinearLayout(LL.getContext()); 
 +    var c = LL.getEvent().getContainer(); 
 +    ​linearLayout.setOrientation(LinearLayout.VERTICAL);​ 
 +    ​var widthText ​new TextView(LL.getContext()); 
 +    widthText.setText("​Width:​ "); 
 +    ​linearLayout.addView(widthText);​ 
 +    var widthPicker = new NumberPicker(LL.getContext());​ 
 +    widthPicker.setMinValue(1);​ 
 +    widthPicker.setMaxValue(9999);​ 
 +    widthPicker.setValue(c.getCellWidth());​ 
 +    linearLayout.addView(widthPicker);​ 
 +    var heightText = new TextView(LL.getContext());​ 
 +    heightText.setText("​Height:​ "); 
 +    linearLayout.addView(heightText);​ 
 +    var heightPicker = new NumberPicker(LL.getContext());​ 
 +    heightPicker.setMinValue(1);​ 
 +    heightPicker.setMaxValue(9999);​ 
 +    heightPicker.setValue(c.getCellHeight());​ 
 +    linearLayout.addView(heightPicker);​ 
 +    var onClick = function(){ 
 +        var s=[widthPicker.getValue(),​heightPicker.getValue()]; 
 + var items=c.getItems();​ 
 + for(var a=0;a<items.length;​a++) 
 + items.getAt(a).setSize(s[0],s[1]); 
 +    } 
 +    customConfirmDialog(linearLayout,"​To which size?",​onClick);​ 
 +
 + 
 +function deleteAll(){ 
 +    var f = function(){ 
 + var c=LL.getEvent().getContainer();​ 
 + var i=c.getItems();​ 
 + for(a=0;​a<​i.length;​a++) 
 +     c.removeItem(i.getAt(a));​ 
 +
 + chooser([function(){},​f],​["​No","​Yes"​],"​Are you sure?","​Delete all items"​);​ 
 +
 + 
 +function movePages(){ 
 + var cont=LL.getEvent().getContainer();​ 
 + var items=cont.getItems();​ 
 + var cWidth=cont.getWidth();​ 
 + var cHeight=cont.getHeight();​ 
 + var cellsFloatX=cWidth/​cont.getCellWidth();​ 
 + var cellsFloatY=cHeight/​cont.getCellHeight();​ 
 + var cellsX=Math.round(cellsFloatX);​ 
 + var cellsY=Math.round(cellsFloatY);​ 
 + var f=function(){ 
 +        try{ 
 +            //page(s) selection 
 +            var s=prompt("​Which page do you want to move? (* for allinput has to be x,y (e.g. *,* for all pages)",""​).split(","​);​ 
 +            var move=JSON.parse("​[\""​+s[0]+"​\",​\""​+s[1]+"​\"​]"​)
 +            var done=true;​ 
 +        ​
 +        ​catch(Exception){ 
 +            var done=false;​ 
 +        } 
 +        ​//check for valid input 
 +        if(!done||move==null||move[0]==null||(move[0]!="​*"&&​isNaN(parseInt(move[0])))||move[1]==null||(move[1]!=
script_multitool.1410706177.txt.gz · Last modified: 2014/09/14 14:49 by lm13