📄 xaw_i.c
字号:
a_pipe_write("D 1"); } else { offPlayButton(); offPauseButton(); a_pipe_write("D 2"); } toggleMark(file_menu[ID_SHUFFLE-100].widget, file_menu[ID_SHUFFLE-100].id);}static void menuCB(Widget w,XtPointer data,XtPointer dummy) { onPlayOffPause(); sprintf(local_buf,"L %d",((int)data)+1); a_pipe_write(local_buf);}static void setVolbar(int val) { char s[8]; float thumb; amplitude = (val > MAXVOLUME)? MAXVOLUME:val; sprintf(s, "%d", val); XtVaSetValues(vol_l, XtNlabel, s, NULL); sprintf(s, "V %03d\n", val); a_pipe_write(s); thumb = (float)val / (float)MAXVOLUME; sprintf(s, "%d", val); XtVaSetValues(vol_l, XtNlabel, s, NULL); if (sizeof(thumb) > sizeof(XtArgVal)) { XtVaSetValues(vol_bar, XtNtopOfThumb, &thumb, NULL); } else { XtArgVal *l_thumb = (XtArgVal *) &thumb; XtVaSetValues(vol_bar, XtNtopOfThumb,*l_thumb, NULL); }}static void volsetCB(Widget w,XtPointer data,XtPointer call_data) { float percent = *(float*)call_data; int val = (float)(MAXVOLUME * percent); if (amplitude == val) return; setVolbar(val);}static void volupdownCB(Widget w,XtPointer data,XtPointer diff) { int i = ((int)diff > 0)? (-10):10; i += amplitude; setVolbar(i);}static void volupdownAction(Widget w,XEvent *e,String *v,Cardinal *n) { int i = atoi(*v); i += amplitude; setVolbar(i);}#if 0 /* Not used */static void tunesetCB(Widget w,XtPointer data,XtPointer call_data){ static int tmpval; char s[16]; float percent = *(float*)call_data; int value = (float)(total_time * percent); float thumb, l_thumb; if (tmpval == value) return; if (curr_time > total_time) curr_time = total_time; curr_time = tmpval = value; l_thumb = thumb = (float)curr_time / (float)total_time; snprintf(s,sizeof(s), "%2d:%02d", tmpval / 60, tmpval % 60); XtVaSetValues(tune_l0, XtNlabel, s, NULL); sprintf(s, "T %d\n", tmpval); a_pipe_write(s);}#endifstatic void tunesetAction(Widget w,XEvent *e,String *v,Cardinal *n) { static float tmpval; char s[16]; int value; float l_thumb; XtVaGetValues(tune_bar, XtNtopOfThumb, &l_thumb, NULL); if (tmpval == l_thumb) return; tmpval = l_thumb; value = (int)(l_thumb * total_time); snprintf(s,sizeof(s), "%2d:%02d", curr_time / 60, curr_time % 60); XtVaSetValues(tune_l0, XtNlabel, s, NULL); XtVaSetValues(tune_bar, XtNtopOfThumb, &l_thumb, NULL); sprintf(s, "T %d\n", value); a_pipe_write(s);}static void tuneslideCB(Widget w,XtPointer data,XtPointer diff) { char s[16]; sprintf(s, "T %d\n", curr_time+ (int)diff); a_pipe_write(s);}static void tuneslideAction(Widget w,XEvent *e,String *v,Cardinal *n) { char s[16]; float l_thumb; XtVaGetValues(tune_bar, XtNtopOfThumb, &l_thumb, NULL); sprintf(s, "T %d\n", (int)(total_time * l_thumb)); a_pipe_write(s);}/*ARGSUSED*/static void resizeAction(Widget w,XEvent *e,String *v,Cardinal *n) { Dimension w1,w2,h1,h2; Position y1; int i,tmp,tmp2,tmp3; XtVaGetValues(toplevel,XtNwidth,&w1,XtNheight,&h1,NULL); w2 = w1 -8; if(w2>TRACEVPORT_WIDTH) w2 = TRACEVPORT_WIDTH; XtVaGetValues(lyric_t,XtNheight,&h2,NULL); XtResizeWidget(lyric_t,w2-2,h2,0); i= 0; tmp = 10; while (tmp > 0) { i++; tmp -= (int)(w2) / 36; } XtVaSetValues(lyric_t,XtNborderWidth,1,NULL); XtVaSetValues(b_box,XtNheight,i*40,NULL); XtResizeWidget(b_box,w2,i*40,0); if(ctl->trace_playing) { XtVaGetValues(trace_vport,XtNy,&y1,NULL); XtResizeWidget(trace_vport,w2,((h1-y1>TRACE_HEIGHT+12)? TRACE_HEIGHT+12:h1-y1),0); } XtVaGetValues(v_box,XtNheight,&h2,NULL); w2 = ((w1 < TRACE_WIDTH_SHORT)? w1:TRACE_WIDTH_SHORT); /* new v_box width */ tmp = XTextWidth(app_resources.volume_font,"Volume ",7)+8; /* vol_l width */ XtVaSetValues(vol_l0,XtNwidth,tmp,NULL); XtVaSetValues(v_box,XtNwidth,w2,NULL); tmp2 = w2 -tmp - XTextWidth(app_resources.volume_font,"000",3) -38; tmp3 = w2 -XTextWidth(app_resources.volume_font,"/ 99:59",7) - XTextWidth(app_resources.volume_font,"000",3) -45; XtResizeWidget(v_box,w2,h2,0); XtVaGetValues(vol_bar,XtNheight,&h2,NULL); XtVaSetValues(vol_bar,XtNwidth,tmp2,NULL); XtVaSetValues(tune_bar,XtNwidth,tmp3,NULL); XtResizeWidget(vol_bar,tmp2,h2,0); XtResizeWidget(tune_bar,tmp3,h2,0); XSync(disp, False); usleep(10000);}#ifndef WIDGET_IS_LABEL_WIDGETvoid a_print_text(Widget w, char *st) { XawTextPosition pos; XawTextBlock tb; st = strcat(st, "\n"); pos = XawTextGetInsertionPoint(w); tb.firstPos = 0; tb.length = strlen(st); tb.ptr = st; tb.format = FMT8BIT; XawTextReplace(w, pos, pos, &tb); XawTextSetInsertionPoint(w, pos + tb.length);}#elsevoid a_print_text(Widget w, char *st) { XtVaSetValues(w,XtNlabel,st,NULL);}#endif /* !WIDGET_IS_LABEL_WIDGET *//*ARGSUSED*/static void popupLoad(Widget w,XtPointer client_data,XtPointer call_data) {#define DIALOG_HEIGHT 400 Position popup_x, popup_y, top_x, top_y; Dimension top_width; XtVaGetValues(toplevel, XtNx,&top_x,XtNy,&top_y,XtNwidth,&top_width,NULL); popup_x=top_x+ 20; popup_y=top_y+ 72; top_width += 100; if(popup_x+top_width > root_width) popup_x = root_width -top_width -20; if(popup_y+DIALOG_HEIGHT > root_height) popup_y = root_height -DIALOG_HEIGHT -20; XtVaSetValues(popup_load, XtNx,popup_x,XtNy,popup_y,XtNwidth,top_width, XtNheight,DIALOG_HEIGHT,NULL); XtRealizeWidget(popup_load); XtPopup(popup_load,(XtGrabKind)XtGrabNone); top_width -= 4; XtVaSetValues(load_vport,XtNwidth,top_width,NULL); XawTextSetInsertionPoint(load_t,(XawTextPosition)(strlen(basepath)));}static void popdownLoad(Widget w,XtPointer s,XtPointer data) { char *p, *p2; DirPath full; char local_buf[300],tmp[PATH_MAX];#ifndef ORIGINAL int Aflag = 0; /* RAKK/HIOENS: adding All files in directory */#endif /*RAKK/HIOENS*/ /* tricky way for both use of action and callback */ if (s != NULL && data == NULL){ if(*(char *)s == 'A') { snprintf(tmp,sizeof(tmp),"%s%c",basepath,'/'); p = tmp;#ifndef ORIGINAL Aflag = 1;#endif /*RAKK/HIOENS*/ } else { p = XawDialogGetValueString(load_d); } if (NULL != (p2 = expandDir(p, &full))) p = p2; if(IsEffectiveFile(p)) {#ifndef ORIGINAL if(Aflag == 1) strcat(p,"/");#endif /*RAKK/HIOENS*/ snprintf(local_buf,sizeof(local_buf),"X %s\n",p); a_pipe_write(local_buf); } } XtPopdown(popup_load);}static void toggleMark(Widget w,int id) { file_menu[id-100].bmflag ^= True; XtVaSetValues(w,XtNleftBitmap, ((file_menu[id-100].bmflag)? check_mark:None),NULL);}static void filemenuAction(Widget w,XEvent *e,String *v,Cardinal *n) { int i; if(e == NULL) i= ID_HIDETXT; else i= atoi(*v); if(!(ctl->trace_playing) && i == ID_HIDETRACE) i= ID_HIDETXT; filemenuCB(file_menu[i-100].widget,&file_menu[i-100].id,NULL);}static void filemenuCB(Widget w,XtPointer id_data, XtPointer data) { int *id = (int *)id_data; Dimension w1,h1,w2,h2,tmp; switch (*id) { case ID_LOAD: popupLoad(w,NULL,NULL); break; case ID_AUTOSTART: toggleMark(w,*id); break; case ID_AUTOQUIT: toggleMark(w,*id); a_pipe_write("q"); break; case ID_HIDETRACE: if(ctl->trace_playing) { XtVaGetValues(toplevel,XtNheight,&h1,XtNwidth,&w1,NULL); if(XtIsManaged(trace_vport)) { tmp = trace_height + (XtIsManaged(lyric_t) ? 0:lyric_height); XtUnmanageChild(trace_vport); XtMakeResizeRequest(toplevel,w1,base_height-tmp,&w2,&h2); } else { XtManageChild(trace_vport); XtVaSetValues(trace_vport,XtNfromVert, (XtIsManaged(lyric_t) ? lyric_t:t_box),NULL); XtMakeResizeRequest(toplevel,w1,h1+trace_height,&w2,&h2); XtVaSetValues(trace_vport,XtNheight,trace_height,NULL); } toggleMark(w,*id); } break; case ID_HIDETXT: XtVaGetValues(toplevel,XtNheight,&h1,XtNwidth,&w1,NULL); if(XtIsManaged(lyric_t)) { if(ctl->trace_playing) { tmp = lyric_height + (XtIsManaged(trace_vport) ? 0:trace_height); } else { tmp = lyric_height; } XtUnmanageChild(lyric_t); if(ctl->trace_playing && XtIsManaged(trace_vport)) XtVaSetValues(trace_vport,XtNfromVert,t_box,NULL); XtMakeResizeRequest(toplevel,w1,base_height-tmp,&w2,&h2); } else { XtManageChild(lyric_t); if(ctl->trace_playing && XtIsManaged(trace_vport)) { XtVaSetValues(trace_vport,XtNfromVert,lyric_t,NULL); } XtVaSetValues(lyric_t,XtNheight,lyric_height,NULL); XtMakeResizeRequest(toplevel,w1,h1+lyric_height,&w2,&h2); } toggleMark(w,*id); break; case ID_SAVECONFIG: a_saveconfig(dotfile); break; case ID_SHUFFLE: randomAction(NULL,NULL,NULL,NULL); break; case ID_REPEAT: repeatAction(NULL,NULL,NULL,NULL); break; case ID_OPTIONS: optionspopupCB(w,NULL,NULL); break; case ID_FILELIST: flistpopupCB(w,NULL,NULL); break; case ID_ABOUT: aboutCB(w,NULL,NULL); break; case ID_QUIT: quitCB(w,NULL,NULL); break; }}#ifdef WIDGET_IS_LABEL_WIDGETstatic void a_print_msg(Widget w){ int i, msglen; a_pipe_nread((char *)&msglen, sizeof(int)); while(msglen > 0) { i = msglen; if(i > sizeof(local_buf)-1) i = sizeof(local_buf)-1; a_pipe_nread(local_buf, i); local_buf[i] = '\0'; XtVaSetValues(w,XtNlabel,local_buf,NULL); msglen -= i; }}#elsestatic void a_print_msg(Widget w){ int i, msglen; XawTextPosition pos; XawTextBlock tb; tb.firstPos = 0; tb.ptr = local_buf; tb.format = FMT8BIT; pos = XawTextGetInsertionPoint(w); a_pipe_nread((char *)&msglen, sizeof(int)); while(msglen > 0) { i = msglen; if(i > sizeof(local_buf)) i = sizeof(local_buf); a_pipe_nread(local_buf, i); tb.length = i; XawTextReplace(w, pos, pos, &tb); pos += i; XawTextSetInsertionPoint(w, pos); msglen -= i; }}#endif /* WIDGET_IS_LABEL_WIDGET */#define DELTA_VEL 32static void ctl_channel_note(int ch, int note, int velocity) { if(!ctl->trace_playing) return; if (velocity == 0) { if (note == Panel->cnote[ch]) Panel->v_flags[ch] = FLAG_NOTE_OFF; Panel->cvel[ch] = 0; } else if (velocity > Panel->cvel[ch]) { Panel->cvel[ch] = velocity; Panel->cnote[ch] = note; Panel->ctotal[ch] = velocity * Panel->channel[ch].volume * Panel->channel[ch].expression / (127*127); Panel->v_flags[ch] = FLAG_NOTE_ON; }}/*ARGSUSED*/static void handle_input(XtPointer data,int *source,XtInputId *id) { char s[16], c; int i=0, n, ch, note; float thumb; char **pp; a_pipe_read(local_buf,sizeof(local_buf)); switch (local_buf[0]) { case 't' : curr_time = n = atoi(local_buf+2); i= n % 60; n /= 60; sprintf(s, "%d:%02d", n,i); XtVaSetValues(tune_l0, XtNlabel, s, NULL); if (total_time >0) { thumbj = (float)curr_time / (float)total_time; if (sizeof(thumbj) > sizeof(XtArgVal)) { XtVaSetValues(tune_bar,XtNtopOfThumb,&thumbj,NULL); } else { XtArgVal *l_thumbj = (XtArgVal *) &thumbj; XtVaSetValues(tune_bar,XtNtopOfThumb,*l_thumbj,NULL); } } break; case 'T' : n= atoi(local_buf+2); if(n > 0) { total_time = n; snprintf(s,sizeof(s), "/%2d:%02d", n/60, n%60); XtVaSetValues(tune_l,XtNlabel,s,NULL); } break; case 'E' : { char *name; name=strrchr(local_buf+2,' '); n= atoi(local_buf+2); if(popup_shell_exist & FLIST_WINDOW) XawListHighlight(file_list, n-1); if(name==NULL) break; name++; XtVaSetValues(title_mb,XtNlabel,name,NULL); snprintf(window_title, sizeof(window_title), "%s : %s", APP_CLASS, local_buf+2); XtVaSetValues(toplevel,XtNtitle,window_title,NULL); *window_title = '\0'; } break; case 'e' : if (arrangetitle) { char *p= local_buf+2; if (!strcmp(p, "(null)")) p = UNTITLED_STR; snprintf(window_title, sizeof(window_title), "%s : %s", APP_CLASS, p); XtVaSetValues(toplevel,XtNtitle,window_title,NULL); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -