home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (C) 1994, Silicon Graphics, Inc.
- * All Rights Reserved.
- *
- * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
- * the contents of this file may not be disclosed to third parties, copied or
- * duplicated in any form, in whole or in part, without the prior written
- * permission of Silicon Graphics, Inc.
- *
- * RESTRICTED RIGHTS LEGEND:
- * Use, duplication or disclosure by the Government is subject to restrictions
- * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
- * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
- * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
- * rights reserved under the Copyright Laws of the United States.
- */
- #include "compressPanel.h"
- #include <Xm/Form.h>
- #include <Xm/Text.h>
- #include <Xm/Label.h>
- #include <string.h>
- #include <malloc.h>
- #include <stdio.h>
-
- int CompressPanel::_currentAlg = 0;
-
- CompressPanel::CompressPanel(const char *name, Widget parent) : VkComponent(name)
- {
- int i,j,n,*clBuffer;
- Arg args[12];
- XmString ptr;
- _baseWidget = XmCreateForm(parent, _name, NULL,0);
- installDestroyHandler();
- _filename = NULL;
- _bufferLength = clQueryAlgorithms(CL_VIDEO, NULL, 0);
- clBuffer = new int[_bufferLength];
- clQueryAlgorithms(CL_VIDEO, clBuffer, _bufferLength);
- _nAlgs = 0;
- #ifdef QT
- _nAlgs = 2;
- #endif
- for(i=0; i<_bufferLength/2; i++){
- if(validCompression(&clBuffer[2*i])){
- _nAlgs++;
- }
- }
- _algs = (char **)malloc(_nAlgs * sizeof(char *));
- for(i=0, j=0; i < _bufferLength/2; i++){
- if(validCompression(&clBuffer[2*i])){
- _algs[j++] = strdup((char *)clBuffer[2*i]);
- }
- }
- #ifdef QT
- _algs[j++] = strdup("Apple Video");
- _algs[j++] = strdup("Apple Animation");
- #endif
- n = 0;
- XtSetArg(args[n],XmNbuttonCount,_nAlgs);n++;
- buttonLabels = (XmString *)malloc(_nAlgs * sizeof(XmString));
- for(i=0; i<_nAlgs; i++){
- buttonLabels[i] = XmStringCreateSimple(_algs[i]);
- }
- XtSetArg(args[n],XmNbuttons,buttonLabels);n++;
- XtSetArg(args[n],XmNbuttonSet,0);n++;
- XmString optionLabel = XmStringCreateSimple("Compression");
- XtSetArg(args[n],XmNoptionLabel,optionLabel);n++;
- XtSetArg(args[n],XmNsimpleCallback,&CompressPanel::actCallback);n++;
- XtSetArg(args[n],XmNtopAttachment,XmATTACH_FORM);n++;
- XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM);n++;
- XtSetArg(args[n],XmNrightAttachment,XmATTACH_FORM);n++;
- _X_compressMenu = XmCreateSimpleOptionMenu(_baseWidget, "menu",args,n);
- XtManageChild(_X_compressMenu);
- XmStringFree(optionLabel);
- delete [] clBuffer;
- // add Filename widgets
- n = 0;
- ptr = XmStringCreate("Filename", XmSTRING_DEFAULT_CHARSET);
- XtSetArg(args[n],XmNlabelString,ptr);n++;
- XtSetArg(args[n],XmNtopAttachment,XmATTACH_WIDGET);n++;
- XtSetArg(args[n],XmNtopWidget,_X_compressMenu);n++;
- XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM);n++;
- XtSetArg(args[n],XmNrightAttachment,XmATTACH_NONE);n++;
- Widget lab1 = XmCreateLabel(_baseWidget,"lab1",args,n);
- XtManageChild(lab1);
- XmStringFree(ptr);
- n = 0;
- XtSetArg(args[n],XmNtopAttachment,XmATTACH_WIDGET);n++;
- XtSetArg(args[n],XmNtopWidget,_X_compressMenu);n++;
- XtSetArg(args[n],XmNleftAttachment,XmATTACH_WIDGET);n++;
- XtSetArg(args[n],XmNleftWidget,lab1);n++;
- XtSetArg(args[n],XmNrightAttachment,XmATTACH_FORM);n++;
- _X_filename = XmCreateText(_baseWidget, "name",args,n);
- XtManageChild(_X_filename);
- XtAddCallback(_X_filename, XmNactivateCallback,
- &CompressPanel::fileCallback, (XtPointer)this);
- XtAddCallback(_X_filename, XmNlosingFocusCallback,
- &CompressPanel::fileCallback, (XtPointer)this);
- // Add frame rate info
- n = 0;
- ptr = XmStringCreate("Frame Rate", XmSTRING_DEFAULT_CHARSET);
- XtSetArg(args[n],XmNlabelString,ptr);n++;
- XtSetArg(args[n],XmNtopAttachment,XmATTACH_WIDGET);n++;
- XtSetArg(args[n],XmNtopWidget,_X_filename);n++;
- XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM);n++;
- XtSetArg(args[n],XmNrightAttachment,XmATTACH_NONE);n++;
- _X_framelabel = XmCreateLabel(_baseWidget,"lab2",args,n);
- XtManageChild(_X_framelabel);
- XmStringFree(ptr);
- n = 0;
- XtSetArg(args[n],XmNtopAttachment,XmATTACH_WIDGET);n++;
- XtSetArg(args[n],XmNtopWidget,_X_filename);n++;
- XtSetArg(args[n],XmNleftAttachment,XmATTACH_WIDGET);n++;
- XtSetArg(args[n],XmNleftWidget,_X_framelabel);n++;
- XtSetArg(args[n],XmNrightAttachment,XmATTACH_NONE);n++;
- XtSetArg(args[n],XmNcolumns,10);n++;
- _X_framerate = XmCreateText(_baseWidget, "rate",args,n);
- XtManageChild(_X_framerate);
- XtAddCallback(_X_framerate, XmNactivateCallback,
- &CompressPanel::rateCallback, (XtPointer)this);
- XtAddCallback(_X_framerate, XmNlosingFocusCallback,
- &CompressPanel::rateCallback, (XtPointer)this);
- }
-
- CompressPanel::~CompressPanel()
- {
- int i;
- for(i=0; i< getNumAlgs(); i++){
- free(buttonLabels[i]);
- }
- free (buttonLabels);
- for(i=0; i < getNumAlgs(); i++){
- free ((void *)_algs[i]);
- }
- free((void *)_algs);
- free (_filename);
- }
-
- char *
- CompressPanel::getCompressor(int num)
- {
- if(num >= _nAlgs) return NULL;
- return strdup(_algs[num]);
- }
-
- char *
- CompressPanel::getCurrentCompressor()
- {
- return getCompressor(_currentAlg);
- }
-
- int
- CompressPanel::validCompression(int *v)
- {
- if(v[1] != CL_CODEC && v[1] != CL_COMPRESSOR) return (FALSE);
- if(strcmp((char *)v[0], "RTR") == 0) return (FALSE);
- if(strcmp((char *)v[0], "HDCC") == 0) return (FALSE);
- if(strcmp((char *)v[0], "HwJpeg") == 0) return (FALSE);
- return(TRUE);
- }
-
- const char *CompressPanel::className()
- {
- return "CompressPanel";
- }
-
- void CompressPanel::actCallback(Widget, XtPointer clientData, XtPointer)
- {
- int button = (int)clientData;
- _currentAlg = button;
- }
-
- void CompressPanel::setFileName(char *n)
- {
- Arg args[1];
- if(_filename) free (_filename);
- if(n){
- _filename = strdup(n);
- XtSetArg(args[0],XmNvalue,n);
- XtSetValues(_X_filename,args,1);
- }else{
- XtSetArg(args[0],XmNvalue,"");
- XtSetValues(_X_filename,args,1);
- _filename = NULL;
- }
- }
-
- char *
- CompressPanel::getFileName()
- {
- if(_filename){
- return strdup(_filename);
- }else{
- return NULL;
- }
- }
-
- void CompressPanel::fileCallback(Widget w, XtPointer clientData, XtPointer)
- {
- CompressPanel *obj = (CompressPanel *)clientData;
- String str;
- Arg args[1];
- XtSetArg(args[0], XmNvalue, &str);
- XtGetValues(w,args,1);
- obj->setFileName((char *)str);
- free(str);
- }
-
- void CompressPanel::setFrameRate(float x)
- {
- Arg args[1];
- char str[6];
- _rate = x;
- sprintf(str,"%4.2f",_rate);
- if(_rate < 0){
- XtUnmanageChild(_X_framerate);
- XtUnmanageChild(_X_framelabel);
- }
- XtSetArg(args[0],XmNvalue,str);
- XtSetValues(_X_framerate,args,1);
- }
-
- void CompressPanel::rateCallback(Widget w, XtPointer clientData, XtPointer)
- {
- CompressPanel *obj = (CompressPanel *)clientData;
- String str;
- float val;
- Arg args[1];
- XtSetArg(args[0], XmNvalue, &str);
- XtGetValues(w,args,1);
- sscanf(str,"%f",&val);
- obj->setFrameRate(val);
- free(str);
- }
-
- void CompressPanel::setCompressor(char *str)
- {
- Arg args[3];
- char *str2;
- XmString xmStr, newStr;
- Widget w,*wList;
- int nList, i;
- xmStr = XmStringCreateSimple(str);
- // Get the menu Widget
- XtSetArg(args[0],XmNsubMenuId,&w);
- XtGetValues(_X_compressMenu,args,1);
- // Now get the list of children
- XtSetArg(args[0],XmNchildren,&wList);
- XtSetArg(args[1],XmNnumChildren,&nList);
- XtGetValues(w,args,2);
- for(i = 0; i < nList; i++){
- // Is the labelString of the child == str ?
- XtSetArg(args[0],XmNlabelString,&newStr);
- XtGetValues(wList[i],args,1);
- if(newStr){
- if(XmStringCompare(newStr,xmStr)){
- XtSetArg(args[0],XmNmenuHistory,wList[i]);
- XtSetValues(_X_compressMenu,args,1);
- }
- XmStringFree(newStr);
- }
- }
- XmStringFree(xmStr);
- // now set the _currentAlg
- for(i = 0; i < getNumAlgs(); i++){
- str2 = getCompressor(i);
- if(strcmp(str2,str) == 0) _currentAlg = i;
- free(str2);
- }
- }
-