///////////////////////////////////////////////////////////////////////////// // // PURPOSE: This function places the paint literals of selected // attributes above the fields in a partition or list box. // // vNewDialog - handle to the group // OffsetDLG_Y - offset row to the group // OffsetDLG_X - offset column to the group // PartitionSize - length size of the group // // Return Codes: // 0 - Everything is O.K. and the literals were placed into the // partition // -1 - The literal widths exceeded the partitions width // //////////////////////////////////////////////////////////////////// zOPER_EXPORT zSHORT OPERATION ofnTZWDLGSO_AutoPaintLstLitPart( zVIEW vSubtask, zVIEW vUserSpec, zVIEW vNewDialog, zLONG OffsetDLG_Y, zLONG OffsetDLG_X, zLONG PartitionSize, zPCHAR szListType ) { zVIEW vCtrlDef; zLONG lCC; zLONG lCL; zLONG lFieldCol; zLONG lListAttributeLength; zLONG lPaintLiteralLength; zCHAR sPaintLiteral[ 65 ]; zSHORT RESULT; zLONG lTempInteger_1; zLONG lTempInteger_2; zCHAR X_LOD_Attribute[ 16 ]; zCHAR X_ER_Attribute[ 15 ]; // TraceLineS("IN", "AutoPaintLstListPart W4" ); // Set up variables to either I_LOD listbox or L_LOD listbox. if ( szListType[ 0 ] == 'I' ) { zstrcpy( X_LOD_Attribute, "I_LOD_Attribute" ); zstrcpy( X_ER_Attribute, "I_ER_Attribute" ); } else { zstrcpy( X_LOD_Attribute, "L_LOD_Attribute" ); zstrcpy( X_ER_Attribute, "L_ER_Attribute" ); } lCC = 5; lCL = 12; GetViewByName( &vCtrlDef, "TZADCTLD", vNewDialog, zLEVEL_TASK ); lFieldCol = 1; RESULT = SetCursorFirstEntity( vUserSpec, X_LOD_Attribute, "" ); while ( RESULT > zCURSOR_UNCHANGED ) { /* This gets the length of the field to be painted */ lListAttributeLength = ofnTZWDLGSO_GetSizeForListAttr( vSubtask, vUserSpec, szListType ); lListAttributeLength = lListAttributeLength * lCC; /* Limit the size of the attribute length. */ if ( lListAttributeLength > 100 ) lListAttributeLength = 100; if ( lListAttributeLength < 25 ) lListAttributeLength = 25; /* Get the paint literal */ GetStringFromAttribute( sPaintLiteral, vUserSpec, X_ER_Attribute, "ListPaintLit" ); if ( sPaintLiteral[ 0 ] == 0 ) GetStringFromAttribute( sPaintLiteral, vUserSpec, X_ER_Attribute, "PromptPaintLit" ); if ( sPaintLiteral[ 0 ] == 0 ) { GetStringFromAttribute( sPaintLiteral, vUserSpec, X_ER_Attribute, "Name" ); /* Add a ':' to the end. */ zstrcat( sPaintLiteral, ":" ); /* Add spaces before any capital letters. */ AddSpacesToString( sPaintLiteral ); } lPaintLiteralLength = zstrlen( sPaintLiteral ); lPaintLiteralLength = lPaintLiteralLength * lCC; /* Limit the size of the literal length. */ if ( lPaintLiteralLength > 100 ) lPaintLiteralLength = 100; if ( lPaintLiteralLength < 25 ) lPaintLiteralLength = 25; /* lTempInteger_1 = CheckForOverlappingFields( vNewDialog, OffsetDLG_Y, OffsetDLG_Y + nCL, lFieldCol + OffsetDLG_X - lCC, lFieldCol + OffsetDLG_X + lPaintLiteralLength - lCC ); */ lTempInteger_1 = 0; /* Check to see IF there is a field or group located above the listbox that would be in the way of painting the literals */ if ( lTempInteger_1 == -1 ) { /* Cannot place text fields above the listbox because of either a field or a group */ /* InformationMessage( "Field literals can't fit because of FIELD or GROUP" ); */ MessageSend( vUserSpec, "AD10301", "Autodesigner", "Field literals can't fit because of FIELD or GROUP", zMSGQ_OBJECT_CONSTRAINT_ERROR, zBEEP ); return( -1 ); } /* Add the listbox literals at the end of the client fields. This makes a difference in fnCompressWindow in autodesigning.*/ SetCursorLastEntity( vNewDialog, "Control", "" ); /* Do not continue to add fields into the list box if the field sizes exceed the size of the list box */ /* If the field attribute length is greater than the text literal length, then add the field attribute length to lFieldCol. */ if ( lPaintLiteralLength < lListAttributeLength ) { /* If the length of lFieldCol is greater than the partition size, then RETURN */ if ( lFieldCol + lListAttributeLength > PartitionSize ) { return( 1 ); } } else { /* If the length of lFieldCol is greater than the partition size, then RETURN */ if ( lFieldCol + lPaintLiteralLength > PartitionSize ) { return( 1 ); } } /* Create literals for the list box */ CreateMetaEntity( vSubtask, vNewDialog, "Control", zPOS_AFTER ); SetCursorFirstEntityByString( vCtrlDef, "ControlDef", "Tag", "Text", "" ); IncludeSubobjectFromSubobject( vNewDialog, "ControlDef", vCtrlDef, "ControlDef", zPOS_AFTER ); /* Remove the text border. */ SetAttributeFromInteger( vNewDialog, "Control", "Subtype", zCONTROL_BORDEROFF | zCONTROL_NOTABSTOP ); SetAttributeFromInteger( vNewDialog, "Control", "PSDLG_Y", OffsetDLG_Y ); lTempInteger_2 = OffsetDLG_X + lFieldCol - lCC; SetAttributeFromInteger( vNewDialog, "Control", "PSDLG_X", lTempInteger_2 ); SetAttributeFromInteger( vNewDialog, "Control", "SZDLG_X", lPaintLiteralLength ); SetAttributeFromInteger( vNewDialog, "Control", "SZDLG_Y", 10 ); ofnTZWDLGSO_AssignTag( vSubtask, vNewDialog, vNewDialog, "ListText" ); SetAttributeFromString( vNewDialog, "Control", "Text", sPaintLiteral ); /* If the field length is longer than the paint literal, then position the next field by using the field length, otherwise position the next field by using the paint literal length */ if ( lPaintLiteralLength < lListAttributeLength ) { lFieldCol = lFieldCol + lListAttributeLength + lCC; } else { lFieldCol = lFieldCol + lPaintLiteralLength + lCC; } RESULT = SetCursorNextEntity( vUserSpec, X_LOD_Attribute, "" ); } // TraceLineS("END", "AutoPaintLstListPart W4" ); return( 0 ); }
///////////////////////////////////////////////////////////////////////////// // // PURPOSE: This function places selected attributes in an already // existing partition without the attributes text literals. // // vNewDialog - handle to the partition // lFieldRow - offset row in the group // lFieldCol - offset column in the group // PartitionSize - length size for the group // // Return Codes: // 0 - Everything is O.K. and the fields were placed into the // partition // -1 - The field widths exceeded the partitions width // ///////////////////////////////////////////////////////////////////////////// zOPER_EXPORT zSHORT OPERATION ofnTZWDLGSO_AutoPaintListPart( zVIEW vSubtask, zVIEW vUserSpec, zVIEW vNewDialog, zLONG lFieldRow, zLONG lFieldCol, zLONG PartitionSize, zPCHAR szListType ) { zVIEW vAutoDesWk; zVIEW vTempStyle; zVIEW vSubobject; zVIEW vCtrlDef; zLONG lListAttributeLength; zLONG lPaintLiteralLength; zLONG lCC; zLONG lCL; zCHAR szControlType[ 33 ]; zCHAR szMapEntity[ 33 ]; zCHAR szParentName[ 33 ]; zCHAR szWorkString[ 65 ]; zCHAR szLiteralString[ 65 ]; zLONG lTempInteger_0; zSHORT RESULT; zSHORT lFieldsPainted; zLONG lRC; zCHAR X_LOD_Attribute[ 16 ]; zCHAR X_LOD_Entity[ 13 ]; zCHAR X_ER_Attribute[ 15 ]; // TraceLineS( "IN", "AutoPaintListPart W4" ); // Set up variables to either I_LOD listbox or L_LOD listbox. if ( szListType[ 0 ] == 'I' ) { zstrcpy( X_LOD_Attribute, "I_LOD_Attribute" ); zstrcpy( X_LOD_Entity, "I_LOD_Entity" ); zstrcpy( X_ER_Attribute, "I_ER_Attribute" ); } else { zstrcpy( X_LOD_Attribute, "L_LOD_Attribute" ); zstrcpy( X_LOD_Entity, "L_LOD_Entity" ); zstrcpy( X_ER_Attribute, "L_ER_Attribute" ); } lCL = 12; lCC = 5; GetViewByName( &vCtrlDef, "TZADCTLD", vNewDialog, zLEVEL_TASK ); GetViewByName( &vAutoDesWk, "TZADWWKO", vNewDialog, zLEVEL_TASK ); GetStringFromAttribute( szControlType, vNewDialog, "ControlDef", "Tag" ); /* It is important to know whether the parent is a WINDOW(WDODs) or a SECTION(RODs). */ zstrcpy( szParentName, "Window" ); /* IF we are Autodesigning a ROD, set lCL to 8 so line skips do not take place */ lTempInteger_0 = zstrcmp( szParentName, "SECTION" ); if ( lTempInteger_0 == 0 ) { lCL = 8; } /* Create a view that will point to the controls under the listbox. */ CreateViewFromViewForTask( &vSubobject, vNewDialog, 0 ); /* Set handle to the fields under the group */ SetViewToSubobject( vSubobject, "CtrlCtrl" ); /* Delete any existing fields in the listbox */ RESULT = SetCursorFirstEntity( vSubobject, "Control", "" ); while ( RESULT > zCURSOR_UNCHANGED ) { RESULT = DeleteEntity( vSubobject, "Control", zREPOS_NEXT ); } /* Create a new view that will point to the UIS_ViewObjRef entity in the user spec object. Sometimes vUserSpec is pointing to a recursive subobject and UI_ViewObjRef cannot be accessed. */ CreateViewFromViewForTask( &vTempStyle, vUserSpec, 0 ); ResetView( vTempStyle ); lFieldsPainted = 0; //// Paint the fields in the Partition ////////// /* IF Attributes have been found to paint, paint them */ RESULT = SetCursorFirstEntity( vUserSpec, X_LOD_Attribute, "" ); while ( RESULT > zCURSOR_UNCHANGED ) { // This gets the length of the field to be painted. lListAttributeLength = ofnTZWDLGSO_GetSizeForListAttr( vSubtask, vUserSpec, szListType ); if ( lListAttributeLength == 0 ) lListAttributeLength = 4; lListAttributeLength = lListAttributeLength * lCC; if ( lListAttributeLength > 100 ) lListAttributeLength = 100; if ( lListAttributeLength < 25 ) lListAttributeLength = 25; /* If there isn't a paint literal then use the entity name as the paint literal */ GetStringFromAttribute( szLiteralString, vUserSpec, X_ER_Attribute, "ListPaintLit" ); if ( szLiteralString[ 0 ] == 0 ) GetStringFromAttribute( szLiteralString, vUserSpec, X_ER_Attribute, "PromptPaintLit" ); lPaintLiteralLength = zstrlen( szLiteralString ); if ( szLiteralString[ 0 ] == 0 ) { GetStringFromAttribute( szLiteralString, vUserSpec, X_ER_Attribute, "Name" ); AddSpacesToString( szLiteralString ); lPaintLiteralLength = zstrlen( szLiteralString ) + 1; } lPaintLiteralLength = lPaintLiteralLength * lCC; if ( lPaintLiteralLength > 100 ) lPaintLiteralLength = 100; if ( lPaintLiteralLength < 25 ) lPaintLiteralLength = 25; /* Do not continue to add fields into the partition if the field sizes exceed the size of the partition */ /* If the field attribute length is greater than the text literal length, then add the field attribute length to lFieldCol. */ if ( lPaintLiteralLength < lListAttributeLength ) { /* If the length of lFieldCol is greater than the partition size, then delete all the fields that have been added and give a message to the user. */ if ( lFieldCol + lListAttributeLength > PartitionSize ) { RESULT = SetCursorFirstEntity( vSubobject, "Control", "" ); while ( RESULT > zCURSOR_UNCHANGED ) { DeleteEntity( vSubobject, "Control", zREPOS_NEXT ); RESULT = SetCursorNextEntity( vSubobject, "Control", "" ); } DropView( vSubobject ); MessageSend( vUserSpec, "AD10302", "Autodesigner", "Partition too small( width )", zMSGQ_OBJECT_CONSTRAINT_ERROR, zBEEP ); return( -1 ); } } else { /* If the text literal length is greater than the field attribute length, then add the text literal length to lFieldCol. */ /* If the length of lFieldCol is greater than the partition size, then delete all the fields that have been added and give a message to the user. */ if ( lFieldCol + lPaintLiteralLength > PartitionSize ) { RESULT = SetCursorFirstEntity( vSubobject, "Control", "" ); while ( RESULT > zCURSOR_UNCHANGED ) { DeleteEntity( vSubobject, "Control", zREPOS_NEXT ); RESULT = SetCursorNextEntity( vSubobject, "Control", "" ); } DropView( vSubobject ); MessageSend( vUserSpec, "AD10303", "Autodesigner", "Partition too small( width )", zMSGQ_OBJECT_CONSTRAINT_ERROR, zBEEP ); return( -1 ); } } /* Create the partition's fields */ CreateMetaEntity( vSubtask, vSubobject, "Control", zPOS_AFTER ); SetAttributeFromString( vSubobject, "Control", "Text", szLiteralString ); if ( zstrcmp( szControlType, "ListBox" ) == 0 ) { SetCursorFirstEntityByString( vCtrlDef, "ControlDef", "Tag", "ListBoxCtl", "" ); IncludeSubobjectFromSubobject( vSubobject, "ControlDef", vCtrlDef, "ControlDef", zPOS_AFTER ); } else { SetCursorFirstEntityByString( vCtrlDef, "ControlDef", "Tag", "Text", "" ); IncludeSubobjectFromSubobject( vSubobject, "ControlDef", vCtrlDef, "ControlDef", zPOS_AFTER ); } // Set the tag ofnTZWDLGSO_AssignTag( vSubtask, vNewDialog, vSubobject, "ListCtrl" ); /* GetStringFromAttribute( szTag, vUserSpec, X_ER_Attribute, "Name" ); szTag[ 30 ] = 0; lFieldsPainted = lFieldsPainted + 1; zltoa( lFieldsPainted, szWork ); zstrcat( szTag, szWork ); SetAttributeFromString( vSubobject, "Control", "Tag", szTag ); */ SetAttributeFromInteger( vSubobject, "Control", "SZDLG_X", lListAttributeLength ); SetAttributeFromInteger( vSubobject, "Control", "SZDLG_Y", lCL ); /* If the domain is an integer or a long, then right justify. */ /* IF vUserSpec.L_Domain.DerivedDataType = 'I' OR vUserSpec.L_Domain.DerivedDataType = 'L' OR vUserSpec.L_Domain.DerivedDataType = 'M' vNewDialog.FLAGFLD.RJUST = 'Y' END */ GetStringFromAttribute( szMapEntity, vUserSpec, "LOD_Entity", "Name" ); GetStringFromAttribute( szWorkString, vUserSpec, X_LOD_Entity, "Name" ); /* If this LISTATTRIB is from a different ENTITY than the current ENTITY, then make sure the value gets mapped. */ lRC = zstrcmp( szWorkString, "" ); if ( lRC != 0 ) { lRC = zstrcmp( szWorkString, szMapEntity ); if ( lRC == 0 ) { zstrcpy( szMapEntity, szWorkString ); } } /* setting the group and field's ENAME and ANAME */ CreateMetaEntity( vSubtask, vSubobject, "CtrlMap", zPOS_AFTER ); /* set the partitions OI name */ if ( szListType[ 0 ] == 'I' ) IncludeSubobjectFromSubobject( vSubobject, "CtrlMapView", vUserSpec, "ListViewObjRef", zPOS_AFTER ); else IncludeSubobjectFromSubobject( vSubobject, "CtrlMapView", vTempStyle, "UIS_ViewObjRef", zPOS_AFTER ); IncludeSubobjectFromSubobject( vSubobject, "CtrlMapLOD_Attribute", vUserSpec, X_LOD_Attribute, zPOS_AFTER ); /* lFieldRow should always stay the same */ SetAttributeFromInteger( vSubobject, "Control", "PSDLG_X", lFieldCol ); SetAttributeFromInteger( vSubobject, "Control", "PSDLG_Y", lFieldRow ); /* If the field length is longer than the paint literal, then position the next field by using the field length, otherwise position the next field by using the paint literal length */ if ( lPaintLiteralLength < lListAttributeLength ) { lFieldCol = lFieldCol + lListAttributeLength + lCC; } else { lFieldCol = lFieldCol + lPaintLiteralLength + lCC; } RESULT = SetCursorNextEntity( vUserSpec, X_LOD_Attribute, "" ); } DropView( vSubobject ); DropView( vTempStyle ); // TraceLineS("END", "AutoPaintListPart W4" ); return( 0 ); }
///////////////////////////////////////////////////////////////////////////// // // ENTRY: CreateListBox // // PURPOSE: This function creates a listbox with the given // specifications and then autodesigns this listbox with // the LISTATTRIB attributes for the listbox's entity. // In addition to auto designing the listbox's fields, any // actions defined for the listbox(in the style object) // get autodesigned. // ///////////////////////////////////////////////////////////////////////////// zOPER_EXPORT zSHORT OPERATION ofnTZWDLGSO_CreateListBox( zVIEW vSubtask, zVIEW vNewDialog, zVIEW vUserSpec, zLONG lStart_X, zLONG lStart_Y, zLONG lHeight, zPCHAR szListType ) { zVIEW vCtrlDef; zVIEW vTZPNCTWO; zLONG lTotalLth; zLONG lAttribLth; zLONG lPaintLth; zLONG lCC; zLONG lCL; zSHORT RESULT; zCHAR szPaintStr[ 50 ]; zCHAR X_LOD_Attribute[ 16 ]; zCHAR X_ER_Attribute[ 15 ]; // TraceLineS("IN", "AutoPaintLstListPart W4" ); // Set up variables to either I_LOD listbox or L_LOD listbox. if ( szListType[ 0 ] == 'I' ) { strcpy_s( X_LOD_Attribute, zsizeof( X_LOD_Attribute ), "I_LOD_Attribute" ); strcpy_s( X_ER_Attribute, zsizeof( X_ER_Attribute ), "I_ER_Attribute" ); } else { strcpy_s( X_LOD_Attribute, zsizeof( X_LOD_Attribute ), "L_LOD_Attribute" ); strcpy_s( X_ER_Attribute, zsizeof( X_ER_Attribute ), "L_ER_Attribute" ); } lCC = 5; lCL = 12; GetViewByName( &vCtrlDef, "TZADCTLD", vNewDialog, zLEVEL_TASK ); // TraceLineS("IN", "CreateListBox W3" ); /* Create the listbox. */ CreateMetaEntity( vSubtask, vNewDialog, "Control", zPOS_AFTER ); SetCursorFirstEntityByString( vCtrlDef, "ControlDef", "Tag", "ListBox", "" ); IncludeSubobjectFromSubobject( vNewDialog, "ControlDef", vCtrlDef, "ControlDef", zPOS_AFTER ); SetAttributeFromInteger( vNewDialog, "Control", "PSDLG_X", lStart_X ); SetAttributeFromInteger( vNewDialog, "Control", "PSDLG_Y", lStart_Y ); // We must set the CtrlBOI. ActivateEmptyObjectInstance( &vTZPNCTWO, "TZPNCTWO", vUserSpec, zSINGLE ); CreateEntity( vTZPNCTWO, "TZPNCTWO", zPOS_AFTER ); CreateEntity( vTZPNCTWO, "ListBox", zPOS_AFTER ); SetAttributeFromInteger( vTZPNCTWO, "ListBox", "Subtype", 8192 ); // Set Control.CtrlBOI from work entity GroupBox SetBlobFromEntityAttributes( vNewDialog, "Control", "CtrlBOI", vTZPNCTWO, "ListBox" ); DropView( vTZPNCTWO ); // Set the control subtype to 0(Single). SetAttributeFromInteger( vNewDialog, "Control", "Subtype", 8192 ); lTotalLth = 0; if ( CheckExistenceOfEntity ( vUserSpec, X_LOD_Attribute ) != 0 ) lTotalLth = 5; // Loop through the L_LOD_Attribute and find the total width needed // for this listbox. RESULT = SetCursorFirstEntity( vUserSpec, X_LOD_Attribute, "" ); while ( RESULT > zCURSOR_UNCHANGED ) { lAttribLth = ofnTZWDLGSO_GetSizeForListAttr( vSubtask, vUserSpec, szListType ); if ( lAttribLth > 20 ) lAttribLth = 20; if ( lAttribLth < 5 ) lAttribLth = 5; GetStringFromAttribute( szPaintStr, zsizeof( szPaintStr ), vUserSpec, X_ER_Attribute, "ListPaintLit" ); if ( szPaintStr[ 0 ] == 0 ) { GetStringFromAttribute( szPaintStr, zsizeof( szPaintStr ), vUserSpec, X_ER_Attribute, "PromptPaintLit" ); } if ( szPaintStr[ 0 ] == 0 ) { GetStringFromAttribute( szPaintStr, zsizeof( szPaintStr ), vUserSpec, X_ER_Attribute, "Name" ); /* Add a ':' to the end. */ strcat_s( szPaintStr, zsizeof( szPaintStr ), ":" ); /* Add spaces before any capital letters. */ AddSpacesToString( szPaintStr ); } lPaintLth = zstrlen( szPaintStr ); if ( lPaintLth > 20 ) lPaintLth = 20; if ( lPaintLth < 5 ) lPaintLth = 5; if ( lAttribLth > lPaintLth ) lTotalLth = lTotalLth + lAttribLth + 1; else lTotalLth = lTotalLth + lPaintLth + 1; RESULT = SetCursorNextEntity( vUserSpec, X_LOD_Attribute, "" ); } lTotalLth ++; SetAttributeFromInteger( vNewDialog, "Control", "SZDLG_X", lTotalLth * lCC ); SetAttributeFromInteger( vNewDialog, "Control", "SZDLG_Y", lHeight ); // TraceLineS("END", "CreateListBox W3" ); return( 0 ); }