📄 music.c
字号:
chanprint(cs->ctl, "%q size %d %d %d %d", tabs[i].tab->name, stringwidth(boldfont, tabs[i].tabname), tabht, 1024, tabht); chanprint(cs->ctl, "%q align uppercenter", tabs[i].tab->name); chanprint(cs->ctl, "%q font boldfont", tabs[i].tab->name); chanprint(cs->ctl, "%q image background", tabs[i].tab->name); chanprint(cs->ctl, "%q light background", tabs[i].tab->name); chanprint(cs->ctl, "%q pressedtextcolor red", tabs[i].tab->name); chanprint(cs->ctl, "%q textcolor darkgreen", tabs[i].tab->name); chanprint(cs->ctl, "%q mask transparent", tabs[i].tab->name); chanprint(cs->ctl, "%q text %q", tabs[i].tab->name, tabs[i].tabname); chanprint(cs->ctl, "tabs add %s %s", tabs[i].tabname, tabs[i].winname); } chanprint(cs->ctl, "tabs separation %d", 2); chanprint(cs->ctl, "tabs image background"); chanprint(cs->ctl, "tabs value 0");}voidmakeplaycontrols(void){ int w; Control *playscr; w = stringwidth(romanfont, "Roll over Beethoven"); playscr = createslider(cs, "playscr"); chanprint(cs->ctl, "playscr size 12, 24, 12, 1024"); createtext(cs, "playtext"); chanprint(cs->ctl, "playtext size %d %d %d %d", w, 5*romanfont->height, 2048, 1024); chanprint(cs->ctl, "playscr format '%%s: playtext topline %%d'"); controlwire(playscr, "event", cs->ctl); tabs[WinPlay].win = createrow(cs, tabs[WinPlay].winname); chanprint(cs->ctl, "%q add playscr playtext", tabs[WinPlay].win->name);}voidmakebrowsecontrols(void){ int w; w = stringwidth(romanfont, "Roll over Beethoven"); browsetopscr = createslider(cs, "browsetopscr"); chanprint(cs->ctl, "browsetopscr size 12, 24, 12, %d", 12*romanfont->height); browsetopwin = createtext(cs, "browsetopwin"); chanprint(cs->ctl, "browsetopwin size %d %d %d %d", w, 3*romanfont->height, 2048, 12*romanfont->height); createrow(cs, "browsetop"); chanprint(cs->ctl, "browsetop add browsetopscr browsetopwin"); browsebotscr = createslider(cs, "browsebotscr"); chanprint(cs->ctl, "browsebotscr size 12, 24, 12, 1024"); browsebotwin = createtext(cs, "browsebotwin"); chanprint(cs->ctl, "browsebotwin size %d %d %d %d", w, 3*romanfont->height, 2048, 1024); createrow(cs, "browsebot"); chanprint(cs->ctl, "browsebot add browsebotscr browsebotwin"); chanprint(cs->ctl, "browsetopscr format '%%s: browsetopwin topline %%d'"); controlwire(browsetopscr, "event", cs->ctl);// chanprint(cs->ctl, "browsebotscr format '%%s: browsebotwin topline %%d'");// controlwire(browsebotscr, "event", cs->ctl); tabs[WinBrowse].win = createcolumn(cs, tabs[WinBrowse].winname); chanprint(cs->ctl, "%q add browsetop browsebot", tabs[WinBrowse].win->name);}voidmakeplaylistcontrols(void){ int w; Control *playlistscr; w = stringwidth(romanfont, "Roll over Beethoven"); playlistscr = createslider(cs, "playlistscr"); chanprint(cs->ctl, "playlistscr size 12, 24, 12, 1024"); playlistwin = createtext(cs, "playlistwin"); chanprint(cs->ctl, "playlistwin size %d %d %d %d", w, 5*romanfont->height, 2048, 1024);// chanprint(cs->ctl, "playlistwin selectmode multi"); chanprint(cs->ctl, "playlistscr format '%%s: playlistwin topline %%d'"); controlwire(playlistscr, "event", cs->ctl); tabs[WinPlaylist].win = createrow(cs, tabs[WinPlaylist].winname); chanprint(cs->ctl, "%q add playlistscr playlistwin", tabs[WinPlaylist].win->name);}voidmakeerrorcontrols(void){ int w; Control *errorscr; w = stringwidth(romanfont, "Roll over Beethoven"); errorscr = createslider(cs, "errorscr"); chanprint(cs->ctl, "errorscr size 12, 24, 12, 1024"); errortext = createtext(cs, "errortext"); chanprint(cs->ctl, "errortext size %d %d %d %d", w, 5*romanfont->height, 2048, 1024); chanprint(cs->ctl, "errortext selectmode multi"); chanprint(cs->ctl, "errorscr format '%%s: errortext topline %%d'"); controlwire(errorscr, "event", cs->ctl); tabs[WinError].win = createrow(cs, tabs[WinError].winname); chanprint(cs->ctl, "%q add errorscr errortext", tabs[WinError].win->name);}voidmakecontrols(void){ int i; cs = newcontrolset(screen, nil, nil, nil); // make shared buttons readbuts(); vol = createslider(cs, "volume"); chanprint(cs->ctl, "volume size %d %d %d %d", 2*butwid, butht, 2048, butht); chanprint(cs->ctl, "volume absolute 1"); chanprint(cs->ctl, "volume indicatorcolor red"); chanprint(cs->ctl, "volume max 100"); chanprint(cs->ctl, "volume orient hor"); chanprint(cs->ctl, "volume clamp low 1"); chanprint(cs->ctl, "volume clamp high 0"); chanprint(cs->ctl, "volume format '%%s volume %%d'"); createrow(cs, "buttonrow"); for(i = 0; i < nelem(buts); i++) chanprint(cs->ctl, "buttonrow add %s", buts[i].name); chanprint(cs->ctl, "buttonrow add volume"); chanprint(cs->ctl, "buttonrow separation %d", borderwidth); chanprint(cs->ctl, "buttonrow image darkgreen"); makebrowsecontrols(); makeplaycontrols(); makeplaylistcontrols(); makeerrorcontrols(); maketab(); chanprint(cs->ctl, "%q image background", "text slider"); chanprint(cs->ctl, "text font romanfont"); chanprint(cs->ctl, "slider indicatorcolor darkgreen"); chanprint(cs->ctl, "row separation %d", borderwidth); chanprint(cs->ctl, "row image darkgreen"); chanprint(cs->ctl, "column separation %d", 2); chanprint(cs->ctl, "column image darkgreen"); createcolumn(cs, "wholewin"); chanprint(cs->ctl, "wholewin separation %d", borderwidth); chanprint(cs->ctl, "wholewin add buttonrow tabs"); chanprint(cs->ctl, "wholewin image darkgreen"); chanprint(cs->ctl, "%q image darkgreen", "column row");}voidmakewindow(int dx, int dy, int wflag){ int mountfd, fd, n; static char aname[128]; static char rio[128] = "/mnt/term"; char *args[6]; if(wflag){ /* find out screen size */ fd = open("/mnt/wsys/screen", OREAD); if(fd >= 0 && read(fd, aname, 60) == 60){ aname[60] = '\0'; n = tokenize(aname, args, nelem(args)); if(n != 5) fprint(2, "Not an image: /mnt/wsys/screen\n"); else{ n = atoi(args[3]) - atoi(args[1]); if(n <= 0 || n > 2048) fprint(2, "/mnt/wsys/screen very wide: %d\n", n); else if(n < dx) dx = n-1; n = atoi(args[4]) - atoi(args[2]); if(n <= 0 || n > 2048) fprint(2, "/mnt/wsys/screen very high: %d\n", n); else if(n < dy) dy = n-1; } close(fd); } n = 0; if((fd = open("/env/wsys", OREAD)) < 0){ n = strlen(rio); fd = open("/mnt/term/env/wsys", OREAD); if(fd < 0) sysfatal("/env/wsys"); } if(read(fd, rio+n, sizeof(rio)-n-1) <= 0) sysfatal("/env/wsys"); mountfd = open(rio, ORDWR); if(mountfd < 0) sysfatal("open %s: %r", rio); snprint(aname, sizeof aname, "new -dx %d -dy %d", dx, dy); rfork(RFNAMEG); if(mount(mountfd, -1, "/mnt/wsys", MREPL, aname) < 0) sysfatal("mount: %r"); if(bind("/mnt/wsys", "/dev", MBEFORE) < 0) sysfatal("mount: %r"); } if(initdraw(nil, nil, "music") < 0) sysfatal("initdraw: %r"); initcontrols(); if(dx <= 320) colorinit("/lib/font/bit/lucidasans/unicode.6.font", "/lib/font/bit/lucidasans/boldunicode.8.font"); else colorinit("/lib/font/bit/lucidasans/unicode.8.font", "/lib/font/bit/lucidasans/boldunicode.10.font"); makecontrols(); resizeready = 1; resizecontrolset(cs); if(debug & DBGCONTROL) fprint(2, "resize done\n");}voidsetparent(char *addr){ int i; if(parent.address) free(parent.address); parent.address = strdup(addr); for(i = 0; i < parent.ndata; i++) if(parent.data[i]) free(parent.data[i]); parent.ndata = 0; if(parent.data){ free(parent.data); parent.data = nil; } chanprint(cs->ctl, "browsetopwin clear"); chanprint(cs->ctl, "browsetopscr max 0"); chanprint(cs->ctl, "browsetopscr value 0");}voidaddparent(char *str){ parent.data = realloc(parent.data, (parent.ndata+1)*sizeof(char*)); parent.data[parent.ndata] = strdup(str); parent.ndata++; chanprint(cs->ctl, "browsetopwin accumulate %q", str); chanprint(cs->ctl, "browsetopscr max %d", parent.ndata);}voidclearchildren(void){ int i; for(i = 0; i < nchildren; i++){ if(children[i].address) free(children[i].address); if(children[i].data) free(children[i].data); } nchildren= 0; chanprint(cs->ctl, "browsebotwin clear"); chanprint(cs->ctl, "browsebotwin topline 0"); chanprint(cs->ctl, "browsebotscr max 0"); chanprint(cs->ctl, "browsebotscr value 0"); selected = -1;}voidaddchild(char *addr, char *data){ children[nchildren].address = addr; children[nchildren].data = data; nchildren++; chanprint(cs->ctl, "browsebotwin accumulate %q", data); chanprint(cs->ctl, "browsebotscr max %d", nchildren);}static voidplaylistselect(int n){ if(playlist.selected >= 0 && playlist.selected < playlist.nentries){ chanprint(cs->ctl, "playlistwin select %d 0", playlist.selected); deactivatebuttons(1<<Playbutton); } playlist.selected = n; if(playlist.selected < 0 || playlist.selected >= playlist.nentries) return; activatebuttons(1<<Playbutton); chanprint(cs->ctl, "playlistwin select %d 1", n); if(n >= 0 && n <= playlist.nentries - Dy(playlistwin->rect)/romanfont->height) n--; else n = playlist.nentries - Dy(playlistwin->rect)/romanfont->height + 1; if(n < 0) n = 0; if(n < playlist.nentries){ chanprint(cs->ctl, "playlistwin topline %d", n); chanprint(cs->ctl, "playlistscr value %d", n); } chanprint(cs->ctl, "playlist show");}voidupdateplaylist(int trunc){ char *s; int fd; while(cs->ctl->s - cs->ctl->n < cs->ctl->s/4) sleep(100); if(trunc){ playlistselect(-1); chanprint(cs->ctl, "playlistwin clear"); chanprint(cs->ctl, "playlistwin topline 0"); chanprint(cs->ctl, "playlistscr max 0"); chanprint(cs->ctl, "playlistscr value 0"); deactivatebuttons(1<<Playbutton | 1<<Deletebutton); chanprint(cs->ctl, "playlistwin show"); chanprint(cs->ctl, "playlistscr show"); s = smprint("%s/ctl", srvmount); if((fd = open(s, OWRITE)) >= 0){ fprint(fd, "reread"); close(fd); } free(s); return; } if(playlist.entry[playlist.nentries].onum){ s = getoneliner(playlist.entry[playlist.nentries].onum); chanprint(cs->ctl, "playlistwin accumulate %q", s); free(s); }else chanprint(cs->ctl, "playlistwin accumulate %q", playlist.entry[playlist.nentries].file); playlist.nentries++; chanprint(cs->ctl, "playlistscr max %d", playlist.nentries); if(playlist.selected == playlist.nentries - 1) playlistselect(playlist.selected); activatebuttons(1<<Playbutton|1<<Deletebutton); chanprint(cs->ctl, "playlistscr show"); chanprint(cs->ctl, "playlistwin show");}voidbrowseto(char *onum, int line){ onum = strdup(onum); setparent(onum); clearchildren(); fillbrowsetop(onum); chanprint(cs->ctl, "browsetop show"); fillbrowsebot(onum); if(line){ chanprint(cs->ctl, "browsebotscr value %d", line); chanprint(cs->ctl, "browsebotwin topline %d", line);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -