⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui.cc

📁 一个共享源码的音频库4
💻 CC
字号:
// This file contains no license whatsoever. It is provided in the public domain as an example// of how to use the audio library//// Bruce Forsberg// forsberg@tns.net// //#include <stdio.h>#include <stdlib.h>#include <sys/ioctl.h>#include <unistd.h>#include <fcntl.h>#include <iostream.h>#include <string>#include <X11/X.h>extern "C"{#include <Xm/Xm.h>#include <Xm/Form.h>#include <Xm/PushB.h>#include <Xm/ToggleB.h>#include <Xm/RowColumn.h>#include <Xm/Text.h>#include <Xm/Label.h>#include <Xm/DrawingA.h>#include <Xm/CascadeB.h>#include <Xm/FileSB.h>#include <Xm/ScrolledW.h>}#include "plot.h"#include "gui.h"#define ADD_INPUT "Add Input"static voidcreate_menu(Widget form);static voidcreate_buttons(Widget form);static Widget ScrollForm;static Widget last_widget = NULL;static XrmOptionDescRec opTable[] ={   {"-time", ".time", XrmoptionSepArg, NULL},};static String FallBack[] ={   "*borderWidth: 0",   "*geometry: +100+100",   "*background: grey",   NULL};voidmode_call(   Widget w,   XtPointer client_data,   XtPointer call_data){   static bool mode = 1;   XmString str;   if (mode == 1)   {      str = XmStringCreateSimple("Input");      mode = 0;   }   else   {      str = XmStringCreateSimple("Output");      mode = 1;   }   XtVaSetValues(w,                 XmNlabelString, str,                 NULL);   plot_set_mode(mode);   XmStringFree(str);}voidadd_callback(   Widget w,   XtPointer client_data,   XtPointer call_data){   plot_select_input((int)client_data);}voidinsert_call(   Widget w,   XtPointer client_data,   XtPointer call_data){   plot_insert();}voidenlarge_call(   Widget w,   XtPointer client_data,   XtPointer call_data){   plot_enlarge();}voidreduce_call(   Widget w,   XtPointer client_data,   XtPointer call_data){   plot_reduce();}voidplay_call(   Widget w,   XtPointer client_data,   XtPointer call_data){   plot_play(NULL);}voidcut_call(   Widget w,   XtPointer client_data,   XtPointer call_data){   plot_cut();}voidreset_call(   Widget w,   XtPointer client_data,   XtPointer call_data){   plot_reset();}voiderase_call(   Widget w,   XtPointer client_data,   XtPointer call_data){   plot_erase();}voidpause_call(   Widget w,   XtPointer client_data,   XtPointer call_data){   plot_pause();}voidstop_call(   Widget w,   XtPointer client_data,   XtPointer call_data){   plot_stop();}voidinput_call(   Widget w,   XtPointer client_data,   XtPointer call_data){}voidgui_load_file(   Widget w,   caddr_t client_data,   XmFileSelectionBoxCallbackStruct  *cbs){   char * file = NULL;   if (cbs)   {      if (!XmStringGetLtoR(cbs->value, XmSTRING_DEFAULT_CHARSET, &file))         return;      if (strcmp(ADD_INPUT, client_data) == 0)         plot_input(file);      else if (strcmp("SaveClipAs", client_data) == 0)         plot_play(file);         XtFree(file);   }   XtUnmanageChild(w);}voidgui_cancel_file(   Widget w,   caddr_t client_data,   XmFileSelectionBoxCallbackStruct  *cbs){   XtUnmanageChild(w);}voidopen_callback(   Widget  w,   char*   name,   caddr_t call_data){   Arg  args[10];   int  n;   Widget dialog;   static Widget open_dialog = 0, add_dialog = 0, save_dialog = 0;   XmString str;   if (strcmp(ADD_INPUT, name) == 0)      dialog = add_dialog;   else if (strcmp("SaveClipAs", name) == 0)      dialog = save_dialog;   else      dialog = open_dialog;   if (!dialog)   {      if (strcmp(ADD_INPUT, name) == 0)         str = XmStringCreateSimple(ADD_INPUT);      else if (strcmp("SaveClipAs", name) == 0)         str = XmStringCreateSimple("Save Clip");      else         str = XmStringCreateSimple("Open File");      n = 0;      XtSetArg(args[n], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); n++;      XtSetArg(args[n], XmNdialogTitle, str); n++;      dialog = XmCreateFileSelectionDialog(w, "FileBox", args, n);      XtAddCallback(dialog, XmNokCallback, gui_load_file, name);      XtAddCallback(dialog, XmNcancelCallback, gui_cancel_file, NULL);      XmStringFree(str);      if (strcmp(ADD_INPUT, name) == 0)         add_dialog = dialog;      else if (strcmp("SaveClipAs", name) == 0)         save_dialog = dialog;      else         open_dialog = dialog;   }   XtManageChild(dialog);   XtPopup(XtParent(dialog), XtGrabNone);}voidquit_callback(   Widget  w,   char*   name,   caddr_t call_data){   exit(0);}voidgui_build(int argc, char * argv[]){   Widget toplevel, Form;   Widget ScrollWidget, LabelWidget, ModeWidget;   Widget Form1, Form2, Form3, Form4;   XtAppContext  app;   toplevel = XtVaAppInitialize(&app, "Form1",               opTable, XtNumber(opTable),               &argc, argv,               FallBack, NULL);   Form = XmCreateForm(toplevel, "Form", NULL, 0);   XtVaSetValues(Form,                 XmNresizePolicy, XmRESIZE_ANY,                 XmNallowShellResize, True,                 NULL);   Form1 = XmCreateForm(Form, "Form1", NULL, 0);   XtVaSetValues(Form1,                 XmNtopAttachment, XmATTACH_FORM,                 XmNrightAttachment, XmATTACH_FORM,                 XmNleftAttachment, XmATTACH_FORM,                 NULL);   Form4 = XmCreateForm(Form, "Form4", NULL, 0);   XtVaSetValues(Form4,                 XmNtopAttachment, XmATTACH_WIDGET,                 XmNtopWidget, Form1,                 XmNrightAttachment, XmATTACH_FORM,                 XmNleftAttachment, XmATTACH_FORM,                 NULL);   Form2 = XmCreateForm(Form, "Form2", NULL, 0);   XtVaSetValues(Form2,                 XmNtopAttachment, XmATTACH_WIDGET,                 XmNtopWidget, Form4,                 XmNleftAttachment, XmATTACH_FORM,                 NULL);   Form3 = XmCreateForm(Form, "Form3", NULL, 0);   XtVaSetValues(Form3,                 XmNtopAttachment, XmATTACH_WIDGET,                 XmNtopWidget, Form4,                 XmNleftAttachment, XmATTACH_WIDGET,                 XmNleftWidget, Form2,                 XmNrightAttachment, XmATTACH_FORM,                 XmNbottomAttachment, XmATTACH_FORM,                 NULL);   create_menu(Form1);   create_buttons(Form4);   ModeWidget = XmCreatePushButton(Form2, "Output", NULL, 0);   XtVaSetValues(ModeWidget,                 XmNtopAttachment, XmATTACH_WIDGET,                 XmNtopWidget, Form4,                 XmNleftAttachment, XmATTACH_FORM,                 XmNrightAttachment, XmATTACH_POSITION,                 XmNrightPosition, 100,                 NULL);   XtAddCallback(ModeWidget, XmNactivateCallback, mode_call, NULL);   XtManageChild(ModeWidget);   ScrollWidget = XmCreateScrolledWindow(Form2, "Scrolled", NULL, 0);   XtVaSetValues(ScrollWidget,                 XmNtopAttachment, XmATTACH_WIDGET,                 XmNtopWidget, ModeWidget,                 XmNleftAttachment, XmATTACH_FORM,                 XmNrightAttachment, XmATTACH_POSITION,                 XmNrightPosition, 100,                 NULL);   XtManageChild(ScrollWidget);   ScrollForm = XmCreateForm(ScrollWidget, "Scroll Form", NULL, 0);   XtVaSetValues(ScrollForm,                 XmNtopAttachment, XmATTACH_FORM,                 XmNbottomAttachment, XmATTACH_FORM,                 XmNleftAttachment, XmATTACH_FORM,                 XmNrightAttachment, XmATTACH_FORM,                 NULL);   XtManageChild(ScrollForm);   LabelWidget = XmCreateLabel(ScrollForm, "Input Selector", NULL, 0);   XtVaSetValues(LabelWidget,                 XmNtopAttachment, XmATTACH_FORM,                 XmNleftAttachment, XmATTACH_FORM,                 XmNrightAttachment, XmATTACH_FORM,                 NULL);   XtManageChild(LabelWidget);   last_widget = LabelWidget;   plot_build(Form3);   XtManageChild(Form1);   XtManageChild(Form4);   XtManageChild(Form2);   XtManageChild(Form3);   XtManageChild(Form);   XtRealizeWidget(toplevel);   XtAppMainLoop(app);}voidadd_input_button(int num){   Widget temp;   char   str[100];   sprintf(str, "Input %d", num);   temp = XmCreatePushButton(ScrollForm, str, NULL, 0);   XtVaSetValues(temp,                 XmNtopAttachment, XmATTACH_WIDGET,                 XmNtopWidget, last_widget,                 XmNleftAttachment, XmATTACH_FORM,                 XmNrightAttachment, XmATTACH_FORM,                 NULL);   XtAddCallback(temp, XmNactivateCallback, add_callback, (char *)num);   XtManageChild(temp);   last_widget = temp;}static voidcreate_menu(Widget form){   Arg  args[20];   int  n;   Widget MenuBar, FileMenu, FileBar;   Widget AddButton, SaveClipButton, QuitButton;   Widget ViewMenu, ViewBar, EraseButton;   string  str;   n = 0;   XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;   XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;   MenuBar = XmCreateMenuBar(form, "Menu Bar", args, n);   XtManageChild(MenuBar);   /************** FILE MENU *******************/   n = 0;   XtSetArg(args[n], XmNmnemonic, 'F'); n++;   FileMenu = XmCreateCascadeButton(MenuBar, "File", args, n);   XtManageChild(FileMenu);   n = 0;   FileBar = XmCreatePulldownMenu(MenuBar, "File Pulldown", args, n);   n = 0;   XtSetArg(args[n], XmNsubMenuId, FileBar); n++;   XtSetValues(FileMenu, args, n);   str = ADD_INPUT;   str.append("...");   n = 0;   AddButton = XtCreateManagedWidget(      str.c_str(), xmPushButtonWidgetClass, FileBar, args, n);   XtAddCallback(AddButton, XmNactivateCallback, open_callback, (char *)ADD_INPUT);      n = 0;   SaveClipButton = XtCreateManagedWidget(      "Save Clip as...", xmPushButtonWidgetClass, FileBar, args, n);   XtAddCallback(SaveClipButton, XmNactivateCallback, open_callback, (char *)"SaveClipAs");      n = 0;   QuitButton = XtCreateManagedWidget(      "Quit", xmPushButtonWidgetClass, FileBar, args, n);   XtAddCallback(QuitButton, XmNactivateCallback, quit_callback, (char *)"Quit");   /**************** VIEW MENU ******************/   n = 0;   XtSetArg(args[n], XmNmnemonic, 'V'); n++;   ViewMenu = XmCreateCascadeButton(MenuBar, "View", args, n);   XtManageChild(ViewMenu);   n = 0;   ViewBar = XmCreatePulldownMenu(MenuBar, "View Pulldown", args, n);   n = 0;   XtSetArg(args[n], XmNsubMenuId, ViewBar); n++;   XtSetValues(ViewMenu, args, n);   n = 0;   EraseButton = XtCreateManagedWidget(      "Erase Edits", xmPushButtonWidgetClass, ViewBar, args, n);   XtAddCallback(EraseButton, XmNactivateCallback, erase_call, NULL);}static voidcreate_buttons(Widget form){   Widget Enlarge, Reduce;   Widget PlayWidget, CutWidget, ResetWidget, PauseWidget, StopWidget;   Widget InsertWidget;   Enlarge = XmCreatePushButton(form, "Zoom In", NULL, 0);   XtVaSetValues(Enlarge,                 XmNtopAttachment, XmATTACH_FORM,                 XmNleftAttachment, XmATTACH_FORM,                 XmNrightAttachment, XmATTACH_POSITION,                 XmNrightPosition, 25,                 NULL);   XtAddCallback(Enlarge, XmNactivateCallback, enlarge_call, NULL);   XtManageChild(Enlarge);   Reduce = XmCreatePushButton(form, "Zoom Out", NULL, 0);   XtVaSetValues(Reduce,                 XmNtopAttachment, XmATTACH_FORM,                 XmNleftAttachment, XmATTACH_WIDGET,                 XmNleftWidget, Enlarge,                 XmNrightAttachment, XmATTACH_POSITION,                 XmNrightPosition, 50,                 NULL);   XtAddCallback(Reduce, XmNactivateCallback, reduce_call, NULL);   XtManageChild(Reduce);   CutWidget = XmCreatePushButton(form, "Cut", NULL, 0);   XtVaSetValues(CutWidget,                 XmNtopAttachment, XmATTACH_WIDGET,                 XmNtopWidget, Enlarge,                 XmNleftAttachment, XmATTACH_FORM,                 XmNrightAttachment, XmATTACH_POSITION,                 XmNrightPosition, 25,                 NULL);   XtAddCallback(CutWidget, XmNactivateCallback, cut_call, NULL);   XtManageChild(CutWidget);   InsertWidget = XmCreatePushButton(form, "Insert", NULL, 0);   XtVaSetValues(InsertWidget,                 XmNtopAttachment, XmATTACH_WIDGET,                 XmNtopWidget, Enlarge,                 XmNleftAttachment, XmATTACH_WIDGET,                 XmNleftWidget, CutWidget,                 XmNrightAttachment, XmATTACH_POSITION,                 XmNrightPosition, 50,                 NULL);   XtAddCallback(InsertWidget, XmNactivateCallback, insert_call, NULL);   XtManageChild(InsertWidget);   ResetWidget = XmCreatePushButton(form, "Reset Markers", NULL, 0);   XtVaSetValues(ResetWidget,                 XmNtopAttachment, XmATTACH_WIDGET,                 XmNtopWidget, Enlarge,                 XmNleftAttachment, XmATTACH_WIDGET,                 XmNleftWidget, InsertWidget,                 XmNrightAttachment, XmATTACH_POSITION,                 XmNrightPosition, 75,                 NULL);   XtAddCallback(ResetWidget, XmNactivateCallback, reset_call, NULL);   XtManageChild(ResetWidget);   PlayWidget = XmCreatePushButton(form, "Play", NULL, 0);   XtVaSetValues(PlayWidget,                 XmNtopAttachment, XmATTACH_WIDGET,                 XmNtopWidget, CutWidget,                 XmNleftAttachment, XmATTACH_FORM,                 XmNrightAttachment, XmATTACH_POSITION,                 XmNrightPosition, 25,                 NULL);   XtAddCallback(PlayWidget, XmNactivateCallback, play_call, NULL);   XtManageChild(PlayWidget);   PauseWidget = XmCreatePushButton(form, "Pause", NULL, 0);   XtVaSetValues(PauseWidget,                 XmNtopAttachment, XmATTACH_WIDGET,                 XmNtopWidget, CutWidget,                 XmNleftAttachment, XmATTACH_WIDGET,                 XmNleftWidget, PlayWidget,                 XmNrightAttachment, XmATTACH_POSITION,                 XmNrightPosition, 50,                 NULL);   XtAddCallback(PauseWidget, XmNactivateCallback, pause_call, NULL);   XtManageChild(PauseWidget);   StopWidget = XmCreatePushButton(form, "Stop", NULL, 0);   XtVaSetValues(StopWidget,                 XmNtopAttachment, XmATTACH_WIDGET,                 XmNtopWidget, CutWidget,                 XmNleftAttachment, XmATTACH_WIDGET,                 XmNleftWidget, PauseWidget,                 XmNrightAttachment, XmATTACH_POSITION,                 XmNrightPosition, 75,                 NULL);   XtAddCallback(StopWidget, XmNactivateCallback, stop_call, NULL);   XtManageChild(StopWidget);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -