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

📄 popup.cc

📁 一个共享源码的音频库4
💻 CC
📖 第 1 页 / 共 2 页
字号:
// 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 <iostream.h>#include <X11/X.h>extern "C"{#include <Xm/Xm.h>#include <Xm/Form.h>#include <Xm/DrawingA.h>#include <Xm/LabelG.h>#include <Xm/PushBG.h>#include <Xm/RowColumn.h>#include <Xm/SeparatoG.h>#include <Xm/FileSB.h>#include <Xm/SelectioB.h>#include <Xm/DialogS.h>#include <Xm/PanedW.h>#include <Xm/List.h>#include <Xm/Text.h>#include <Xm/Label.h>#include <Xm/ToggleB.h>}#include "audio.h"#include "popup.h"#include "gui.h"#include "string.h"#include "aflibFile.h"#include "aflibConfig.h"#include "aflibDateTime.h"#include "aflibEnvFile.h"#include "aflibAudioRecorder.h"extern voidpopup_configure_dialog(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs);extern voidpopup_play_dialog(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs);extern voidpopup_record_callback(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs);extern voidpopup_format_cb(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs);extern voidpopup_program_dialog(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs);extern voidpopup_exit_dialog(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs);extern voidpopup_play_file(   Widget w,   caddr_t client_data,   XmFileSelectionBoxCallbackStruct  *cbs);extern voidpopup_record_file(   Widget w,   caddr_t client_data,   XmFileSelectionBoxCallbackStruct  *cbs);extern voidpopup_cancel_file(   Widget w,   caddr_t client_data,   XmFileSelectionBoxCallbackStruct  *cbs);extern voidpromptCallback(   Widget w,   caddr_t client_data,   XmSelectionBoxCallbackStruct  *cbs);extern voidpopup_record_dialog(   Widget w);extern voidpopup_record_close(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs);extern voidpopup_record_edit(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs);extern voidpopup_record_add(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs);extern voidpopup_record_delete(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs);extern voidpopup_config_dialog(   Widget w);extern voidpopup_record_update_list();typedef struct _menu_item{   char         * label;   WidgetClass  * _class;   char           mnemonic;   char         * accelerator;   char         * accel_text;   void          (*callback)(Widget, void *, void *);   caddr_t        callback_data;   struct _menu_item  *subitem;} MenuItem;MenuItem items[] = {   { "Audio Player", &xmLabelGadgetClass, (char) 0, NULL,      NULL, NULL, NULL, NULL},   { "sep", &xmSeparatorGadgetClass, (char) 0, NULL,     NULL, NULL, NULL, NULL},   { "Configure...", &xmPushButtonGadgetClass, 'C', "Ctrl<Key>C",     "Ctrl+C", popup_configure_dialog, NULL, NULL},   { "Play...", &xmPushButtonGadgetClass, 'P', "Ctrl<Key>P",     "Ctrl+P", popup_play_dialog, NULL, NULL},   { "Record...", &xmPushButtonGadgetClass, 'R', "Ctrl<Key>R",     "Ctrl+R", popup_record_callback, NULL, NULL},   { "Program Record...", &xmPushButtonGadgetClass, 'V', "Ctrl<Key>V",     "Ctrl+V", popup_program_dialog, NULL, NULL},   { "sep1", &xmSeparatorGadgetClass, (char) 0, NULL,     NULL, NULL, NULL, NULL},   { "Exit", &xmPushButtonGadgetClass, 'E', "Ctrl<Key>E",     "Ctrl+E", popup_exit_dialog, NULL, NULL},   { NULL, NULL, (char) 0, NULL, NULL, NULL, NULL, NULL}};#define DEFAULT_DEVICE "/dev/audio"static Widget  _form = NULL;static Widget  list1;static Widget  _text1, _text2, _text3, _text4, _text5, _text6;static string  _record_file;static int     _channels = 1;static int     _samples_per_second = 22050;static int     _bytes_per_sample = 1;static string  _format_type;static int     _timer_record_mode = FALSE;static aflibConfig  _config;aflibAudioRecorder *  _recorder = NULL;voidpopup_configure_dialog(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs){   popup_device_dialog(_form);}voidpopup_play_dialog(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs){   Arg  args[10];   int  n;   static Widget dialog = 0;   XmString  str;   if (!dialog)   {      str = XmStringCreateSimple("Select File to Play");      n = 0;      XtSetArg(args[n], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); n++;      XtSetArg(args[n], XmNdialogTitle, str); n++;      dialog = XmCreateFileSelectionDialog(_form, "FileBox", args, n);      XtUnmanageChild(XmSelectionBoxGetChild(dialog, XmDIALOG_HELP_BUTTON));      XtAddCallback(dialog, XmNokCallback, popup_play_file, NULL);      XtAddCallback(dialog, XmNcancelCallback, popup_cancel_file, NULL);      XmStringFree(str);   }   XtManageChild(dialog);   XtPopup(XtParent(dialog), XtGrabNone);}voidpopup_record_callback(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs){   Arg  args[10];   int  n;   static Widget dialog = 0;   XmString  str;   if (!dialog)   {      str = XmStringCreateSimple("Select File to Record");      n = 0;      XtSetArg(args[n], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); n++;      XtSetArg(args[n], XmNdialogTitle, str); n++;      dialog = XmCreateFileSelectionDialog(_form, "FileBox", args, n);      XtUnmanageChild(XmSelectionBoxGetChild(dialog, XmDIALOG_HELP_BUTTON));      XtAddCallback(dialog, XmNokCallback, popup_record_file, NULL);      XtAddCallback(dialog, XmNcancelCallback, popup_cancel_file, NULL);      XmStringFree(str);   }   XtManageChild(dialog);   XtPopup(XtParent(dialog), XtGrabNone);}voidpopup_program_dialog(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs){   popup_record_dialog(_form);}voidpopup_exit_dialog(   Widget  w,   caddr_t client_data,   XmAnyCallbackStruct *cbs){   audio_stop();   exit(1);}voidpopup_play_file(   Widget w,   caddr_t client_data,   XmFileSelectionBoxCallbackStruct  *cbs){   char * file = NULL;   if (cbs)   {      if (!XmStringGetLtoR(cbs->value, XmSTRING_DEFAULT_CHARSET, &file))         return;      audio_play(file);      XtFree(file);   }   XtUnmanageChild(w);}voidpopup_record_file(   Widget w,   caddr_t client_data,   XmFileSelectionBoxCallbackStruct  *cbs){   char * file = NULL;   if (cbs)   {      if (!XmStringGetLtoR(cbs->value, XmSTRING_DEFAULT_CHARSET, &file))         return;      _record_file = file;      XtFree(file);   }   XtUnmanageChild(w);   popup_config_dialog(_form);}voidpopup_cancel_file(   Widget w,   caddr_t client_data,   XmFileSelectionBoxCallbackStruct  *cbs){   XtUnmanageChild(w);}Widgetpopup_build(   Widget  parent,   int     menu_type){   Widget  menu, widget;   int i;   XmString str;   _form = parent;   menu = XmCreatePopupMenu(parent, "_popup", NULL, 0);   for (i = 0; items[i].label != NULL; i++)   {      widget = XtVaCreateManagedWidget(items[i].label,         *items[i]._class, menu,          NULL);      if (items[i].mnemonic)      {         XtVaSetValues(widget, XmNmnemonic, items[i].mnemonic, NULL);      }      if (items[i].accelerator)      {         str = XmStringCreateSimple(items[i].accel_text);         XtVaSetValues(widget,            XmNaccelerator, items[i].accelerator,            XmNacceleratorText, str,            NULL);         XmStringFree(str);      }      if (items[i].callback)      {         XtAddCallback(widget, XmNactivateCallback,            items[i].callback, items[i].callback_data);      }   }   return (menu);}voidpopup_device_dialog(   Widget w){   Arg   args[10];   int   n;   Widget  widget, dead_widget, text_widget;   XmString  str, str1;   string value;   string key(PORT_KEY);   aflibEnvFile env(ENV_FILE);   str = XmStringCreateLtoR("Please enter the audio device now.\n\For linux you should use /dev/audio for most cases.",      XmSTRING_DEFAULT_CHARSET);   env.readValueFromFile(key, value);   str1 = XmStringCreateSimple("Configure");      /* Create dialog */   n = 0;   XtSetArg(args[n], XmNselectionLabelString, str); n++;   XtSetArg(args[n], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL); n++;   XtSetArg(args[n], XmNdialogTitle, str1); n++;   widget = XmCreatePromptDialog(w, "Configure", args, n);   XtAddCallback(widget, XmNokCallback, promptCallback, NULL);   /* Get the text widget and insert a default value */   text_widget = XmSelectionBoxGetChild(widget, XmDIALOG_TEXT);   n = 0;   XtSetArg(args[n], XmNvalue, value.c_str()); n++;   XtSetValues(text_widget, args, n);   /* get rid of two buttons. We only want OK button */   dead_widget = XmSelectionBoxGetChild(widget, XmDIALOG_HELP_BUTTON);   XtUnmanageChild(dead_widget);   dead_widget = XmSelectionBoxGetChild(widget, XmDIALOG_CANCEL_BUTTON);   XtUnmanageChild(dead_widget);   XtManageChild(widget);   XmStringFree(str);   XmStringFree(str1);}voidpromptCallback(   Widget w,   caddr_t client_data,   XmSelectionBoxCallbackStruct  *cbs){   char * str;   string key, device_str;   /* get the device value entered in the prompt dialog */   if (!XmStringGetLtoR(cbs->value, XmSTRING_DEFAULT_CHARSET, &str))   {      return;   }   audio_device(str);   key = PORT_KEY;   device_str = str;   aflibEnvFile env(ENV_FILE);   env.writeValueToFile(key, device_str);   XtFree(str);}voidpopup_record_dialog(   Widget w){   Widget shell, pane, form1, row;   Widget form2, close, edit, delete1, add;   Widget label1, label2, label3, label4, label5, label6;   Widget label11, label12, label13, label14, label15, label16;   Widget file;   Widget place1, place2, place3, place4, place5;   Arg   args[10];   int   n;   n = 0;   XtSetArg(args[n], XmNdeleteResponse, XmDESTROY); n++;   shell = XmCreateDialogShell(w, "Programmed Record", args, n);   n = 0;   pane = XmCreatePanedWindow(shell, "Record Pane", args, n);   n = 0;   form1 = XmCreateForm(pane, "Form1", args, n);   n = 0;   XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++;   XtSetArg(args[n], XmNpacking, XmPACK_COLUMN); n++;   XtSetArg(args[n], XmNnumColumns, 4); n++;   row = XmCreateRowColumn(form1, "RowCol1", args, n);   n = 0;   label1 = XmCreateLabel(row, "Start Date", args, n);   XtManageChild(label1);   n = 0;   label2 = XmCreateLabel(row, "Start Time", args, n);   XtManageChild(label2);   n = 0;   label3 = XmCreateLabel(row, "Stop Date", args, n);   XtManageChild(label3);   n = 0;   label4 = XmCreateLabel(row, "Stop Time", args, n);   XtManageChild(label4);   n = 0;   label5 = XmCreateLabel(row, "Each Limit", args, n);   XtManageChild(label5);   n = 0;   label6 = XmCreateLabel(row, "Max Limit", args, n);   XtManageChild(label6);   n = 0;   label11 = XmCreateLabel(row, "(MM/DD/YYYY)", args, n);   XtManageChild(label11);   n = 0;   label12 = XmCreateLabel(row, "(HH:MM:SS)", args, n);   XtManageChild(label12);   n = 0;   label13 = XmCreateLabel(row, "(MM/DD/YYYY)", args, n);   XtManageChild(label13);   n = 0;   label14 = XmCreateLabel(row, "(HH:MM:SS)", args, n);   XtManageChild(label14);   n = 0;   label15 = XmCreateLabel(row, "(Bytes)", args, n);   XtManageChild(label15);   n = 0;   label16 = XmCreateLabel(row, "(Bytes)", args, n);   XtManageChild(label16);   n = 0;   XtSetArg(args[n], XmNcolumns, 10); n++;   XtSetArg(args[n], XmNmarginWidth, 2); n++;   _text1 = XmCreateText(row, "Start Date", args, n);   XtManageChild(_text1);   n = 0;   XtSetArg(args[n], XmNcolumns, 10); n++;   XtSetArg(args[n], XmNmarginWidth, 2); n++;

⌨️ 快捷键说明

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