123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 |
- /*
- PlaylistPro build 005
- Originally done by pjn123 (www.skinconsortium.com) for the Classic Pro plugin
- */
- #include "lib/std.mi"
- #include "lib/pldir.mi"
- #include "attribs/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;
- }
|