Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
426
Src/resources/skins/Bento/scripts/playlistpro.m
Normal file
426
Src/resources/skins/Bento/scripts/playlistpro.m
Normal file
|
@ -0,0 +1,426 @@
|
|||
/*
|
||||
|
||||
PlaylistPro build 005
|
||||
Originally done by pjn123 (www.skinconsortium.com) for the Classic Pro plugin
|
||||
|
||||
*/
|
||||
|
||||
#include "lib/std.mi"
|
||||
#include "lib/pldir.mi"
|
||||
#include "init_Playlist.m"
|
||||
|
||||
Function resizeResults(int items);
|
||||
Function doSearch(String input);
|
||||
Function setSearchBox(boolean onOff);
|
||||
Function clearSearchBox();
|
||||
Function int getPlEntry(int search_item);
|
||||
Function String replaceString(string baseString, string toreplace, string replacedby);
|
||||
|
||||
Global Group frameGroup, topbar;
|
||||
Global Edit searchBox;
|
||||
Global Text helpSearch, searchNews;// fakeText;
|
||||
Global GuiObject fakeSB, searchXUI, searchButtonXui;
|
||||
Global Button searchButton, clearButton, clearButtonText;
|
||||
Global GuiList searchResults;
|
||||
Global Boolean foundsomething;
|
||||
Global int tn, h_tune;
|
||||
Global String temptoken;
|
||||
Global Windowholder plwh;
|
||||
GLobal Timer refreshActiveCheck;
|
||||
Global PopupMenu search_rc;
|
||||
|
||||
Global Container results_container;
|
||||
Global Layout results_layout, main_layout;
|
||||
|
||||
System.onScriptLoaded() {
|
||||
frameGroup = getScriptGroup();
|
||||
topbar = frameGroup.findObject("PlaylistPro.topbar");
|
||||
plwh = frameGroup.findObject("wdh.playlist");
|
||||
|
||||
searchBox = frameGroup.findObject("wasabi.edit.box");
|
||||
searchXUI = frameGroup.findObject("pl.search.edit");
|
||||
searchButton = frameGroup.findObject("pl.search.go");
|
||||
searchButtonXui = frameGroup.findObject("pl.search.go");
|
||||
fakeSB = frameGroup.findObject("pl.search.edit.rect");
|
||||
clearButton = frameGroup.findObject("pl.search.edit.clear");
|
||||
clearButtonText = frameGroup.findObject("pl.search.edit.clear.text");
|
||||
helpSearch = frameGroup.findObject("pl.search.edit.searchhelp");
|
||||
//fakeText = frameGroup.findObject("pl.search.go.text.fake");
|
||||
|
||||
results_container = newDynamicContainer("searchresults");
|
||||
results_layout = results_container.getLayout("normal");
|
||||
searchResults = results_layout.findObject("PlaylistPro.list");
|
||||
searchResults.setFontSize(16);
|
||||
searchNews = results_layout.findObject("PlaylistPro.list.news");
|
||||
|
||||
main_layout = getContainer("main").getLayout("normal");
|
||||
|
||||
initAttribs_Playlist();
|
||||
|
||||
//translation workaround
|
||||
/*searchButtonXui.setXmlParam("text", System.translate("Search"));
|
||||
searchButtonXui.setXmlParam("x", integerToString(-1*fakeText.getAutoWidth()-4));
|
||||
searchButtonXui.setXmlParam("w", integerToString(fakeText.getAutoWidth()+2));
|
||||
searchXUI.setXmlParam("w", integerToString(-1*fakeText.getAutoWidth()-9));*/
|
||||
|
||||
refreshActiveCheck = new Timer;
|
||||
refreshActiveCheck.setDelay(100);
|
||||
}
|
||||
System.onScriptUnLoading() {
|
||||
delete refreshActiveCheck;
|
||||
}
|
||||
|
||||
refreshActiveCheck.onTimer(){
|
||||
if((!System.isAppActive() || System.isMinimized()) && results_layout.isVisible() ) results_layout.hide();
|
||||
}
|
||||
|
||||
results_layout.onSetVisible(boolean onOff){
|
||||
if(onOff){
|
||||
refreshActiveCheck.start();
|
||||
}
|
||||
else{
|
||||
refreshActiveCheck.stop();
|
||||
}
|
||||
}
|
||||
|
||||
System.onShowLayout(Layout _layout){
|
||||
if(main_layout.isVisible()) results_layout.setXmlParam("ontop", "1");
|
||||
}
|
||||
|
||||
frameGroup.onSetVisible(boolean onOff){
|
||||
if(!onOff) clearSearchBox();
|
||||
}
|
||||
|
||||
searchButton.onLeftClick(){
|
||||
doSearch(searchBox.getText());
|
||||
}
|
||||
|
||||
resizeResults(int items){
|
||||
/*results_layout.setTargetX(results_layout.getLeft());
|
||||
results_layout.setTargetY(results_layout.getTop());
|
||||
results_layout.setTargetW(results_layout.getWidth());
|
||||
results_layout.setTargetH(500);
|
||||
results_layout.setTargetSpeed(1);
|
||||
results_layout.gotoTarget();*/
|
||||
|
||||
//items++; //temp add one extra for info... xx items found
|
||||
if(items>20) items=20;
|
||||
|
||||
|
||||
if(items>=1) h_tune=29;
|
||||
else h_tune=25;
|
||||
|
||||
//results_layout.setXmlParam("h", integerToString(20+items*18));
|
||||
|
||||
/*results_layout.setTargetX(results_layout.getLeft());
|
||||
results_layout.setTargetY(results_layout.getTop());
|
||||
results_layout.setTargetW(results_layout.getWidth());
|
||||
results_layout.setTargetH(h_tune+items*16);
|
||||
results_layout.setTargetSpeed(0.3);
|
||||
results_layout.gotoTarget();*/
|
||||
results_layout.resize(results_layout.getLeft(), results_layout.getTop(), results_layout.getWidth(), h_tune+items*16);
|
||||
}
|
||||
|
||||
searchBox.onEnter(){
|
||||
doSearch(searchBox.getText());
|
||||
}
|
||||
|
||||
doSearch(String input){
|
||||
if(input==""){
|
||||
clearSearchBox();
|
||||
return;
|
||||
}
|
||||
|
||||
//search history stuff
|
||||
String history = getPublicString("cPro.PlaylistPro.history", "");
|
||||
history = replaceString(history, input, "");
|
||||
history = replaceString(history, ";;", ";");
|
||||
if(strleft(history, 1)==";") history = strright(history, strlen(history)-1);
|
||||
if(strright(history, 1)==";") history = strleft(history, strlen(history)-1);
|
||||
if(history=="") history= input;
|
||||
else history= input+";"+history;
|
||||
|
||||
String output = getToken(history, ";", 0);
|
||||
for(int i = 1; i<15; i++){
|
||||
if(getToken(history, ";", i)=="") break;
|
||||
output+=";"+getToken(history, ";", i);
|
||||
}
|
||||
setPublicString("cPro.PlaylistPro.history", history);
|
||||
|
||||
|
||||
int itemsfound = 0;
|
||||
input = strlower(input);
|
||||
|
||||
results_layout.setXmlParam("x", integerToString(fakeSB.clientToScreenX(fakeSB.getLeft()-2)));
|
||||
results_layout.setXmlParam("y", integerToString(fakeSB.clientToScreenY(fakeSB.getTop() + fakeSB.getHeight())));
|
||||
results_layout.setXmlParam("w", integerToString(frameGroup.getWidth()-19));
|
||||
|
||||
if(!results_layout.isVisible()) results_layout.setXmlParam("h", "1");
|
||||
|
||||
searchResults.deleteAllItems();
|
||||
searchResults.scrollToItem(0);
|
||||
|
||||
for(int i = 0; i<PlEdit.getNumTracks(); i++){
|
||||
foundsomething=false;
|
||||
|
||||
for(tn = 0; tn<10; tn++){
|
||||
if(getToken(input, " ", tn)==""){
|
||||
break;
|
||||
}
|
||||
|
||||
temptoken = getToken(input, " ", tn);
|
||||
if(strsearch(strlower(PlEdit.getTitle(i) + " " + PlEdit.getFileName(i)), temptoken)>=0){
|
||||
foundsomething=true;
|
||||
}
|
||||
else{
|
||||
foundsomething=false;
|
||||
}
|
||||
|
||||
if(!foundsomething){
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(foundsomething){
|
||||
itemsfound++;
|
||||
searchResults.addItem(integerToString(i+1)+". " + PlEdit.getTitle(i));
|
||||
if(itemsfound>500){
|
||||
searchNews.setText("Search result limited to 500 items");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(itemsfound==0){
|
||||
searchNews.setText("Nothing was found");
|
||||
}
|
||||
else if(itemsfound<=500){
|
||||
searchNews.setText(System.translate("Items found: ") +integerToString(itemsfound));
|
||||
}
|
||||
|
||||
if(!results_layout.isVisible()) results_layout.show();
|
||||
|
||||
// Fix if always on top is enabled.. it just refresh the ontop ;)
|
||||
results_layout.setXmlParam("ontop", "1");
|
||||
|
||||
resizeResults(itemsfound);
|
||||
}
|
||||
|
||||
searchResults.onDoubleClick(Int itemnum){
|
||||
PlEdit.playTrack (getPlEntry(itemnum));
|
||||
setSearchBox(false);
|
||||
}
|
||||
|
||||
searchResults.onRightClick(Int itemnum){
|
||||
search_rc = new PopupMenu;
|
||||
search_rc.addCommand("Move selected to top", 1, 0, 0);
|
||||
search_rc.addCommand("Move selected to bottom", 2, 0, 0);
|
||||
search_rc.addCommand("Move selected after current", 3, 0, 0);
|
||||
search_rc.addCommand("Move selected together", 4, 0, 0);
|
||||
search_rc.addSeparator();
|
||||
search_rc.addCommand("Remove selected from playlist", 5, 0, 0);
|
||||
int result = search_rc.popAtMouse();
|
||||
delete search_rc;
|
||||
|
||||
int lastselected = searchResults.getFirstItemSelected();
|
||||
int itemcounter = 1;
|
||||
|
||||
if(result==1){
|
||||
PlEdit.moveTo (getPlEntry(lastselected), 0);
|
||||
while(searchResults.getNextItemSelected(lastselected) != -1){
|
||||
lastselected = searchResults.getNextItemSelected(lastselected);
|
||||
PlEdit.moveTo (getPlEntry(lastselected), itemcounter);
|
||||
itemcounter++;
|
||||
}
|
||||
PlEdit.showTrack(0);
|
||||
}
|
||||
else if(result==2){
|
||||
PlEdit.moveTo (getPlEntry(lastselected), PlEdit.getNumTracks ()-1);
|
||||
while(searchResults.getNextItemSelected(lastselected) != -1){
|
||||
lastselected = searchResults.getNextItemSelected(lastselected);
|
||||
PlEdit.moveTo (getPlEntry(lastselected)-itemcounter, PlEdit.getNumTracks ()-1);
|
||||
itemcounter++;
|
||||
}
|
||||
PlEdit.showTrack(PlEdit.getNumTracks ()-1);
|
||||
}
|
||||
else if(result==3){
|
||||
int align = 0;
|
||||
int orignalPos = PlEdit.getCurrentIndex();
|
||||
int temp = getPlEntry(lastselected);
|
||||
if(PlEdit.getCurrentIndex() > temp) align++;
|
||||
|
||||
if(orignalPos > getPlEntry(lastselected)) PlEdit.moveTo (getPlEntry(lastselected), PlEdit.getCurrentIndex());
|
||||
else PlEdit.moveTo (getPlEntry(lastselected), PlEdit.getCurrentIndex()+1);
|
||||
|
||||
while(searchResults.getNextItemSelected(lastselected) != -1){
|
||||
lastselected = searchResults.getNextItemSelected(lastselected);
|
||||
|
||||
if(orignalPos != getPlEntry(lastselected)){
|
||||
if(orignalPos > getPlEntry(lastselected)){
|
||||
PlEdit.moveTo (getPlEntry(lastselected)-align, PlEdit.getCurrentIndex()+itemcounter);
|
||||
}
|
||||
else{
|
||||
PlEdit.moveTo (getPlEntry(lastselected), PlEdit.getCurrentIndex()+itemcounter+1);
|
||||
}
|
||||
|
||||
temp = getPlEntry(lastselected);
|
||||
if(orignalPos > temp) align++;
|
||||
itemcounter++;
|
||||
}
|
||||
}
|
||||
PlEdit.showCurrentlyPlayingTrack();
|
||||
}
|
||||
else if(result==4){
|
||||
int startpos = getPlEntry(lastselected);
|
||||
while(searchResults.getNextItemSelected(lastselected) != -1){
|
||||
lastselected = searchResults.getNextItemSelected(lastselected);
|
||||
PlEdit.moveTo (getPlEntry(lastselected), startpos+itemcounter);
|
||||
itemcounter++;
|
||||
}
|
||||
PlEdit.showTrack(startpos);
|
||||
}
|
||||
else if(result==5){
|
||||
PlEdit.removeTrack (getPlEntry(lastselected));
|
||||
while(searchResults.getNextItemSelected(lastselected) != -1){
|
||||
lastselected = searchResults.getNextItemSelected(lastselected);
|
||||
PlEdit.removeTrack (getPlEntry(lastselected)-itemcounter);
|
||||
itemcounter++;
|
||||
}
|
||||
}
|
||||
|
||||
else return;
|
||||
|
||||
//hides the search
|
||||
setSearchBox(false);
|
||||
}
|
||||
|
||||
int getPlEntry(int search_item){
|
||||
return stringToInteger(getToken(searchResults.getItemLabel(search_item,0), ". ", 0))-1;
|
||||
}
|
||||
|
||||
setSearchBox(boolean onOff){
|
||||
if(onOff){
|
||||
searchBox.show();
|
||||
clearButton.show();
|
||||
clearButtonText.show();
|
||||
helpSearch.hide();
|
||||
searchBox.setFocus();
|
||||
}
|
||||
else{
|
||||
searchBox.hide();
|
||||
clearButton.hide();
|
||||
clearButtonText.hide();
|
||||
helpSearch.show();
|
||||
results_layout.hide();
|
||||
}
|
||||
}
|
||||
|
||||
fakeSB.onLeftButtonDown(int x, int y){
|
||||
setSearchBox(true);
|
||||
}
|
||||
fakeSB.onRightButtonDown(int x, int y){
|
||||
search_rc = new PopupMenu;
|
||||
search_rc.addCommand("** Search history **", 0, 0, 1);
|
||||
search_rc.addSeparator();
|
||||
|
||||
String history = getPublicString("cPro.PlaylistPro.history", "");
|
||||
boolean historyfound=false;
|
||||
for(int i=0;i<15;i++){
|
||||
String historyitem = getToken(history, ";", i);
|
||||
if(historyitem==""){
|
||||
if(i>0) historyfound=true;
|
||||
break;
|
||||
}
|
||||
search_rc.addCommand(historyitem, i+1, 0, 0);
|
||||
}
|
||||
if(historyfound) search_rc.addSeparator();
|
||||
search_rc.addCommand("Clear History", 100, 0, 0);
|
||||
|
||||
int result = search_rc.popAtMouse();
|
||||
delete search_rc;
|
||||
|
||||
if(result>0 && result<100){
|
||||
setSearchBox(true);
|
||||
searchBox.setText(getToken(history, ";", result-1));
|
||||
searchButton.leftClick();
|
||||
}
|
||||
else if(result==100){
|
||||
setPublicString("cPro.PlaylistPro.history", "");
|
||||
}
|
||||
}
|
||||
|
||||
clearSearchBox(){
|
||||
searchBox.setText("");
|
||||
setSearchBox(false);
|
||||
}
|
||||
|
||||
main_layout.onMove(){
|
||||
if(results_layout.isVisible()){
|
||||
results_layout.setXmlParam("x", integerToString(fakeSB.clientToScreenX(fakeSB.getLeft()-2)));
|
||||
results_layout.setXmlParam("y", integerToString(fakeSB.clientToScreenY(fakeSB.getTop() + fakeSB.getHeight())));
|
||||
results_layout.setXmlParam("ontop", "1");
|
||||
}
|
||||
}
|
||||
main_layout.onResize(int x, int y, int w, int h){
|
||||
if(results_layout.isVisible()) clearSearchBox();
|
||||
}
|
||||
|
||||
frameGroup.onResize(int x, int y, int w, int h){
|
||||
if(results_layout.isVisible()) clearSearchBox();
|
||||
|
||||
//if(playlist_search_attib.getData()=="0") return;
|
||||
|
||||
if(h<102 || playlist_search_attrib.getData()=="0"){
|
||||
|
||||
if(!topbar.isVisible()) return; //Don't do the same code over and over
|
||||
|
||||
topbar.hide();
|
||||
plwh.setXmlParam("y", "0");
|
||||
plwh.setXmlParam("h", "0");
|
||||
}
|
||||
else{
|
||||
if(topbar.isVisible()) return; //Don't do the same code over and over
|
||||
|
||||
topbar.show();
|
||||
plwh.setXmlParam("y", "30");
|
||||
plwh.setXmlParam("h", "-30");
|
||||
}
|
||||
}
|
||||
|
||||
clearButton.onLeftClick(){
|
||||
clearSearchBox();
|
||||
}
|
||||
|
||||
playlist_search_attrib.onDataChanged(){
|
||||
frameGroup.onResize(frameGroup.getLeft(), frameGroup.getTop(), frameGroup.getWidth(), frameGroup.getHeight());
|
||||
//debug("abc " + getData());
|
||||
|
||||
if (getData() == "0"){
|
||||
topbar.hide();
|
||||
plwh.setXMLParam("y", "0");
|
||||
plwh.setXMLParam("h", "0");
|
||||
}
|
||||
else if(getData() == "1"){
|
||||
|
||||
topbar.show();
|
||||
plwh.setXMLParam("y", "30");
|
||||
plwh.setXMLParam("h", "-30");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
String replaceString(string baseString, string toreplace, string replacedby){
|
||||
if (toreplace == "") return baseString;
|
||||
string sf1 = strupper(baseString);
|
||||
string sf2 = strupper(toreplace);
|
||||
int i = strsearch(sf1, sf2);
|
||||
if (i == -1) return baseString;
|
||||
string left = "", right = "";
|
||||
if (i != 0) left = strleft(baseString, i);
|
||||
if (strlen(basestring) - i - strlen(toreplace) != 0) {
|
||||
right = strright(basestring, strlen(basestring) - i - strlen(toreplace));
|
||||
}
|
||||
return left + replacedby + right;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue