|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ T b ┃
Length: 14299 (0x37db) Types: TextFile Names: »buildPanel.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─ ⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z« └─⟦2109abc41⟧ └─ ⟦this⟧ »./X.V10R4/Toolkit/Xr/usr/contrib/RB/buildPanel.c«
/* * $Source: /u1/Xr/usr/contrib/RB/RCS/buildPanel.c,v $ * $Header: buildPanel.c,v 1.1 86/12/17 08:52:45 swick Exp $ */ #ifndef lint static char *rcsid_buildPanel_c = "$Header: buildPanel.c,v 1.1 86/12/17 08:52:45 swick Exp $"; #endif lint static char rcsid[] = "$Header: buildPanel.c,v 1.1 86/12/17 08:52:45 swick Exp $"; /*************************************<+>************************************* ***************************************************************************** ** ** File: buildPanel.c ** ** Project: X-ray Toolbox ** ** Description: The file contains the initialization and processing ** code for the builder panel for the raster builder. ** ** ******************************************************************* ** * (c) Copyright Hewlett-Packard Company, 1986. All rights are * ** * reserved. Copying or other reproduction of this program except * ** * for archival purposes is prohibited without the prior written * ** * consent of Hewlett-Packard Company. * ** ******************************************************************* ** ** ** ------------------------ MODIFICATION RECORD ------------------------ * * $Log: buildPanel.c,v $ * Revision 1.1 86/12/17 08:52:45 swick * Initial revision * * ***************************************************************************** *************************************<+>*************************************/ #include <X/Xlib.h> #include <Xr/defs.h> #include <Xr/types.h> #include "buildPanel.h" /************************************************************************ * * PanelInit * PanelInit is called once to set up the builder settings panel. * All of the sizes and locations of the editors are calculated, * and the panel is sized and created. * ************************************************************************/ PanelInit() { int i; /* * Get the sizes for each of the static text strings. */ panelSTInfo1.editorRect.width = XrStringWidth(xrBaseFontInfo,panelSTInfo1.string,XrNULLTERMINATED,0,0); panelSTInfo2.editorRect.width = XrStringWidth(xrBaseFontInfo,panelSTInfo2.string,XrNULLTERMINATED,0,0); panelSTInfo3.editorRect.width = XrStringWidth(xrBaseFontInfo,panelSTInfo3.string,XrNULLTERMINATED,0,0); panelSTInfo4.editorRect.width = XrStringWidth(xrBaseFontInfo,panelSTInfo4.string,XrNULLTERMINATED,0,0); panelTEInfo1.cellWidth = panelTEInfo2.cellWidth = panelTEInfo3.cellWidth = panelTEInfo4.cellWidth = panelTEInfo5.cellWidth = XrStringWidth (xrBaseFontInfo, "9", XrNULLTERMINATED, 0, 0); /* * Size all of the editors. */ for (i = 0; i < panelInfo.numFields; i++) (*panelFields[i].editorFunct) (NULL, MSG_SIZE, panelFields[i].editorData); /* * Offset each of the editors to position them within the panel. */ panelSTInfo1.editorRect.x = 10; panelSTInfo1.editorRect.y = panelTBInfo.editorRect.height + 10; panelTEInfo1.editorRect.x = 15; panelTEInfo1.editorRect.y = panelSTInfo1.editorRect.y + panelSTInfo1.editorRect.height; panelTEInfo2.editorRect.x = 15; panelTEInfo2.editorRect.y = panelTEInfo1.editorRect.y + panelTEInfo1.editorRect.height; panelSTInfo2.editorRect.x = 10; panelSTInfo2.editorRect.y = panelTEInfo2.editorRect.y + panelTEInfo2.editorRect.height + 8; panelTEInfo3.editorRect.x = 15; panelTEInfo3.editorRect.y = panelSTInfo2.editorRect.y + panelSTInfo2.editorRect.height; panelSTInfo3.editorRect.x = panelSTInfo1.editorRect.x + panelSTInfo1.editorRect.width + 30; panelSTInfo3.editorRect.y = panelSTInfo1.editorRect.y; panelTEInfo4.editorRect.x = panelSTInfo3.editorRect.x + 5; panelTEInfo4.editorRect.y = panelTEInfo1.editorRect.y; panelTEInfo5.editorRect.x = panelSTInfo3.editorRect.x + 5; panelTEInfo5.editorRect.y = panelTEInfo2.editorRect.y; panelSTInfo4.editorRect.x = panelSTInfo3.editorRect.x; panelSTInfo4.editorRect.y = panelSTInfo2.editorRect.y; panelRBInfo.editorRect.x = panelSTInfo3.editorRect.x + 5; panelRBInfo.editorRect.y = panelTEInfo3.editorRect.y + 4; panelPBInfo.editorRect.x = panelSTInfo4.editorRect.x + panelSTInfo3.editorRect.width + 30; panelPBInfo.editorRect.y = panelTEInfo4.editorRect.y; /* * Get the size of the panel and set the title bar width to that size. */ XrPanel (NULL, MSG_SIZE, &panelInfo); panelTBInfo.editorRect.width = panelInfo.panelSize.width; /* * Get a panel context and set it such that the panel is relative * to the root windows and it is hidden when created. */ XrPanel (NULL, MSG_GETPANELCONTEXT, &panelContext); panelContext.showFlag = FALSE; panelInfo.panelContext = &panelContext; panelInfo.relativeTo = RootWindow; /* * Create the panel. */ panel = XrPanel (NULL, MSG_NEW, &panelInfo); } /************************************************************************ * * ProcessPanel is called when the builder settings item is selected * out of the main menu. It handles the display and processing of the * panel. * ************************************************************************/ ProcessPanel () { POINT movePt; XEvent xInput; xrEvent panelInput; xrEvent * xrInput; INT32 newRasterWidth; INT32 newRasterHeight; INT32 newViewWidth; INT32 newViewHeight; INT32 newPixelSize; INT32 depthChange; INT32 activeField; /* * Initialize the variables needed to process the panel. */ xrInput = (xrEvent *) &xInput; newPixelSize = rasterEditInfo.pixelSize; newViewWidth = rasterEditInfo.viewRegion.width; newViewHeight = rasterEditInfo.viewRegion.height; newRasterWidth = rasterEditInfo.rasterData.width; newRasterHeight = rasterEditInfo.rasterData.height; depthChange = FALSE; /* * Display the settings panel and activate the first * text edit field. */ CenterWindow (&panel -> panelZeroRect, &movePt); XrPanel (panel, MSG_MOVE, &movePt); XrPanel (panel, MSG_SHOW, NULL); activeField = 7; XrPanel (panel, MSG_CURRENTEDITOR, (INT8 *) panelFields[activeField].editorInstance); /* * Set up the panel processing loop. */ while (1) { XrPanel (panel, MSG_EDIT, &panelInput); XrInput (0, MSG_NONBLKHOTREAD, &xInput); /* * Input from an editor, set up a switch to handle each editor. */ if (panelInput.inputCode == XrPANELEDITOR) { switch (panelInput.value3) { case 5: /* Raster Depth Radio button */ if (xrInput -> value1 == XrSELECT) depthChange = TRUE; break; case 6: /* Push Button */ if (xrInput -> value2 == 0) { newPixelSize = 8; newViewWidth = 24; newViewHeight = 24; newRasterWidth = 64; newRasterHeight = 64; if (rasterEditInfo.rasterData.depth != XrBIT1) { panelRValue = 0; depthChange = TRUE; } PanelStrings (24, 24, 8, 64, 64); XrTextEdit (panelFields[7].editorInstance, MSG_REDRAW, XrREDRAW_ACTIVE); XrTextEdit (panelFields[8].editorInstance, MSG_REDRAW, XrREDRAW_ACTIVE); XrTextEdit (panelFields[9].editorInstance, MSG_REDRAW, XrREDRAW_ACTIVE); XrTextEdit (panelFields[10].editorInstance, MSG_REDRAW, XrREDRAW_ACTIVE); XrTextEdit (panelFields[11].editorInstance, MSG_REDRAW, XrREDRAW_ACTIVE); XrRadioButton (panelFields[5].editorInstance, MSG_REDRAW, XrREDRAW_ACTIVE); XrPanel (panel, MSG_CURRENTEDITOR, (INT8 *) panelFields[activeField].editorInstance); } else if (xrInput -> value2 == 1) { XrPanel (panel, MSG_HIDE, NULL); XrTextEdit (panelFields[activeField].editorInstance, MSG_DEACTIVATE, NULL); XrPanel (panel, MSG_CURRENTEDITOR, NULL); CheckPanel (newViewWidth, newViewHeight, newPixelSize, newRasterWidth, newRasterHeight, depthChange); return (TRUE); } break; case 7: /* View Size Width Text Edit */ case 8: /* View Size Height Text Edit */ case 9: /* Bit Size Text Edit */ case 10: /* Raster Size Width Text Edit */ case 11: /* Raster Size Height Text Edit */ if (panelInput.value3 == 7) newViewWidth = atoi (panelTEString1); else if (panelInput.value3 == 8) newViewHeight = atoi (panelTEString2); else if (panelInput.value3 == 9) newPixelSize = atoi (panelTEString3); else if (panelInput.value3 == 10) newRasterWidth = atoi (panelTEString4); else if (panelInput.value3 == 11) newRasterHeight = atoi (panelTEString5); if (xrInput -> value1 == XrTEDIT_BREAK) { activeField = panelInput.value3; if (xrInput -> value2 == XrNEXT) activeField++; if (xrInput -> value2 == XrPREVIOUS) activeField--; if (activeField > 11) activeField = 7; if (activeField < 7) activeField = 11; if (xrInput -> value2 == XrSELECT) XrPanel (panel, MSG_CURRENTEDITOR, NULL); else XrPanel (panel, MSG_CURRENTEDITOR, (INT8 *) panelFields[activeField].editorInstance); } else { activeField = panelInput.value3; XrPanel (panel, MSG_CURRENTEDITOR, (INT8 *) panelFields[activeField].editorInstance); } break; } } else if (panelInput.inputCode == XrPANELINPUT) { if (xInput.window != panel -> panelWindow) { XrInput (0, MSG_PUSHEVENT, &xInput); XrTextEdit (panelFields[activeField].editorInstance, MSG_DEACTIVATE, NULL); XrPanel (panel, MSG_CURRENTEDITOR, NULL); XrPanel (panel, MSG_HIDE, NULL); CheckPanel (newViewWidth, newViewHeight, newPixelSize, newRasterWidth, newRasterHeight, depthChange); return (TRUE); } } } } /************************************************************************ * * CheckPanel * CheckPanel takes a set of values for the main window raster width, * view size, pixelSize, and depth. If the values have changed from * the original settings, the appropriate functions are called to * changes the raster or raster editor. * ************************************************************************/ CheckPanel (viewWidth, viewHeight, pixelSize, rasterWidth, rasterHeight, depthChange) int viewWidth, viewHeight; int pixelSize; int rasterWidth, rasterHeight; int depthChange; { int changeWindow; int i; /* * Check for valid settings for the view, raster, and pixel sizes. * Then make sure the panel strings represent the values. */ if (viewWidth < 16) viewWidth = 16; if (viewHeight < 16) viewHeight = 16; if (rasterWidth < 16) rasterWidth = 16; if (rasterHeight < 16) rasterHeight = 16; if (pixelSize < 4) pixelSize = 4; if (viewWidth > rasterWidth) viewWidth = rasterWidth; if (viewHeight > rasterHeight) viewHeight = rasterHeight; /* * Make sure that the panels strings are set correctly. */ PanelStrings (viewWidth, viewHeight, pixelSize, rasterWidth, rasterHeight); /* * Check to see if the raster width, height, or depth have changed. */ changeWindow = FALSE; if (rasterWidth != rasterEditInfo.rasterData.width || rasterHeight != rasterEditInfo.rasterData.height || depthChange) { changeWindow = TRUE; if (panelRValue == 0) RasterInit (rasterWidth, rasterHeight, XrBIT1); else RasterInit (rasterWidth, rasterHeight, XrBYTE1); } /* * Check to see if the raster editor view width, height, * or pixel size has changed. */ if (viewWidth != rasterEditInfo.viewRegion.width || viewHeight != rasterEditInfo.viewRegion.height || pixelSize != rasterEditInfo.pixelSize) { changeWindow = TRUE; rasterEditInfo.viewRegion.width = viewWidth; rasterEditInfo.viewRegion.height = viewHeight; rasterEditInfo.pixelSize = pixelSize; } if (changeWindow == TRUE) MainWindowInit(); } /************************************************************************ * * PanelStrings * PanelStrings takes a set of values as parameters and changes them * into strings and places the strings into the correct text edit * string in the builder settings panel. * ************************************************************************/ PanelStrings (viewWidth, viewHeight, pixelSize, rasterWidth, rasterHeight) int viewWidth, viewHeight; int pixelSize; int rasterWidth, rasterHeight; { if (viewWidth != -1) sprintf (panelTEString1, "%d", viewWidth); if (viewHeight != -1) sprintf (panelTEString2, "%d", viewHeight); if (pixelSize != -1) sprintf (panelTEString3, "%d", pixelSize); if (rasterWidth != -1) sprintf (panelTEString4, "%d", rasterWidth); if (rasterHeight != -1) sprintf (panelTEString5, "%d", rasterHeight); }