diff options
Diffstat (limited to 'TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/ui.cpp')
-rw-r--r-- | TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/ui.cpp | 1001 |
1 files changed, 1001 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/ui.cpp b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/ui.cpp new file mode 100644 index 00000000000..165ce3158c8 --- /dev/null +++ b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/ui.cpp @@ -0,0 +1,1001 @@ +/* $Id$ */ + +/* Copyright (c) 1994 The Geometry Center; University of Minnesota + 1300 South Second Street; Minneapolis, MN 55454, USA; + +This file is free software; you can redistribute it and/or modify it only +under the the terms of the GNU GENERAL PUBLIC LICENSE which should be +included along with this file. This software may be obtained via anonymous +ftp from geom.umn.edu; email: software@geom.umn.edu. */ + +/* Author: Daeron Meyer */ + +/* This software is modified on January 15, 1995 by: + * + * Shanwei Cen + * Department of Computer Science and Engineering + * email: scen@cse.ogi.edu + */ + +//#include "ace/OS.h" +#include "ace/Log_Msg.h" +/* include <stdio.h> +include <errno.h> +include <stdlib.h> +include <sys/types.h> +include <sys/uio.h> +include <unistd.h> */ +#include <X11/IntrinsicP.h> +#include <Xm/DialogS.h> +#include "mpeg_mib/mibload.h" +#include "interface/fb.xbm" +#include "interface/play.xbm" +#include "interface/step.xbm" +#include "interface/stop.xbm" +#include "interface/loop.xbm" +#include "interface/ff.xbm" +#include "interface/MainWindow.mib" +#include "interface/Info.mib" +#include "video.h" + +#include "include/common.h" +#include "newproto.h" +#include "global.h" + + +ACE_RCSID(mpeg_client, ui, "$Id$") + +int cmdBusy = 0; + +extern char infomessage[]; + +/*****************************************************************************/ + +/* Private Variables and Methods */ + +static int playtag = 0; +static int cmdSocket = -1; + +/* Intrinsics Application Context */ +static XtAppContext App; +static Window monitorwindow = (int)0; +static mib_Widget *mainload, *infoload; +static Widget shell = (int)0, infoshell = (int)0, + parashell = (int)0, progshell = (int)0, + fileshell = (int)0; +static Widget frametext= (int)0; +static Widget volumescale = (int)0, balancescale = (int)0, + speedscale = (int)0, positionscale = (int)0; +static int frameshown = 0; + +#define MINX 500 +#define MINY 360 + +static Window displaywin = (int)0; +static int privcolormap = 0; + +static void exit_callback(Widget, XtPointer, XmAnyCallbackStruct *); +static void info_callback(Widget, XtPointer, XmAnyCallbackStruct *); +static void para_callback(Widget, XtPointer, XmAnyCallbackStruct *); +static void prog_callback(Widget, XtPointer, XmAnyCallbackStruct *); +static void file_callback(Widget, XtPointer, XmAnyCallbackStruct *); + +static void loopchange_callback(Widget, XtPointer, XmAnyCallbackStruct *); +static void normal_callback(Widget, XtPointer, XmAnyCallbackStruct *); +static void fb_callback(Widget, XtPointer, XmAnyCallbackStruct *); +static void stop_callback(Widget, XtPointer, XmAnyCallbackStruct *); +static void ff_callback(Widget, XtPointer, XmAnyCallbackStruct *); +static void step_callback(Widget, XtPointer, XmAnyCallbackStruct *); +static void play_callback(Widget, XtPointer, XmAnyCallbackStruct *); + +static void volume_callback(Widget, XtPointer, XmAnyCallbackStruct *); +static void balance_callback(Widget, XtPointer, XmAnyCallbackStruct *); +static void speed_callback(Widget, XtPointer, XmAnyCallbackStruct *); +static void position_callback(Widget, XtPointer, XmAnyCallbackStruct *); + +static void cmdSocket_callback(Widget, XtPointer, XmAnyCallbackStruct *); + +static void monitor_expose(Widget, XtPointer, XmDrawingAreaCallbackStruct *); + +static void infoclose_callback(Widget, XtPointer, XmAnyCallbackStruct *); + +static void CmdWrite(char * buf, int size) +{ + // ACE_DEBUG ((LM_DEBUG,"(%P|%t)before writing cmd\n")); + while (ACE_OS::write(cmdSocket, (buf), (size)) == -1) + { + if (errno == EINTR) continue; + ACE_OS::perror ("UI write to cmdSocket"); + ACE_OS::exit (1); + } + // ACE_DEBUG ((LM_DEBUG,"(%P|%t)After writing cmd\n")); +} + +/***************************************************************************** + + UICreate: Create/load in a motif interface. + + *****************************************************************************/ + +static void UICreate() +{ + + Widget toplevel; + + Widget mainwindow, + temp; + + Pixel fg, bg; + Pixmap button_pix; + + XmFontList fontlist; + XFontStruct * font; + + Arg args[20]; + int n, depth; + + static String fallbacks[] = { + "*Foreground: black", + "*BorderWidth: 0", + "*Background: lavender", + "*XmToggleButton.selectColor: yellow", + "*XmToggleButton.indicatorSize: 16", + "*XmToggleButtonGadget.selectColor: yellow", + "*XmToggleButtonGadget.indicatorSize: 16", + "*fontList: -adobe-helvetica-medium-r-normal--14-*-*-*-p-*-iso8859-1", + "*XmText*fontList: -adobe-courier-medium-r-normal--12-*-*-*-m-70-iso8859-1", + 0 + }; + +/*****************************************************************************/ + + n = 0; + + toplevel = XtAppInitialize(&App, "virtual_vcr", 0, 0, &argc_share, + argv_share, fallbacks, args, n); + + display = XtDisplay(toplevel); + +/******************************************************************************/ + + n = 0; + XtSetArg(args[n], XmNtitle, "TAO Mpeg Player"); n++; + XtSetArg(args[n], XmNdeleteResponse, XmDO_NOTHING);n++; + XtSetArg(args[n], XmNkeyboardFocusPolicy, XmPOINTER); n++; + XtSetArg(args[n], XmNwidth, MINX); n++; + XtSetArg(args[n], XmNminWidth, MINX); n++; + XtSetArg(args[n], XmNheight, MINY); n++; + XtSetArg(args[n], XmNminHeight, MINY); n++; + + shell = XtAppCreateShell("TAO Mpeg Player", "virtual_vcr", + topLevelShellWidgetClass, display, args, n); + +/*****************************************************************************/ + + n = 0; + XtSetArg(args[n], XmNtitle, "TAO Mpeg Player"); n++; + + mainwindow = XmCreateForm(shell, "MainForm", args, n); + XtManageChild(mainwindow); + { + XmStringCharSet cset = XmSTRING_DEFAULT_CHARSET; + XmString titleString; + + font = XLoadQueryFont (XtDisplay (shell), "courB14"); + fontlist = XmStringCreateFontList (font, cset); + + + titleString = XmStringCreateLtoR ("Balance", cset); + n = 0; + XtSetArg (args[n], XmNfontList, fontlist); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNtitleString, titleString); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNmaximum, 100); n++; + XtSetArg (args[n], XmNvalue, 50); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++; + XtSetArg (args[n], XmNscaleHeight, 17);n++; + XtSetArg (args[n], XmNscaleWidth, 100);n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 4);n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 8);n++; + balancescale = XmCreateScale(mainwindow, "scale", args, n); + XmStringFree (titleString); + XtManageChild (balancescale); + XtAddCallback (balancescale, XmNvalueChangedCallback, (XtCallbackProc)balance_callback, 0); + XtAddCallback (balancescale, XmNdragCallback, (XtCallbackProc)balance_callback, 0); + + + titleString = XmStringCreateLtoR ("Volume", cset); + n = 0; + XtSetArg (args[n], XmNfontList, fontlist); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNtitleString, titleString); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNmaximum, 100); n++; + XtSetArg (args[n], XmNvalue, DEFAULT_volume); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++; + XtSetArg (args[n], XmNscaleHeight, 17);n++; + XtSetArg (args[n], XmNscaleWidth, 100);n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 4);n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 128);n++; + volumescale = XmCreateScale(mainwindow, "scale", args, n); + XmStringFree (titleString); + XtManageChild (volumescale); + XtAddCallback (volumescale, XmNvalueChangedCallback, (XtCallbackProc)volume_callback, 0); + XtAddCallback (volumescale, XmNdragCallback, (XtCallbackProc)volume_callback, 0); + + + titleString = XmStringCreateLtoR ("Play Speed", cset); + n = 0; + XtSetArg (args[n], XmNfontList, fontlist); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNtitleString, titleString); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNmaximum, 100); n++; + XtSetArg (args[n], XmNvalue, 50); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++; + XtSetArg (args[n], XmNscaleHeight, 17);n++; + XtSetArg (args[n], XmNscaleWidth, 100);n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 4);n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 248);n++; + speedscale = XmCreateScale(mainwindow, "scale", args, n); + XmStringFree (titleString); + XtManageChild (speedscale); + XtAddCallback (speedscale, XmNvalueChangedCallback, (XtCallbackProc)speed_callback, 0); + XtAddCallback (speedscale, XmNdragCallback, (XtCallbackProc)speed_callback, 0); + + + titleString = XmStringCreateLtoR ("Position", cset); + n = 0; + XtSetArg (args[n], XmNfontList, fontlist); n++; + XtSetArg (args[n], XmNshowValue, True); n++; + XtSetArg (args[n], XmNtitleString, titleString); n++; + XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++; + XtSetArg (args[n], XmNmaximum, POSITION_RANGE); n++; + XtSetArg (args[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++; + XtSetArg (args[n], XmNscaleHeight, 17);n++; + XtSetArg (args[n], XmNscaleWidth, 100);n++; + XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNbottomOffset, 4);n++; + XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++; + XtSetArg (args[n], XmNleftOffset, 368);n++; + positionscale = XmCreateScale(mainwindow, "scale", args, n); + XmStringFree (titleString); + XtManageChild (positionscale); + XtAddCallback (positionscale, XmNvalueChangedCallback, (XtCallbackProc)position_callback, 0); + XtAddCallback (positionscale, XmNdragCallback, (XtCallbackProc)position_callback, 0); + + } + + mainload = mib_load_interface(mainwindow, MainMib, MI_FROMSTRING); + XtSetMappedWhenManaged(shell, False); + XtRealizeWidget(shell); + + frametext = mib_find_name(mainload, "TitleText")->me; +/* XtVaSetValues(frametext, + XmNfontList, fontlist, + XmNcursorPositionVisible, False, + XmNeditable, False, + NULL); +*/ + temp = mib_find_name(mainload, "Monitor")->me; + XtAddCallback(temp, XmNexposeCallback, + (XtCallbackProc) monitor_expose, (XtPointer) 0); + XtVaSetValues(temp, XmNforeground, + BlackPixel(display, DefaultScreen(display)), + XmNbackground, + BlackPixel(display, DefaultScreen(display)), + 0); + monitorwindow = XtWindow(temp); + + temp = mib_find_name(mainload, "Info")->me; + XtAddCallback(temp, XmNactivateCallback, (XtCallbackProc) info_callback, + (XtPointer) 0); + + temp = mib_find_name(mainload, "Para")->me; + XtAddCallback(temp, XmNactivateCallback, (XtCallbackProc) para_callback, + (XtPointer) 0); + + temp = mib_find_name(mainload, "Prog")->me; + XtAddCallback(temp, XmNactivateCallback, (XtCallbackProc) prog_callback, + (XtPointer) 0); + + temp = mib_find_name(mainload, "File")->me; + XtAddCallback(temp, XmNactivateCallback, (XtCallbackProc) file_callback, + (XtPointer) 0); + + temp = mib_find_name(mainload, "Exit")->me; + XtAddCallback(temp, XmNactivateCallback, (XtCallbackProc) exit_callback, + (XtPointer) 0); + + temp = mib_find_name(mainload, "Loop")->me; + XtVaGetValues(temp, XmNforeground, &fg, + XmNbackground, &bg, XmNdepth, &depth, NULL); + button_pix = XCreatePixmapFromBitmapData(display, DefaultRootWindow(display), + (char *)loop_bits, loop_width, loop_height, fg, bg, depth); + /* + { + int i; + for (i = 0; i < sizeof(loop_bits); i++) + loop_bits[i] = ~loop_bits[i]; + } + */ + XtVaSetValues(temp, + XmNshadowThickness, 2, + + XmNwidth, 45, + XmNheight, 28, + + XmNindicatorType, XmN_OF_MANY, + + XmNindicatorOn, False, + + XmNfillOnSelect, True, + XmNlabelType, XmPIXMAP, + XmNhighlightThickness, 0, + XmNrubberPositioning, False, + XmNlabelPixmap, button_pix, + XmNselectPixmap, button_pix, +/* + XmNselectPixmap, (XCreatePixmapFromBitmapData(display, DefaultRootWindow(display), + (char *)loop_bits, loop_width, loop_height, fg, bg, depth)), +*/ + 0); + XtAddCallback(temp, XmNvalueChangedCallback, (XtCallbackProc) loopchange_callback, + (XtPointer) 0); +/* + XtAddCallback(temp, XmNarmCallback, (XtCallbackProc) looparm_callback, + (XtPointer) 0); + XtAddCallback(temp, XmNdisarmCallback, (XtCallbackProc) loopdisarm_callback, + (XtPointer) 0); +*/ + temp = mib_find_name(mainload, "Normal")->me; + XtAddCallback(temp, XmNactivateCallback, (XtCallbackProc) normal_callback, + (XtPointer) 0); + + temp = mib_find_name(mainload, "Rewind")->me; + XtVaGetValues(temp, XmNforeground, &fg, + XmNbackground, &bg, XmNdepth, &depth, NULL); + button_pix = XCreatePixmapFromBitmapData(display, DefaultRootWindow(display), + (char *)fb_bits, fb_width, fb_height, fg, bg, depth); + XtVaSetValues(temp, XmNlabelType, XmPIXMAP, + XmNlabelPixmap, button_pix, 0); + XtAddCallback(temp, XmNactivateCallback, (XtCallbackProc) fb_callback, + (XtPointer) 0); + + temp = mib_find_name(mainload, "Stop")->me; + XtVaGetValues(temp, XmNforeground, &fg, + XmNbackground, &bg, XmNdepth, &depth, NULL); + button_pix = XCreatePixmapFromBitmapData(display, DefaultRootWindow(display), + (char *)stop_bits, stop_width, stop_height, fg, bg, depth); + XtVaSetValues(temp, XmNlabelType, XmPIXMAP, + XmNlabelPixmap, button_pix, 0); + XtAddCallback(temp, XmNactivateCallback, (XtCallbackProc) stop_callback, + (XtPointer) 0); + + temp = mib_find_name(mainload, "FF")->me; + XtVaGetValues(temp, XmNforeground, &fg, + XmNbackground, &bg, XmNdepth, &depth, NULL); + button_pix = XCreatePixmapFromBitmapData(display, DefaultRootWindow(display), + (char *)ff_bits, ff_width, ff_height, fg, bg, depth); + XtVaSetValues(temp, XmNlabelType, XmPIXMAP, + XmNlabelPixmap, button_pix, 0); + XtAddCallback(temp, XmNactivateCallback, (XtCallbackProc) ff_callback, + (XtPointer) 0); + + temp = mib_find_name(mainload, "Step")->me; + XtVaGetValues(temp, XmNforeground, &fg, + XmNbackground, &bg, XmNdepth, &depth, NULL); + button_pix = XCreatePixmapFromBitmapData(display, DefaultRootWindow(display), + (char *)step_bits, step_width, step_height, fg, bg, depth); + XtVaSetValues(temp, XmNlabelType, XmPIXMAP, + XmNlabelPixmap, button_pix, 0); + XtAddCallback(temp, XmNactivateCallback, (XtCallbackProc) step_callback, + (XtPointer) 0); + + temp = mib_find_name(mainload, "Play")->me; + XtVaGetValues(temp, XmNforeground, &fg, + XmNbackground, &bg, XmNdepth, &depth, NULL); + button_pix = XCreatePixmapFromBitmapData(display, DefaultRootWindow(display), + (char *)play_bits, play_width, play_height, fg, bg, depth); + XtVaSetValues(temp, XmNlabelType, XmPIXMAP, + XmNlabelPixmap, button_pix, NULL); + XtAddCallback(temp, XmNactivateCallback, (XtCallbackProc) play_callback, + (XtPointer) 0); + +/*****************************************************************************/ + + n = 0; + XtSetArg(args[n], XmNtitle, "Virtual VCR Infomation"); n++; + XtSetArg(args[n], XmNdeleteResponse, XmDO_NOTHING);n++; + XtSetArg(args[n], XmNkeyboardFocusPolicy, XmPOINTER); n++; + XtSetArg(args[n], XmNwidth, MINX); n++; + XtSetArg(args[n], XmNheight, MINY); n++; + /* + infoshell = XtAppCreateShell("Info", "virtual_vcr", + topLevelShellWidgetClass, display, args, n); + */ + temp = XmCreateDialogShell(shell, "virtual_vcr", args, n); + n = 0; + XtSetArg(args[n], XmNtitle, "Virtual VCR Infomation"); n++; + + infoshell = XmCreateForm(temp, "virtual_vcr", args, n); + infoload = mib_load_interface(infoshell, InfoMib, + MI_FROMSTRING); + + temp = mib_find_name(infoload, "Dismiss")->me; + XtAddCallback(temp, XmNactivateCallback, (XtCallbackProc) infoclose_callback, + (XtPointer) 0); + + temp = mib_find_name(infoload, "TextBig")->me; + XtVaSetValues(temp, XmNcursorPositionVisible, False, + XmNeditable, False, 0); + XmTextSetString(temp, infomessage); + +// XmFontListFree (fontlist); + + parashell = CreateParameterWindow(shell); + + progshell = CreateProgramWindow(shell, cmdSocket, &playtag, frametext); + + fileshell = CreateFileWindow(shell, cmdSocket, &playtag, frametext); + +} + +/*****************************************************************************/ + +Window MonitorWindow() +{ + return monitorwindow; +} + +/*****************************************************************************/ + +void UISetColormap() +{ + privcolormap = 1; +} + +/*****************************************************************************/ + +void UISetwin(Window win) +{ + displaywin = win; +} + +/*****************************************************************************/ + +void UISetFrame() +{ + char framestr[100]; + + sprintf(framestr, "%d of %d", shared->currentDisplay, shared->totalFrames); + XmTextFieldSetString(frametext, framestr); +} + +/*****************************************************************************/ + +void UIMinsize(int x, int y) +{ + int minx; + int miny; + int winx; + int winy; + + winx = x; + winy = y; + + x += 30; + y += 180; + + if (x < 450) x = MINX; + if (y < 350) y = MINY; + + minx = x; miny = y; + + if (privcolormap) + { + XtVaSetValues(shell, XmNcolormap, cmap, 0); + } + if (shell) + { + XtResizeWidget(shell, (Dimension)minx, (Dimension)miny, (Dimension)0); + XtVaSetValues(shell, + XmNminWidth, MINX, + XmNminHeight, MINY, + XmNmaxWidth, minx, + XmNmaxHeight, miny, + 0); + + XtMapWidget(shell); /* Map the shell now to avoid disappearing buttons! */ + if (displaywin) + { + x = winx; y = winy; + winx = minx - 30; winy = miny - 180; + XMoveWindow(display, displaywin, (winx - x)/2, (winy - y)/2+12); + } + } +} + +/***************************************************************************** + + From here on we have private methods: + + *****************************************************************************/ + +static void exit_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + ACE_OS::exit (0); +} + + +static void info_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + /* + XtRealizeWidget(infoshell); + */ + XtManageChild(infoshell); +} + +static void infoclose_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + /* + XtUnrealizeWidget(infoshell); + */ + XtUnmanageChild(infoshell); +} + +static void para_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + + XtRealizeWidget(parashell); + /* + XtManageChild(parashell); + */ +} + +static void prog_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + + XtRealizeWidget(progshell); + /* + XtManageChild(progshell); + */ +} + +static void file_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + /* + XtRealizeWidget(fileshell); + */ + XtManageChild (fileshell); +} + +/*****************************************************************************/ + +static void loopchange_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + static int loop = 0; + loop = !loop; + if (playtag) + { + char cmd = loop ? CmdLOOPenable : CmdLOOPdisable; + CmdWrite(&cmd, 1); + } + else + beep(); +} + +static void normal_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +/* set speed bar, suppose speed_callback should be called automatically */ +{ + char cmd = CmdSPEED; + int value = 50; + CmdWrite(&cmd, 1); + CmdWrite((char *)&value, 4); + // ACE_DEBUG ((LM_DEBUG,"(%P|%t) Reached in %s line %d\n",__FILE__,__LINE__)); + XmScaleSetValue(speedscale, 50); +} + +static void fb_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + if (playtag && !cmdBusy) + { + char cmd = CmdFB; + cmdBusy = 1; + CmdWrite(&cmd, 1); + } + else + beep(); +} + +static void stop_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + if (playtag && !cmdBusy) + { + char cmd = CmdSTOP; + cmdBusy = 1; + CmdWrite(&cmd, 1); + } + else + beep(); +} + +static void ff_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + if (playtag && !cmdBusy) + { + char cmd = CmdFF; + cmdBusy = 1; + CmdWrite(&cmd, 1); + } + else + beep(); +} + + +static void step_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + if (playtag && !cmdBusy) + { + char cmd = CmdSTEP; + cmdBusy = 1; + CmdWrite(&cmd, 1); + } + else { + /* + beep(); + */ + } +} + +static void play_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + ACE_DEBUG ((LM_DEBUG,"(%P)play_callback:cmdbusy= %d,playtag=%d\n",cmdBusy,playtag)); + if (playtag && !cmdBusy) + { + char cmd = CmdPLAY; + cmdBusy = 1; + CmdWrite(&cmd, 1); + } + else + beep(); +} + +static void volume_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + char cmd; + XmScaleCallbackStruct * call_value = (XmScaleCallbackStruct *) cbs; + int value = call_value ->value; + + switch (call_value->reason) + { + case XmCR_VALUE_CHANGED: + case XmCR_DRAG: + cmd = CmdVOLUME; + CmdWrite(&cmd, 1); + CmdWrite((char *)&value, 4); + break; + default: + fprintf(stderr, "Hit the default, incorrect reason sent for scale!!\n"); + break; + } +} + +static void speed_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + char cmd; + XmScaleCallbackStruct * call_value = (XmScaleCallbackStruct *) cbs; + int value = call_value ->value; + + switch (call_value->reason) + { + case XmCR_VALUE_CHANGED: + case XmCR_DRAG: + cmd = CmdSPEED; + CmdWrite(&cmd, 1); + CmdWrite((char *)&value, 4); + break; + default: + ACE_OS::fprintf(stderr, "Hit the default, incorrect reason sent for scale!!\n"); + break; + } +} + +static void balance_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + char cmd; + XmScaleCallbackStruct * call_value = (XmScaleCallbackStruct *) cbs; + int value = call_value ->value; + + switch (call_value->reason) + { + case XmCR_VALUE_CHANGED: + case XmCR_DRAG: + cmd = CmdBALANCE; + CmdWrite(&cmd, 1); + CmdWrite((char *)&value, 4); + break; + default: + ACE_OS::fprintf(stderr, "Hit the default, incorrect reason sent for scale!!\n"); + break; + } +} + +static void position_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + char cmd; + XmScaleCallbackStruct * call_value = (XmScaleCallbackStruct *) cbs; + int value = call_value ->value; + + switch (call_value->reason) + { + case XmCR_VALUE_CHANGED: + if (playtag && !cmdBusy) + { + cmdBusy = 1; + cmd = CmdPOSITIONrelease; + CmdWrite(&cmd, 1); + CmdWrite((char *)&value, 4); + } + else + { + // ACE_DEBUG ((LM_DEBUG,"(%P|%t) Reached in %s line %d\n",__FILE__,__LINE__)); + XmScaleSetValue(positionscale, shared->locationPosition); + /* + fprintf(stderr, "UI: shared->cmd = %d\n", shared->cmd); + if (shared->cmd != CmdPOSITION) + beep(); + */ + } + + break; + case XmCR_DRAG: + if (playtag && !cmdBusy) + { + cmdBusy = 1; + cmd = CmdPOSITION; + CmdWrite(&cmd, 1); + CmdWrite((char *)&value, 4); + } + break; + default: + ACE_OS::fprintf(stderr, "Hit the default, incorrect reason sent for scale!!\n"); + break; + } +} + +static void cmdSocket_callback(Widget w, XtPointer data, XmAnyCallbackStruct *cbs) +{ + char cmd; +/* + fprintf(stderr, "UI in CmdSocket_callback.\n"); +*/ + while (read(cmdSocket, &cmd, 1) <= 0) + { + if (errno == EINTR) return; + ACE_OS::perror ("UI by callback read from CmdSocket"); + ACE_OS::exit (1); + } + // ACE_DEBUG ((LM_DEBUG,"(%P)cmdSocket_callback:cmd= %d",cmd)); + if (cmd == CmdDONE || cmd == CmdFAIL) + { + cmdBusy = 0; + if (shared->cmd == CmdINIT) + { + if (cmd == CmdDONE) + { + char cmd = CmdSPEED; + int value = 50; + // ACE_DEBUG ((LM_DEBUG,"(%P|%t) Reached in %s line %d\n",__FILE__,__LINE__)); + XmScaleSetValue(speedscale, 50); + // ACE_DEBUG ((LM_DEBUG,"(%P|%t) Reached in %s line %d\n",__FILE__,__LINE__)); + XmScaleSetValue(positionscale, 0); + CmdWrite(&cmd, 1); + CmdWrite((char *)&value, 4); + /* + fprintf(stderr, "UI: VCR program successfully initialized.\n"); + */ + playtag = 1; + } + else + { + ACE_OS::fprintf(stderr, "UI: VCR program initialization failed.\n"); + playtag = 0; + } + } + else { + /* + fprintf(stderr, "UI: cmd-%d finished successfully.\n", shared->cmd); + */ + } + /* + UISetFrame(); + */ + } + else + { + static int prepos = 0; + int curpos; + char * ptr; + + if (cmd == CmdVPdisplayFrame) { + ACE_OS::read (cmdSocket, (char *)&ptr, sizeof(char *)); + } + VPcommand((int)cmd, ptr); + + if (cmd == CmdVPaudioPosition) + { + curpos = (shared->nextSample * 100) / shared->totalSamples; + if (shared->cmd == CmdPLAY && + (curpos <= prepos - 1 || curpos >= prepos + 1)) + { + // ACE_DEBUG ((LM_DEBUG,"(%P|%t) Reached in %s line %d,positionscale = %d,curpos = %d\n", + // __FILE__,__LINE__,positionscale,curpos)); + XmScaleSetValue(positionscale, curpos); + prepos = curpos; + } + } + else if (cmd == CmdVPdisplayFrame && shared->totalFrames) + { + curpos = (shared->currentDisplay * 100) / shared->totalFrames; + if ((shared->cmd == CmdSTEP || shared->cmd == CmdPLAY || + shared->cmd == CmdFF || shared->cmd == CmdFB) && + (curpos <= prepos - 1 || curpos >= prepos + 1)) + { + // ACE_DEBUG ((LM_DEBUG,"(%P|%t) Reached in %s line %d\n",__FILE__,__LINE__)); + XmScaleSetValue(positionscale, curpos); + prepos = curpos; + } + } + } +} + +static void monitor_expose(Widget w, XtPointer data, + XmDrawingAreaCallbackStruct *cbs) +{ + VPexpose(); +} + +#define BUFSIZE 256 + +void UIprocess(int cmdSock) +{ + char *title, *vh, *vf, *vb, *ah, *af, *ab; + int i; + cmdSocket = cmdSock; + UICreate(); + + VPinitWindow(shell, monitorwindow, cmdSock); + XtAppAddInput(App, cmdSock, (XtPointer)XtInputReadMask, + (XtInputCallbackProc)cmdSocket_callback, 0); + + title = vh = vf = vb = ah = af = ab = 0; + + for (i = 1; i < argc_share; i++) { + if (ACE_OS::strcmp (argv_share[i], "-v") == 0) { + if (argc_share > i + 1) { + i ++; + vh = argv_share[i]; + cerr << "vh = " << vh << endl; + } + else break; + } + else if (ACE_OS::strcmp (argv_share[i], "-a") == 0) { + if (argc_share > i + 1) { + i ++; + ah = argv_share[i]; + cerr << "ah = " << ah << endl; + } + else break; + } + else if (ACE_OS::strcmp (argv_share[i], "-p") == 0) { + if (argc_share > i + 1) { + i ++; + title = argv_share[i]; + } + } + } + + if (title != 0) { /* the init program is supplied by -l */ + cerr << "title is not null \n"; + FILE * fp; + char buf[PATH_SIZE]; + char vh[PATH_SIZE]; + char vf[PATH_SIZE]; + char ah[PATH_SIZE]; + char af[PATH_SIZE]; + + get_full_path(title, buf, 256); + fp = fopen(buf, "r"); + if (fp != 0) { + if ((!feof(fp)) && fgets(buf, PATH_SIZE, fp) != 0) { + buf[strlen(buf)-1] = 0; + } + else buf[0] = 0; + if ((!feof(fp)) && fgets(vh, PATH_SIZE, fp) != 0) { + vh[strlen(vh)-1] = 0; + } + else vh[0] = 0; + if ((!feof(fp)) && fgets(vf, PATH_SIZE, fp) != 0) { + vf[strlen(vf)-1] = 0; + } + else vf[0] = 0; + if ((!feof(fp)) && fgets(ah, PATH_SIZE, fp) != 0) { + ah[strlen(ah)-1] = 0; + } + else ah[0] = 0; + if ((!feof(fp)) && fgets(af, PATH_SIZE, fp) != 0) { + af[strlen(af)-1] = 0; + } + else af[0] = 0; + + fclose(fp); + Fprintf(stderr, "Init program: title %s, vh %s, vf %s, ah %s, af %s\n", + buf, vh, vf, ah, af); + StartProgram(buf, vh, vf, ah, af); + } + } + else if (vh != 0 || ah != 0) {/* init program supplied by -v and -a */ + char *ptr; + + /* form the title */ + if (vh != 0) { + title = (char *)ACE_OS::malloc(strlen(vh) + 1); + if (title != 0) { + strcpy(title, vh); + } + } + else { + title = (char *)ACE_OS::malloc(strlen(ah) + 1); + if (title != 0) { + strcpy(title, ah); + } + } + if (title == 0) { + title = "The program from the command line"; + } + + /* generate vh and vf */ + if (vh != 0) { + if ((ptr = strchr(vh, ':')) != 0) { + * ptr = 0; + vf = ptr + 1; + } + else { + vf = vh; + vh = ""; + } + } + else vh = vf = ""; + + /* generate ah and af */ + if (ah != 0) { + if ((ptr = strchr(ah, ':')) != 0) { + * ptr = 0; + af = ptr + 1; + } + else { + af = ah; + ah = ""; + } + } + else ah = af = ""; + + ACE_OS::fprintf(stderr, "Init program: title %s, vh %s, vf %s, ah %s, af %s\n", + title, vh, vf, ah, af); + StartProgram(title, vh, vf, ah, af); + ACE_OS::free (title); + if (ab != 0) ACE_OS::free (ab); + if (vb != 0) ACE_OS::free (vb); + } + + XtAppMainLoop(App); +} + |