From 84fbaf75bf6eb6fc87a3d1ce0d7a0668d2a6fb50 Mon Sep 17 00:00:00 2001 From: Pritpal Bedi Date: Mon, 15 Aug 2011 17:22:26 +0000 Subject: [PATCH] 2011-08-15 10:20 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) * contrib/hbcuied/cu_desgn.prg - contrib/hbcuied/cu_field.prg * contrib/hbcuied/cu_menu.prg + contrib/hbcuied/cu_object.prg * contrib/hbcuied/cu_outpt.prg * contrib/hbcuied/cu_prpty.prg * contrib/hbcuied/hbcuied.hbp * More refinements. --- harbour/ChangeLog | 10 + harbour/contrib/hbcuied/cu_desgn.prg | 171 +-- harbour/contrib/hbcuied/cu_field.prg | 521 --------- harbour/contrib/hbcuied/cu_menu.prg | 68 +- harbour/contrib/hbcuied/cu_object.prg | 1405 +++++++++++++++++++++++++ harbour/contrib/hbcuied/cu_outpt.prg | 166 +-- harbour/contrib/hbcuied/cu_prpty.prg | 633 +++++------ harbour/contrib/hbcuied/hbcuied.hbp | 1 - 8 files changed, 1859 insertions(+), 1116 deletions(-) delete mode 100644 harbour/contrib/hbcuied/cu_field.prg create mode 100644 harbour/contrib/hbcuied/cu_object.prg diff --git a/harbour/ChangeLog b/harbour/ChangeLog index bd505f0e35..a5b330f9f6 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,16 @@ The license applies to all entries newer than 2009-04-28. */ +2011-08-15 10:20 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) + * contrib/hbcuied/cu_desgn.prg + - contrib/hbcuied/cu_field.prg + * contrib/hbcuied/cu_menu.prg + + contrib/hbcuied/cu_object.prg + * contrib/hbcuied/cu_outpt.prg + * contrib/hbcuied/cu_prpty.prg + * contrib/hbcuied/hbcuied.hbp + * More refinements. + 2011-08-13 17:25 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) * contrib/hbcuied/cu_desgn.prg * contrib/hbcuied/cu_main.prg diff --git a/harbour/contrib/hbcuied/cu_desgn.prg b/harbour/contrib/hbcuied/cu_desgn.prg index a7f26dbfd8..ee4a1caf02 100644 --- a/harbour/contrib/hbcuied/cu_desgn.prg +++ b/harbour/contrib/hbcuied/cu_desgn.prg @@ -177,7 +177,7 @@ FUNCTION Operate( obj_,scn_ ) scrObject(obj_,scn_) CASE scn_[ SCN_LASTKEY ] == K_F4 // Properties - scrProperty(obj_,scn_) + scrProperty( obj_,scn_ ) CASE scn_[ SCN_LASTKEY ] == K_F7 .OR. scn_[ SCN_LASTKEY ] == K_ALT_C // Copy scrObjCopy(obj_,scn_) @@ -405,22 +405,22 @@ FUNCTION scrMovUp(scn_) //----------------------------------------------------------------------// -FUNCTION scrMovDn(scn_) +FUNCTION scrMovDn( scn_ ) LOCAL lMoved := .t. - scn_[SCN_ROW_CUR]++ - IF scn_[SCN_ROW_CUR] > scn_[SCN_BOTTOM] - scn_[SCN_ROW_CUR] := scn_[SCN_BOTTOM] - IF scn_[SCN_ROW_REP] < scn_[SCN_REP_LINES] - scn_[SCN_ROW_DIS]-- - scn_[SCN_ROW_REP]++ - scn_[SCN_REFRESH] := OBJ_REFRESH_ALL + scn_[ SCN_ROW_CUR ]++ + IF scn_[ SCN_ROW_CUR ] > scn_[ SCN_BOTTOM ] + scn_[ SCN_ROW_CUR ] := scn_[ SCN_BOTTOM ] + IF scn_[ SCN_ROW_REP ] < scn_[ SCN_REP_LINES ] + scn_[ SCN_ROW_DIS ]-- + scn_[ SCN_ROW_REP ]++ + scn_[ SCN_REFRESH ] := OBJ_REFRESH_ALL ELSE lMoved := .f. tone(300,1) ENDIF ELSE - scn_[SCN_ROW_REP]++ + scn_[ SCN_ROW_REP ]++ ENDIF RETURN lMoved @@ -744,6 +744,31 @@ STATIC FUNCTION scrTxtProp( obj_, scn_, nObj ) //----------------------------------------------------------------------// +FUNCTION scrOnLastCol( obj_, scn_, nObj ) + LOCAL nOff, i + + IF obj_[ nObj, OBJ_TYPE ] == OBJ_O_BOX + nOff := obj_[ nObj, OBJ_TO_COL ] - scn_[ SCN_COL_CUR ] - 1 + FOR i := 1 TO nOff + scrMovRgt( scn_ ) + scrMove( obj_,scn_ ) + scrStatus( obj_,scn_ ) + NEXT + + nOff := obj_[ nObj, OBJ_TO_ROW ] - scn_[ SCN_ROW_CUR ] - 1 + FOR i := 1 TO nOff + scrMovDn( scn_ ) + scrMove( obj_,scn_ ) + scrStatus( obj_,scn_ ) + NEXT + + SetPos( scn_[ SCN_ROW_CUR ], scn_[ SCN_COL_CUR ] ) + ENDIF + + RETURN NIL + +//----------------------------------------------------------------------// + STATIC FUNCTION scrOnFirstCol( obj_,scn_,nObj,type_ ) LOCAL nCur, nOff @@ -804,11 +829,11 @@ FUNCTION scrGetChar(obj_,nRow,nCol) LOCAL s := THE_FILL,n // Locate Text - n := ascan(obj_,{|e_| e_[OBJ_ROW]==nRow .AND. ; - VouchInRange(nCol,e_[OBJ_COL],e_[OBJ_TO_COL]) }) + n := ascan(obj_,{|e_| e_[ OBJ_ROW ] == nRow .AND. ; + VouchInRange( nCol, e_[ OBJ_COL ], e_[ OBJ_TO_COL ] ) } ) IF n == 0 // Locate Box - n := ascan(obj_,{|e_| VouchInRange(nRow,e_[OBJ_ROW],e_[OBJ_TO_ROW]) .AND. ; - VouchInRange(nCol,e_[OBJ_COL],e_[OBJ_TO_COL]) }) + n := ascan(obj_,{|e_| VouchInRange( nRow, e_[ OBJ_ROW ], e_[ OBJ_TO_ROW ] ) .AND. ; + VouchInRange( nCol, e_[ OBJ_COL ], e_[ OBJ_TO_COL ] ) } ) ENDIF IF n > 0 @@ -900,6 +925,7 @@ STATIC FUNCTION scrTextBlock(obj_,scn_) scrStatus(obj_,scn_) ENDDO scrMsg('') + RETURN NIL //----------------------------------------------------------------------// @@ -911,13 +937,13 @@ STATIC FUNCTION scrTextMove(obj_,scn_,nMode) DEFAULT nMode TO 0 // 0.Paste 1.Copy - IF !empty(scn_[SCN_TEXT_BLOCK_]) + IF ! empty( scn_[ SCN_TEXT_BLOCK_ ] ) // CREATE a ghost movement block scrMsg('Use Arrow Keys TO Move Selected Block') // Check FOR current cursor position - gst_:= {scn_[SCN_ROW_REP],scn_[SCN_COL_REP],; - scn_[SCN_ROW_REP]+scn_[SCN_TEXT_BLOCK_,3]-scn_[SCN_TEXT_BLOCK_,1],; - scn_[SCN_COL_REP]+scn_[SCN_TEXT_BLOCK_,4]-scn_[SCN_TEXT_BLOCK_,2]} + gst_:= { scn_[ SCN_ROW_REP ] , scn_[ SCN_COL_REP ],; + scn_[ SCN_ROW_REP ] + scn_[ SCN_TEXT_BLOCK_, 3 ] - scn_[ SCN_TEXT_BLOCK_, 1 ],; + scn_[ SCN_COL_REP ] + scn_[ SCN_TEXT_BLOCK_, 4 ] - scn_[ SCN_TEXT_BLOCK_, 2 ] } DO WHILE .t. scrMove(obj_,scn_) scrDispGhost(obj_,scn_,gst_) @@ -946,45 +972,45 @@ STATIC FUNCTION scrTextMove(obj_,scn_,nMode) ENDCASE ENDDO // Post Selected Block TO Moved Area - obj_:= scrTextPost(obj_,scn_,gst_,nMode) + obj_:= scrTextPost( obj_, scn_, gst_, nMode ) - scrOrdObj(obj_,scn_) // Update this routine TO show exact nature + scrOrdObj( obj_, scn_ ) - scrMove(obj_,scn_) - scrStatus(obj_,scn_) + scrMove( obj_, scn_ ) + scrStatus( obj_, scn_ ) - scrMsg('') + scrMsg() ENDIF setCursor(crs) + RETURN obj_ //----------------------------------------------------------------------// -STATIC FUNCTION scrTextPost(obj_,scn_,gst_,nMode) - // Good work of statistics +STATIC FUNCTION scrTextPost( obj_, scn_, gst_, nMode ) LOCAL n,i,s,s1,s2,s3,n1,nWid,nCol,nn LOCAL del_:={0},ins_:={},d_:={},ddd_ - LOCAL old_:= scn_[SCN_TEXT_BLOCK_] + LOCAL old_:= scn_[ SCN_TEXT_BLOCK_ ] - FOR i := gst_[1] TO gst_[3] + FOR i := gst_[ 1 ] TO gst_[ 3 ] n := -1 DO WHILE .t. - n := ascan(obj_,{|e_| e_[OBJ_ROW]==i ; + n := ascan( obj_, {|e_| e_[ OBJ_ROW ] == i ; .AND. ; - (VouchInRange(e_[OBJ_COL],gst_[2],gst_[4]); + ( VouchInRange(e_[OBJ_COL],gst_[2],gst_[4]); .OR. ; - VouchInRange(e_[OBJ_TO_COL],gst_[2],gst_[4])) ; + VouchInRange(e_[OBJ_TO_COL],gst_[2],gst_[4])) ; .AND.; - !VouchInArray(n,del_) }) + ! VouchInArray( n,del_ ) } ) IF n > 0 - IF obj_[n,OBJ_TYPE] == OBJ_O_TEXT - aadd(del_,n) + IF obj_[ n,OBJ_TYPE ] == OBJ_O_TEXT + aadd( del_, n ) - s1 := '' ; ; s3 := '' - s := obj_[n,OBJ_EQN] - nCol := obj_[n,OBJ_COL] + s1 := '' ; s3 := '' + s := obj_[ n, OBJ_EQN ] + nCol := obj_[ n, OBJ_COL ] - IF gst_[2] <= obj_[n,OBJ_COL] .AND. gst_[4] >= obj_[n,OBJ_TO_COL] + IF gst_[2] <= obj_[ n, OBJ_COL ] .AND. gst_[ 4 ] >= obj_[ n, OBJ_TO_COL ] // Only deletion of OBJECT // s2 := s ELSEIF gst_[2] >= nCol @@ -997,36 +1023,38 @@ STATIC FUNCTION scrTextPost(obj_,scn_,gst_,nMode) s3 := substr(s,gst_[4]-nCol+2) ENDIF - IF len(s1)>0 - aadd(ins_,scrObjBlank()) - n1 := len(ins_) - ins_[n1,OBJ_TYPE] := OBJ_O_TEXT - ins_[n1,OBJ_ROW] := obj_[n,OBJ_ROW] - ins_[n1,OBJ_COL] := obj_[n,OBJ_COL] - ins_[n1,OBJ_EQN] := s1 - ins_[n1,OBJ_ID] := 'Text' - ins_[n1,OBJ_COLOR] := 'W/B' - ins_[n1,OBJ_SECTION] := obj_[n,OBJ_SECTION] - ins_[n1,OBJ_TO_ROW] := obj_[n,OBJ_ROW ] - ins_[n1,OBJ_TO_COL] := ins_[n1,OBJ_COL]+len(s1)-1 + IF len( s1 ) > 0 + aadd( ins_,scrObjBlank() ) + n1 := len( ins_ ) + + ins_[ n1, OBJ_TYPE ] := OBJ_O_TEXT + ins_[ n1, OBJ_ROW ] := obj_[ n, OBJ_ROW ] + ins_[ n1, OBJ_COL ] := obj_[ n, OBJ_COL ] + ins_[ n1, OBJ_EQN ] := s1 + ins_[ n1, OBJ_ID ] := 'Text' + ins_[ n1, OBJ_COLOR ] := 'W/B' + ins_[ n1, OBJ_SECTION ] := obj_[ n, OBJ_SECTION ] + ins_[ n1, OBJ_TO_ROW ] := obj_[ n, OBJ_ROW ] + ins_[ n1, OBJ_TO_COL ] := ins_[ n1, OBJ_COL ] + len( s1 ) - 1 ENDIF - IF len(s3) > 0 - aadd(ins_,scrObjBlank()) - n1 := len(ins_) - ins_[n1,OBJ_TYPE] := OBJ_O_TEXT - ins_[n1,OBJ_ROW] := obj_[n,OBJ_ROW] - ins_[n1,OBJ_COL] := gst_[4]+1 - ins_[n1,OBJ_EQN] := s3 - ins_[n1,OBJ_ID] := 'Text' - ins_[n1,OBJ_COLOR] := 'W/B' - ins_[n1,OBJ_SECTION] := obj_[n,OBJ_SECTION] - ins_[n1,OBJ_TO_ROW] := obj_[n,OBJ_ROW ] - ins_[n1,OBJ_TO_COL] := ins_[n1,OBJ_COL]+len(s3)-1 + IF len( s3 ) > 0 + aadd( ins_, scrObjBlank() ) + n1 := len( ins_ ) + + ins_[ n1, OBJ_TYPE ] := OBJ_O_TEXT + ins_[ n1, OBJ_ROW ] := obj_[n, OBJ_ROW] + ins_[ n1, OBJ_COL ] := gst_[ 4 ] + 1 + ins_[ n1, OBJ_EQN ] := s3 + ins_[ n1, OBJ_ID ] := 'Text' + ins_[ n1, OBJ_COLOR ] := 'W/B' + ins_[ n1, OBJ_SECTION ] := obj_[ n, OBJ_SECTION ] + ins_[ n1, OBJ_TO_ROW ] := obj_[ n, OBJ_ROW ] + ins_[ n1, OBJ_TO_COL ] := ins_[ n1, OBJ_COL ] + len( s3 ) - 1 ENDIF ELSEIF obj_[n,OBJ_TYPE] == OBJ_O_FIELD .OR. obj_[n,OBJ_TYPE] == OBJ_O_EXP - aadd(del_,n) + aadd( del_, n ) ELSEIF obj_[n,OBJ_TYPE] == OBJ_O_BOX @@ -1138,23 +1166,24 @@ STATIC FUNCTION scrTextPost(obj_,scn_,gst_,nMode) IF nMode <> 0 del_:={} ENDIF - aeval(ddd_,{|e| aadd(del_,e) }) + aeval( ddd_,{|e| aadd( del_, e ) } ) - IF !empty(del_) - FOR i := 1 TO len(obj_) - IF ascan(del_,i) == 0 - aadd(d_,obj_[i]) + IF !empty( del_ ) + FOR i := 1 TO len( obj_) + IF ascan( del_, i ) == 0 + aadd( d_, obj_[ i ] ) ENDIF NEXT - obj_:= aclone(d_) - IF empty(obj_) - aadd(obj_,scrObjBlank()) + obj_:= aclone( d_ ) + IF empty( obj_ ) + aadd( obj_, scrObjBlank() ) ENDIF ENDIF - aeval(ins_,{|e_| aadd(obj_,e_) }) + aeval( ins_, {|e_| aadd( obj_, e_ ) } ) scn_[SCN_TEXT_BLOCK_] := {} + RETURN obj_ //----------------------------------------------------------------------// diff --git a/harbour/contrib/hbcuied/cu_field.prg b/harbour/contrib/hbcuied/cu_field.prg deleted file mode 100644 index 4898dd3524..0000000000 --- a/harbour/contrib/hbcuied/cu_field.prg +++ /dev/null @@ -1,521 +0,0 @@ -/* - * $Id$ - */ - -/* - * Harbour Project source code: - * CUI Forms Editor - * - * Copyright 2011 Pritpal Bedi - * http://harbour-project.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). - * - * As a special exception, the Harbour Project gives permission for - * additional uses of the text contained in its release of Harbour. - * - * The exception is that, if you link the Harbour libraries with other - * files to produce an executable, this does not by itself cause the - * resulting executable to be covered by the GNU General Public License. - * Your use of that executable is in no way restricted on account of - * linking the Harbour library code into it. - * - * This exception does not however invalidate any other reasons why - * the executable file might be covered by the GNU General Public License. - * - * This exception applies only to the code released by the Harbour - * Project under the name Harbour. If you copy code from other - * Harbour Project or Free Software Foundation releases into a copy of - * Harbour, as the General Public License permits, the exception does - * not apply to the code that you add in this way. To avoid misleading - * anyone as to the status of such modified files, you must delete - * this exception notice from them. - * - * If you write modifications of your own for Harbour, it is your choice - * whether to permit this exception to apply to your modifications. - * If you do not wish that, delete this exception notice. - * - */ -/*----------------------------------------------------------------------*/ -/*----------------------------------------------------------------------*/ -/*----------------------------------------------------------------------*/ -/* - * EkOnkar - * ( The LORD is ONE ) - * - * Harbour CUI Editor Source - * - * Pritpal Bedi - * 13Aug2011 - */ -/*----------------------------------------------------------------------*/ -/*----------------------------------------------------------------------*/ -/*----------------------------------------------------------------------*/ - -#include "hbcuied.ch" -#include "common.ch" - -/*----------------------------------------------------------------------*/ - -#define FLD_UNIQUE 1 // N 4 - -#define FLD_ALIAS 2 // C 8 -#define FLD_HEADING 3 // C 15 -#define FLD_TYPE 4 // C 1 -#define FLD_LEN 5 // N 3 -#define FLD_DEC 6 // N 3 -#define FLD_ORD_NAT 7 // N 3 -#define FLD_FLD_NO 8 // N 3 - -#define FLD_INDEXED 9 // L 1 -#define FLD_INDEX_NO 10 // N 3 - -#define FLD_CONFIGURE 11 // L 1 -#define FLD_CALCULATED 12 // L 1 -#define FLD_TRIGGER 13 // L 1 - -#define FLD_ORD_GET 14 // N 3 -#define FLD_EDITABLE 15 // L 1 -#define FLD_DATA 16 // C 60 -#define FLD_WHEN 17 // C 100 -#define FLD_VALID 18 // C 100 - -#define FLD_ORD_BRW 19 // N 3 -#define FLD_BROWSE 20 // L 1 -#define FLD_BRW_INIT 21 // L 1 -#define FLD_BRW_VIS 22 // L 1 - -#define FLD_HELP 23 // C 8 -#define FLD_PG_TOTAL 24 // L 1 - -#define FLD_F_FLD 25 // N 3 -#define FLD_F_ALIAS 26 // C 8 -#define FLD_F_LOOK_FLD 27 // N 3 -#define FLD_F_RTN_FLD 28 // N 3 - -#define FLD_ENCRYPTED 29 // L 1 -#define FLD_ENK_BASE 30 // N 3 -#define FLD_ENK_ALOG 31 // N 3 -#define FLD_FLD_ATTR 32 // N 2 - // --- - // 352 -#define FLD_INIT_VRBLS 32 - -/*----------------------------------------------------------------------*/ - -#define FLD_LEN_UNIQUE 4 - -#define FLD_LEN_ALIAS 8 -#define FLD_LEN_HEADING 15 -#define FLD_LEN_TYPE 1 -#define FLD_LEN_LEN 3 -#define FLD_LEN_DEC 2 -#define FLD_LEN_ORD_NAT 3 -#define FLD_LEN_FLD_NO 3 - -#define FLD_LEN_INDEXED 1 -#define FLD_LEN_INDEX_NO 3 - -#define FLD_LEN_CONFIGURE 1 -#define FLD_LEN_CALCULATED 1 -#define FLD_LEN_TRIGGER 1 - -#define FLD_LEN_ORD_GET 3 -#define FLD_LEN_EDITABLE 1 -#define FLD_LEN_DATA 60 -#define FLD_LEN_WHEN 100 -#define FLD_LEN_VALID 100 - -#define FLD_LEN_ORD_BRW 3 -#define FLD_LEN_BROWSE 1 -#define FLD_LEN_BRW_INIT 1 -#define FLD_LEN_BRW_VIS 1 - -#define FLD_LEN_HELP 8 -#define FLD_LEN_PG_TOTAL 1 - -#define FLD_LEN_F_FLD 3 -#define FLD_LEN_F_ALIAS 8 -#define FLD_LEN_F_LOOK_FLD 3 -#define FLD_LEN_F_RTN_FLD 3 - -#define FLD_LEN_ENCRYPTED 1 -#define FLD_LEN_ENK_BASE 3 -#define FLD_LEN_ENK_ALOG 3 - -#define FLD_LEN_FLD_ATTR 2 - -/*----------------------------------------------------------------------*/ - -#define FLD_OS_UNIQUE 1 // 4 - -#define FLD_OS_ALIAS 5 // 8 -#define FLD_OS_HEADING 13 // 15 -#define FLD_OS_TYPE 28 // 1 -#define FLD_OS_LEN 29 // 3 -#define FLD_OS_DEC 32 // 2 -#define FLD_OS_ORD_NAT 34 // 3 -#define FLD_OS_FLD_NO 37 // 3 - -#define FLD_OS_INDEXED 40 // 1 -#define FLD_OS_INDEX_NO 41 // 3 - -#define FLD_OS_CONFIGURE 44 // 1 -#define FLD_OS_CALCULATED 45 // 1 -#define FLD_OS_TRIGGER 46 // 1 - -#define FLD_OS_ORD_GET 47 // 3 -#define FLD_OS_EDITABLE 50 // 1 -#define FLD_OS_DATA 51 // 60 -#define FLD_OS_WHEN 111 //-----100 -#define FLD_OS_VALID 211 //-----100 - -#define FLD_OS_ORD_BRW 311 // 3 -#define FLD_OS_BROWSE 314 // 1 -#define FLD_OS_BRW_INIT 315 // 1 -#define FLD_OS_BRW_VIS 316 // 1 - -#define FLD_OS_HELP 317 // 8 -#define FLD_OS_PG_TOTAL 325 // 1 - -#define FLD_OS_F_FLD 326 // 3 -#define FLD_OS_F_ALIAS 329 // 8 -#define FLD_OS_F_LOOK_FLD 337 // 3 -#define FLD_OS_F_RTN_FLD 340 // 3 - -#define FLD_OS_ENCRYPTED 343 // 1 -#define FLD_OS_ENK_BASE 344 // 3 -#define FLD_OS_ENK_ALOG 347 // 3 -#define FLD_OS_FLD_ATTR 350 // 2 - - -//----------------------------------------------------------------------// - -#define PRM_TYPE 1 // C 1 -#define PRM_ALIAS 2 // C 8 -#define PRM_DESC 3 // C 35 -#define PRM_FILE_1 4 // C 8 -#define PRM_FILE_2 5 // C 8 -#define PRM_FILE_3 6 // C 8 -#define PRM_PK 7 // N 3 -#define PRM_DK 8 // N 3 -#define PRM_PROTO 9 // N 2 -#define PRM_PATH 10 // C 80 -#define PRM_DELETE 11 // C 80 -#define PRM_PREVALIDATE 12 // C 80 -#define PRM_INITIALIZE 13 // C 80 -#define PRM_ATTACHED 14 // L 1 -#define PRM_MODE 15 // C 1 -#define PRM_SHORT 16 // C 3 - -#define PRM_INIT_VRBLS 16 - -//----------------------------------------------------------------------// - -#define PRM_LEN_TYPE 1 -#define PRM_LEN_ALIAS 8 // C 8 -#define PRM_LEN_DESC 35 // C 35 -#define PRM_LEN_FILE_1 8 // C 8 -#define PRM_LEN_FILE_2 8 // C 8 -#define PRM_LEN_FILE_3 8 // C 8 -#define PRM_LEN_PK 3 // N 3 -#define PRM_LEN_DK 3 // N 3 -#define PRM_LEN_PROTO 2 // N 2 -#define PRM_LEN_PATH 80 // C 80 -#define PRM_LEN_DELETE 80 // C 80 -#define PRM_LEN_PREVALIDATE 80 // C 80 -#define PRM_LEN_INITIALIZE 80 // C 80 -#define PRM_LEN_ATTACHED 1 // L 1 -#define PRM_LEN_MODE 1 // C 1 -#define PRM_LEN_SHORT 3 // C 3 - -//----------------------------------------------------------------------// - -#define PRM_OS_TYPE 1 // C 1 -#define PRM_OS_ALIAS 2 // C 8 -#define PRM_OS_DESC 10 // C 35 -#define PRM_OS_FILE_1 45 // C 8 -#define PRM_OS_FILE_2 53 // C 8 -#define PRM_OS_FILE_3 61 // C 8 -#define PRM_OS_PK 69 // N 3 -#define PRM_OS_DK 72 // N 3 -#define PRM_OS_PROTO 75 // N 2 -#define PRM_OS_PATH 77 // C 80 -#define PRM_OS_DELETE 157 // C 80 -#define PRM_OS_PREVALIDATE 237 // C 80 -#define PRM_OS_INITIALIZE 317 // C 80 -#define PRM_OS_ATTACHED 397 // L 1 -#define PRM_OS_MODE 398 // C 1 -#define PRM_OS_SHORT 399 // C 3 - -//----------------------------------------------------------------------// - -#define FATR_CHR 1 -#define FATR_DTE 2 -#define FATR_NUM 3 -#define FATR_LOG 4 -#define FATR_PKS 5 -#define FATR_PKM 6 -#define FATR_DTF 7 -#define FATR_FRN 8 -#define FATR_INF 9 -#define FATR_SUM 10 -#define FATR_TRG 11 -#define FATR_REF 12 -#define FATR_OPN 13 - -//----------------------------------------------------------------------// - -FUNCTION scrMdlFld( obj_, scn_, nObj ) - LOCAL v_, n, sel_ - - sel_:= scrVvSelAble( scn_ ) - v_ := IF( nObj > 0, scrObj2Vv( obj_[ nObj ] ), scrVvBlank() ) - n := v_[ VV_FIELD ] - IF nObj == 0 - v_[ VV_FIELD ] := 0 - v_[ VV_ID ] := space( 10 ) - v_[ VV_F_PIC ] := space( 15 ) - v_[ VV_COLOR ] := 'N/W ' - ENDIF - - IF .T. - v_[ VV_EQN ] := 'fieldget('+ ltrim( str( n ) ) + ')' - - sel_[ VV_ALIGN ] := .f. - sel_[ VV_PRN_LEN ] := .f. -// sel_[ VV_ID ] := .f. - sel_[ VV_PRN_LEN ] := .f. - sel_[ VV_ALIGN ] := .f. - sel_[ VV_COLOR ] := .f. - sel_[ VV_POINT ] := .f. - sel_[ VV_COL_JUST ] := .f. - sel_[ VV_PATTERN ] := .f. - sel_[ VV_F_TYPE ] := .T. - - scrField( nObj, 1, obj_, scn_, v_, sel_, OBJ_CLR_FIELD ) - IF nObj > 0 - scrOrdObj( obj_ ) - ENDIF - ENDIF - RETURN NIL - -//----------------------------------------------------------------------// - -STATIC FUNCTION scrFldUnique(obj_) - LOCAL nUnq := 2001 - DO WHILE .t. - IF ascan(obj_,{|e_| e_[OBJ_OBJ_UNIQUE] == nUnq }) == 0 - EXIT - ENDIF - nUnq++ - ENDDO - RETURN nUnq - -//----------------------------------------------------------------------// -#IF 0 -STATIC FUNCTION prpObj2Fld( obj_ ) // Akin TO Blank - - LOCAL v_:= array( FLD_INIT_VRBLS ) - LOCAL idx_:={ .f.,.f.,.f.,.f.,.t.,.t.,.t.,.t.,.f.,.f.,.f.,.f.,.f. } - LOCAL nAttr := obj_[ OBJ_MDL_F_TYPE ] - - v_[FLD_UNIQUE ] := obj_[OBJ_OBJ_UNIQUE] - v_[FLD_ALIAS ] := space(8) - v_[FLD_HEADING ] := obj_[OBJ_ID] - v_[FLD_TYPE ] := obj_[OBJ_F_TYPE] - v_[FLD_LEN ] := obj_[OBJ_F_LEN] - v_[FLD_DEC ] := obj_[OBJ_F_DEC] - v_[FLD_ORD_NAT ] := 0 - v_[FLD_FLD_NO ] := 0 - v_[FLD_INDEXED ] := idx_[nAttr] - v_[FLD_INDEX_NO ] := 0 - v_[FLD_CONFIGURE ] := VouchInArray(nAttr,{FATR_NUM,FATR_LOG,FATR_CHR,; - FATR_DTE,FATR_REF,FATR_TRG,FATR_INF}) - v_[FLD_CALCULATED ] := VouchInArray(nAttr,{FATR_NUM,FATR_LOG,FATR_CHR,; - FATR_DTE,FATR_INF}) - v_[FLD_TRIGGER ] := nAttr == FATR_TRG .OR. nAttr == FATR_REF - v_[FLD_ORD_GET ] := 0 - v_[FLD_EDITABLE ] := !VouchInArray(nAttr,{FATR_PKS,FATR_PKM}) - v_[FLD_DATA ] := space(FLD_LEN_DATA) - v_[FLD_WHEN ] := space(FLD_LEN_WHEN) - v_[FLD_VALID ] := space(FLD_LEN_VALID) - v_[FLD_ORD_BRW ] := 0 - v_[FLD_BROWSE ] := nAttr <> FATR_TRG .OR. nAttr <> FATR_REF - v_[FLD_BRW_INIT ] := nAttr <> FATR_TRG .OR. nAttr <> FATR_REF - v_[FLD_BRW_VIS ] := nAttr <> FATR_TRG .OR. nAttr <> FATR_REF - v_[FLD_HELP ] := space(8) - v_[FLD_PG_TOTAL ] := obj_[OBJ_F_TYPE]=='N' - v_[FLD_F_FLD ] := 0 - v_[FLD_F_ALIAS ] := space(8) - v_[FLD_F_LOOK_FLD ] := 0 - v_[FLD_F_RTN_FLD ] := 0 - v_[FLD_ENCRYPTED ] := .t. - v_[FLD_ENK_BASE ] := b_rand(254) - v_[FLD_ENK_ALOG ] := b_rand(19) - v_[FLD_FLD_ATTR ] := nAttr - RETURN v_ -#ENDIF -//----------------------------------------------------------------------// - -FUNCTION prpFld2Str(v_) - LOCAL s := ; - str(v_[FLD_UNIQUE ], FLD_LEN_UNIQUE )+ ; - pad(v_[FLD_ALIAS ], FLD_LEN_ALIAS )+ ; - pad(v_[FLD_HEADING ], FLD_LEN_HEADING )+ ; - pad(v_[FLD_TYPE ], FLD_LEN_TYPE )+ ; - str(v_[FLD_LEN ], FLD_LEN_LEN )+ ; - str(v_[FLD_DEC ], FLD_LEN_DEC )+ ; - str(v_[FLD_ORD_NAT ], FLD_LEN_ORD_NAT )+ ; - str(v_[FLD_FLD_NO ], FLD_LEN_FLD_NO )+ ; - IF(v_[FLD_INDEXED ], 'T', 'F' )+ ; - str(v_[FLD_INDEX_NO ], FLD_LEN_INDEX_NO )+ ; - IF(v_[FLD_CONFIGURE ], 'T', 'F' )+ ; - IF(v_[FLD_CALCULATED ], 'T', 'F' )+ ; - IF(v_[FLD_TRIGGER ], 'T', 'F' )+ ; - str(v_[FLD_ORD_GET ], FLD_LEN_ORD_GET )+ ; - IF(v_[FLD_EDITABLE ], 'T', 'F' )+ ; - pad(v_[FLD_DATA ], FLD_LEN_DATA )+ ; - pad(v_[FLD_WHEN ], FLD_LEN_WHEN )+ ; - pad(v_[FLD_VALID ], FLD_LEN_VALID )+ ; - str(v_[FLD_ORD_BRW ], FLD_LEN_ORD_BRW )+ ; - IF(v_[FLD_BROWSE ], 'T', 'F' )+ ; - IF(v_[FLD_BRW_INIT ], 'T', 'F' )+ ; - IF(v_[FLD_BRW_VIS ], 'T', 'F' )+ ; - pad(v_[FLD_HELP ], FLD_LEN_HELP )+ ; - IF(v_[FLD_PG_TOTAL ], 'T', 'F' )+ ; - str(v_[FLD_F_FLD ], FLD_LEN_F_FLD )+ ; - pad(v_[FLD_F_ALIAS ], FLD_LEN_F_ALIAS )+ ; - str(v_[FLD_F_LOOK_FLD ], FLD_LEN_F_LOOK_FLD )+ ; - str(v_[FLD_F_RTN_FLD ], FLD_LEN_F_RTN_FLD )+ ; - IF(v_[FLD_ENCRYPTED ], 'T', 'F' )+ ; - str(v_[FLD_ENK_BASE ], FLD_LEN_ENK_BASE )+ ; - str(v_[FLD_ENK_ALOG ], FLD_LEN_ENK_ALOG )+ ; - str(v_[FLD_FLD_ATTR ], FLD_LEN_FLD_ATTR ) - RETURN s - -//----------------------------------------------------------------------// - -FUNCTION prpStr2Fld(s) - LOCAL v_:= array(FLD_INIT_VRBLS) - - v_[FLD_UNIQUE ] := val(substr(s, FLD_OS_UNIQUE , FLD_LEN_UNIQUE )) - v_[FLD_ALIAS ] := substr(s, FLD_OS_ALIAS , FLD_LEN_ALIAS ) - v_[FLD_HEADING ] := substr(s, FLD_OS_HEADING , FLD_LEN_HEADING ) - v_[FLD_TYPE ] := substr(s, FLD_OS_TYPE , FLD_LEN_TYPE ) - v_[FLD_LEN ] := val(substr(s, FLD_OS_LEN , FLD_LEN_LEN )) - v_[FLD_DEC ] := val(substr(s, FLD_OS_DEC , FLD_LEN_DEC )) - v_[FLD_ORD_NAT ] := val(substr(s, FLD_OS_ORD_NAT , FLD_LEN_ORD_NAT )) - v_[FLD_FLD_NO ] := val(substr(s, FLD_OS_FLD_NO , FLD_LEN_FLD_NO )) - v_[FLD_INDEXED ] := substr(s, FLD_OS_INDEXED , FLD_LEN_INDEXED )=='T' - v_[FLD_INDEX_NO ] := val(substr(s, FLD_OS_INDEX_NO , FLD_LEN_INDEX_NO )) - v_[FLD_CONFIGURE ] := substr(s, FLD_OS_CONFIGURE , FLD_LEN_CONFIGURE )=='T' - v_[FLD_CALCULATED ] := substr(s, FLD_OS_CALCULATED , FLD_LEN_CALCULATED)=='T' - v_[FLD_TRIGGER ] := substr(s, FLD_OS_TRIGGER , FLD_LEN_TRIGGER )=='T' - v_[FLD_ORD_GET ] := val(substr(s, FLD_OS_ORD_GET , FLD_LEN_ORD_GET )) - v_[FLD_EDITABLE ] := substr(s, FLD_OS_EDITABLE , FLD_LEN_EDITABLE )=='T' - v_[FLD_DATA ] := substr(s, FLD_OS_DATA , FLD_LEN_DATA ) - v_[FLD_WHEN ] := substr(s, FLD_OS_WHEN , FLD_LEN_WHEN ) - v_[FLD_VALID ] := substr(s, FLD_OS_VALID , FLD_LEN_VALID ) - v_[FLD_ORD_BRW ] := val(substr(s, FLD_OS_ORD_BRW , FLD_LEN_ORD_BRW )) - v_[FLD_BROWSE ] := substr(s, FLD_OS_BROWSE , FLD_LEN_BROWSE )=='T' - v_[FLD_BRW_INIT ] := substr(s, FLD_OS_BRW_INIT , FLD_LEN_BRW_INIT )=='T' - v_[FLD_BRW_VIS ] := substr(s, FLD_OS_BRW_VIS , FLD_LEN_BRW_VIS )=='T' - v_[FLD_HELP ] := substr(s, FLD_OS_HELP , FLD_LEN_HELP ) - v_[FLD_PG_TOTAL ] := substr(s, FLD_OS_PG_TOTAL , FLD_LEN_PG_TOTAL )=='T' - v_[FLD_F_FLD ] := val(substr(s, FLD_OS_F_FLD , FLD_LEN_F_FLD )) - v_[FLD_F_ALIAS ] := substr(s, FLD_OS_F_ALIAS , FLD_LEN_F_ALIAS ) - v_[FLD_F_LOOK_FLD ] := val(substr(s, FLD_OS_F_LOOK_FLD , FLD_LEN_F_LOOK_FLD)) - v_[FLD_F_RTN_FLD ] := val(substr(s, FLD_OS_F_RTN_FLD , FLD_LEN_F_RTN_FLD )) - v_[FLD_ENCRYPTED ] := substr(s, FLD_OS_ENCRYPTED , FLD_LEN_ENCRYPTED )=='T' - v_[FLD_ENK_BASE ] := val(substr(s, FLD_OS_ENK_BASE , FLD_LEN_ENK_BASE )) - v_[FLD_ENK_ALOG ] := val(substr(s, FLD_OS_ENK_ALOG , FLD_LEN_ENK_ALOG )) - v_[FLD_FLD_ATTR ] := val(substr(s, FLD_OS_FLD_ATTR , FLD_LEN_FLD_ATTR )) - - RETURN v_ - -//----------------------------------------------------------------------// - -FUNCTION prpMdlBlank() - LOCAL v_:= array(PRM_INIT_VRBLS) - - v_[PRM_TYPE ] := 'S' - v_[PRM_ALIAS ] := 'Z7_NEW ' - v_[PRM_DESC ] := 'The NEXT Module ' - v_[PRM_FILE_1 ] := 'Z7A00001' - v_[PRM_FILE_2 ] := 'Z7B00002' - v_[PRM_FILE_3 ] := 'Z7_NEW ' - v_[PRM_PK ] := 1 - v_[PRM_DK ] := 2 - v_[PRM_PROTO ] := 0 - v_[PRM_PATH ] := space(PRM_LEN_PATH) - v_[PRM_DELETE ] := space(PRM_LEN_DELETE) - v_[PRM_PREVALIDATE] := space(PRM_LEN_PREVALIDATE) - v_[PRM_INITIALIZE ] := space(PRM_LEN_INITIALIZE) - v_[PRM_ATTACHED ] := .f. - v_[PRM_MODE ] := 'V' - v_[PRM_SHORT ] := 'XXX' - - RETURN v_ - -//----------------------------------------------------------------------// - -FUNCTION prpMdl2Str(v_) - LOCAL s := ; - pad(v_[PRM_TYPE ], PRM_LEN_TYPE ) +; - pad(v_[PRM_ALIAS ], PRM_LEN_ALIAS ) +; - pad(v_[PRM_DESC ], PRM_LEN_DESC ) +; - pad(v_[PRM_FILE_1 ], PRM_LEN_FILE_1 ) +; - pad(v_[PRM_FILE_2 ], PRM_LEN_FILE_2 ) +; - pad(v_[PRM_FILE_3 ], PRM_LEN_FILE_3 ) +; - str(v_[PRM_PK ], PRM_LEN_PK ) +; - str(v_[PRM_DK ], PRM_LEN_DK ) +; - str(v_[PRM_PROTO ], PRM_LEN_PROTO ) +; - pad(v_[PRM_PATH ], PRM_LEN_PATH ) +; - pad(v_[PRM_DELETE ], PRM_LEN_DELETE ) +; - pad(v_[PRM_PREVALIDATE], PRM_LEN_PREVALIDATE) +; - pad(v_[PRM_INITIALIZE ], PRM_LEN_INITIALIZE ) +; - IF(v_[PRM_ATTACHED ],'T','F') +; - pad(v_[PRM_MODE ], PRM_LEN_MODE ) +; - pad(v_[PRM_SHORT ], PRM_LEN_SHORT ) - RETURN s - -//----------------------------------------------------------------------// - -FUNCTION prpStr2Mdl(s) - LOCAL v_:= array(PRM_INIT_VRBLS) - - v_[PRM_TYPE ] := substr(s, PRM_OS_TYPE , PRM_LEN_TYPE ) - v_[PRM_ALIAS ] := substr(s, PRM_OS_ALIAS , PRM_LEN_ALIAS ) - v_[PRM_DESC ] := substr(s, PRM_OS_DESC , PRM_LEN_DESC ) - v_[PRM_FILE_1 ] := substr(s, PRM_OS_FILE_1 , PRM_LEN_FILE_1 ) - v_[PRM_FILE_2 ] := substr(s, PRM_OS_FILE_2 , PRM_LEN_FILE_2 ) - v_[PRM_FILE_3 ] := substr(s, PRM_OS_FILE_3 , PRM_LEN_FILE_3 ) - v_[PRM_PK ] := val(substr(s, PRM_OS_PK , PRM_LEN_PK )) - v_[PRM_DK ] := val(substr(s, PRM_OS_DK , PRM_LEN_DK )) - v_[PRM_PROTO ] := val(substr(s, PRM_OS_PROTO , PRM_LEN_PROTO )) - v_[PRM_PATH ] := substr(s, PRM_OS_PATH , PRM_LEN_PATH ) - v_[PRM_DELETE ] := substr(s, PRM_OS_DELETE , PRM_LEN_DELETE ) - v_[PRM_PREVALIDATE] := substr(s, PRM_OS_PREVALIDATE, PRM_LEN_PREVALIDATE) - v_[PRM_INITIALIZE ] := substr(s, PRM_OS_INITIALIZE , PRM_LEN_INITIALIZE ) - v_[PRM_ATTACHED ] := substr(s, PRM_OS_ATTACHED , PRM_LEN_ATTACHED ) == 'T' - v_[PRM_MODE ] := substr(s, PRM_OS_MODE , PRM_LEN_MODE ) - v_[PRM_SHORT ] := substr(s, PRM_OS_SHORT , PRM_LEN_SHORT ) - - RETURN v_ - -//----------------------------------------------------------------------// - diff --git a/harbour/contrib/hbcuied/cu_menu.prg b/harbour/contrib/hbcuied/cu_menu.prg index 865c188fbf..38298a22eb 100644 --- a/harbour/contrib/hbcuied/cu_menu.prg +++ b/harbour/contrib/hbcuied/cu_menu.prg @@ -119,60 +119,34 @@ STATIC FUNCTION rptInit() //---------------------------------------------------------------------// -STATIC FUNCTION s2sct(s) - LOCAL sct_:= array( SCT_INIT_VRBLS ) - - sct_[SCT_ORDER] := val(substr(s,SCT_OS_ORDER,SCT_LEN_ORDER)) - sct_[SCT_ID ] := substr(s,SCT_OS_ID ,SCT_LEN_ID ) - sct_[SCT_SAY ] := substr(s,SCT_OS_SAY ,SCT_LEN_SAY ) - sct_[SCT_ROWS ] := val(substr(s,SCT_OS_ROWS ,SCT_LEN_ROWS )) - sct_[SCT_COLOR] := substr(s,SCT_OS_COLOR,SCT_LEN_COLOR) - sct_[SCT_EQN ] := substr(s,SCT_OS_EQN ,SCT_LEN_EQN ) - sct_[SCT_EJECT] := substr(s,SCT_OS_EJECT,SCT_LEN_EJECT) == 'T' - sct_[SCT_RESET] := substr(s,SCT_OS_RESET,SCT_LEN_RESET) == 'T' - - RETURN sct_ - -//---------------------------------------------------------------------// - -STATIC FUNCTION sct2s(sct_) - LOCAL s := ; - str(sct_[SCT_ORDER],SCT_LEN_ORDER) + ; - pad(sct_[SCT_ID ],SCT_LEN_ID ) + ; - pad(sct_[SCT_SAY ],SCT_LEN_SAY ) + ; - str(sct_[SCT_ROWS ],SCT_LEN_ROWS ) + ; - pad(sct_[SCT_COLOR],SCT_LEN_COLOR) + ; - pad(sct_[SCT_EQN ],SCT_LEN_EQN ) + ; - IF(sct_[SCT_EJECT],'T','F' ) + ; - IF(sct_[SCT_RESET],'T','F' ) - RETURN s - -//---------------------------------------------------------------------// - FUNCTION rpt2ObjScn( cObject,rpt_,nMode,struct_,cRpt,nWhere,lMsg ) LOCAL obj_,scn_:={} - LOCAL i, n + LOCAL n HB_SYMBOL_UNUSED( struct_ ) - rpt_:= iif(rpt_ == NIL .OR. empty(rpt_), rptInit(), rpt_) + rpt_:= iif( rpt_ == NIL .OR. empty( rpt_ ), rptInit(), rpt_ ) obj_:= scrScn2obj(rpt_,0) DO CASE CASE nMode == REP_FOR_MDL - scn_:= scrConfig(obj_,DGN_MODULE) - IF (n := ascan(rpt_,{|e_| e_[2]==1 })) > 0 - scn_[SCN_PROPERTY] := eval(COMPILE(rpt_[n,3])) + scn_:= scrConfig( obj_,DGN_MODULE ) + IF (n := ascan( rpt_, {|e_| e_[2]==1 } ) ) > 0 + scn_[ SCN_PROPERTY ] := eval( COMPILE( rpt_[ n,3 ] ) ) ENDIF + #if 0 IF (n := ascan(rpt_,{|e_| e_[2]== 51 })) > 0 // Property - scn_[SCN_PROPERTY] := prpStr2Mdl(rpt_[n,3]) + scn_[ SCN_PROPERTY ] := prpStr2Mdl( rpt_[ n,3 ] ) ENDIF - FOR i := 1 TO len(rpt_) // Fields - IF VouchInRange(rpt_[i,2],2001,3000) - aadd(scn_[SCN_FIELDS], prpStr2Fld(rpt_[i,3])) + #endif + #if 0 + FOR i := 1 TO len( rpt_ ) // Fields + IF VouchInRange( rpt_[i,2], 2001,3000 ) + aadd( scn_[ SCN_FIELDS ], prpStr2Fld( rpt_[ i,3 ] ) ) ENDIF NEXT + #endif ENDCASE @@ -188,20 +162,26 @@ FUNCTION rpt2ObjScn( cObject,rpt_,nMode,struct_,cRpt,nWhere,lMsg ) //----------------------------------------------------------------------// -FUNCTION objScn2Rpt(obj_,scn_,nMode) - LOCAL rpt_:={}, i //, s +FUNCTION objScn2Rpt( obj_, scn_, nMode ) + LOCAL rpt_:={} + + HB_SYMBOL_UNUSED( scn_ ) DO CASE CASE nMode == REP_FOR_MDL - aeval(obj_,{|e_| iif(e_[OBJ_ROW]==0,'',aadd(rpt_,{'',0,scrObj2str(e_)} )) }) - IF !empty(scn_[SCN_PROPERTY]) - aadd(rpt_, {'',51,prpMdl2Str(scn_[SCN_PROPERTY]) }) + aeval( obj_, {|e_| iif( e_[ OBJ_ROW ] == 0, '', aadd( rpt_, { '', 0, scrObj2str( e_ ) } ) ) } ) + #if 0 + IF ! empty( scn_[ SCN_PROPERTY ] ) + aadd(rpt_, { '', 51, prpMdl2Str( scn_[ SCN_PROPERTY ] ) } ) ENDIF + #endif + #if 0 IF !empty(scn_[SCN_FIELDS]) FOR i := 1 TO len(scn_[SCN_FIELDS]) aadd(rpt_,{'',scn_[SCN_FIELDS,i,1], prpFld2Str(scn_[SCN_FIELDS,i]) }) NEXT ENDIF + #endif ENDCASE RETURN rpt_ diff --git a/harbour/contrib/hbcuied/cu_object.prg b/harbour/contrib/hbcuied/cu_object.prg new file mode 100644 index 0000000000..ae4c16fc01 --- /dev/null +++ b/harbour/contrib/hbcuied/cu_object.prg @@ -0,0 +1,1405 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * CUI Forms Editor + * + * Copyright 2011 Pritpal Bedi + * http://harbour-project.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). + * + * As a special exception, the Harbour Project gives permission for + * additional uses of the text contained in its release of Harbour. + * + * The exception is that, if you link the Harbour libraries with other + * files to produce an executable, this does not by itself cause the + * resulting executable to be covered by the GNU General Public License. + * Your use of that executable is in no way restricted on account of + * linking the Harbour library code into it. + * + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + * + * This exception applies only to the code released by the Harbour + * Project under the name Harbour. If you copy code from other + * Harbour Project or Free Software Foundation releases into a copy of + * Harbour, as the General Public License permits, the exception does + * not apply to the code that you add in this way. To avoid misleading + * anyone as to the status of such modified files, you must delete + * this exception notice from them. + * + * If you write modifications of your own for Harbour, it is your choice + * whether to permit this exception to apply to your modifications. + * If you do not wish that, delete this exception notice. + * + */ +/*----------------------------------------------------------------------*/ +/*----------------------------------------------------------------------*/ +/*----------------------------------------------------------------------*/ +/* + * EkOnkar + * ( The LORD is ONE ) + * + * Harbour CUI Editor Source + * + * Pritpal Bedi + * 13Aug2011 + */ +/*----------------------------------------------------------------------*/ +/*----------------------------------------------------------------------*/ +/*----------------------------------------------------------------------*/ + +#include "hbcuied.ch" +#include "common.ch" +#include "inkey.ch" +#include "hbclass.ch" + +//----------------------------------------------------------------------// + +CLASS CUIScreen + + DATA SECTORS_ INIT {} + DATA DESIGN INIT 1 + DATA FOR_ROWS INIT { { 0,"" } } + DATA TOP INIT 1 + DATA LEFT INIT 0 + DATA BOTTOM INIT maxrow() - 2 + DATA RIGHT INIT maxcol() + DATA MODE INIT 0 + DATA ROW_CUR INIT ::TOP + DATA COL_CUR INIT ::LEFT + DATA ROW_REP INIT 1 + DATA COL_REP INIT 1 + DATA ROW_DIS INIT ::TOP - 1 + DATA COL_DIS INIT ::LEFT - 1 + DATA ROW_MENU INIT 0 + DATA ROW_RULER INIT 0 + DATA STATUS_ROW INIT maxrow() - 1 + DATA STATUS_COL INIT 0 + DATA STATUS_COL_TO INIT maxcol() + DATA COL_MAX INIT 400 + DATA ROW_PREV INIT ::TOP + DATA COL_PREV INIT ::LEFT + DATA REP_LINES INIT 200 + DATA CLR_STATUS INIT "W+/BG" + DATA CLR_TEXT INIT "W+/B" + DATA CLR_BOX INIT "W/B" + DATA CLR_FIELD INIT CLR_GET + DATA CLR_HILITE INIT "GR+/BG" + DATA CLR_WINDOW INIT "W+/BG" + DATA CLR_RULER INIT "N/W" + DATA CLR_MENU INIT "W+/B" + DATA CLR_OVERALL INIT "N/W" + DATA CLR_PREV INIT "B/W" + DATA CLR_SELECT INIT "GR+/N" + DATA OBJ_HILITE INIT 0 + DATA OBJ_SELECTED INIT 0 + DATA RULER INIT "" + DATA DRAW_FILL INIT "±±±±±±±±±" + DATA OBJ_ID_ INIT { 'Bitmap','Line','Text','Field','Expression','BitMap' } + DATA REFRESH INIT OBJ_REFRESH_ALL + DATA OBJ_COPIED INIT 0 + DATA BOX_SHAPE INIT "ÚÄ¿³ÙÄÀ³" + DATA CHR_PREV INIT "" + DATA DESIGN_ID INIT "Module" + DATA FILE INIT "Untitled" + DATA PROPERTY INIT {} + DATA GRAPHICS INIT .f. + DATA TEXT_BLOCK_ INIT {} + DATA FIELDS INIT {} + DATA LASTKEY INIT 0 + + METHOD new() + + ENDCLASS + +/*----------------------------------------------------------------------*/ + +METHOD CUIScreen:new() + + + RETURN Self + +/*----------------------------------------------------------------------*/ + +CLASS CUIObject + + ENDCLASS + +/*----------------------------------------------------------------------*/ + +CLASS hbCUIEditor + + DATA obj_ + DATA scn_ + + DATA nCurObj + + + ENDCLASS + +/*----------------------------------------------------------------------*/ + +FUNCTION Operate( obj_,scn_ ) + LOCAL nObj, bError + LOCAL grf_:= { 43,45,46,48,49,50,51,52,53,54,55,56,57 } + + readinsert( .t. ) + + scrDisplay( scn_ ) + scrMove( obj_,scn_ ) + scrStatus( obj_,scn_ ) + keyboard( chr( K_UP ) ) + + bError := errorblock( {|e| break( e ) } ) + BEGIN SEQUENCE + + DO WHILE .t. + scn_[ SCN_ROW_PREV ] := scn_[ SCN_ROW_CUR ] + scn_[ SCN_COL_PREV ] := scn_[ SCN_COL_CUR ] + scn_[ SCN_REFRESH ] := OBJ_REFRESH_NIL + + setCursor( .t. ) + setCursor( IF( readInsert(),2,1 ) ) + + DO WHILE .t. + scn_[ SCN_LASTKEY ] := inkey( 0, INKEY_ALL + HB_INKEY_GTEVENT ) + IF scn_[ SCN_LASTKEY ] <> K_MOUSEMOVE + EXIT + ENDIF + ENDDO + + DO CASE + CASE scn_[ SCN_GRAPHICS ] .AND. ascan( grf_,scn_[ SCN_LASTKEY ] ) > 0 + //processkey() + + CASE scrMouse( obj_, scn_, scn_[ SCN_LASTKEY ] ) +#IF 0 + CASE scn_[ SCN_LASTKEY ] == K_ALT_F6 + graphChar() + scn_[ SCN_GRAPHICS ] := ! scn_[ SCN_GRAPHICS ] + scn_[ SCN_REFRESH ] := OBJ_REFRESH_ALL +#ENDIF + /* Save Report */ + CASE scn_[ SCN_LASTKEY ] == K_ESC + //EXIT + __KeyBoard( chr( K_CTRL_ENTER ) ) + CASE scn_[ SCN_LASTKEY ] == K_CTRL_ENTER + EXIT + + CASE scn_[ SCN_LASTKEY ] == K_RIGHT + scrMovRgt( scn_ ) + CASE scn_[ SCN_LASTKEY ] == K_LEFT + scrMovLft( scn_ ) + CASE scn_[ SCN_LASTKEY ] == K_UP + scrMovUp( scn_ ) + CASE scn_[ SCN_LASTKEY ] == K_DOWN + scrMovDn( scn_ ) + CASE scn_[ SCN_LASTKEY ] == K_MWBACKWARD + scrMovDn( scn_ ) + CASE scn_[ SCN_LASTKEY ] == K_MWFORWARD + scrMovUp( scn_ ) + CASE scn_[ SCN_LASTKEY ] == K_HOME + scn_[ SCN_COL_REP ] := 1 + scn_[ SCN_COL_CUR ] := scn_[ SCN_LEFT ] + scn_[ SCN_COL_DIS ] := scn_[ SCN_LEFT ]-1 + scn_[ SCN_REFRESH ] := OBJ_REFRESH_ALL + CASE scn_[ SCN_LASTKEY ] == K_END + scn_[SCN_COL_REP] := scn_[SCN_COL_MAX] + scn_[SCN_COL_CUR] := scn_[SCN_RIGHT] + scn_[SCN_COL_DIS] := (scn_[SCN_LEFT]-1) - (scn_[SCN_COL_REP]-(scn_[SCN_RIGHT]-scn_[SCN_LEFT]+1)) + scn_[SCN_REFRESH] := OBJ_REFRESH_ALL + CASE scn_[ SCN_LASTKEY ] == K_PGUP + // scrMovPgUp(scn_) + scn_[SCN_ROW_REP] := 1 + scn_[SCN_ROW_CUR] := scn_[SCN_TOP] + scn_[SCN_ROW_DIS] := scn_[SCN_TOP] - 1 + scn_[SCN_REFRESH] := OBJ_REFRESH_ALL + CASE scn_[ SCN_LASTKEY ] == K_PGDN + // scn_[SCN_ROW_REP] := scn_[SCN_REP_LINES] + // scn_[SCN_ROW_CUR] := scn_[SCN_BOTTOM] + + CASE scn_[ SCN_LASTKEY ] == K_INS + readInsert( !readInsert() ) + setcursor( iif( readInsert(), 2, 1 ) ) + + CASE scn_[ SCN_LASTKEY ] == K_ENTER + IF scn_[ SCN_MODE ] == OBJ_MODE_SELECT .AND. scn_[ SCN_OBJ_SELECTED ] > 0 + obj_[ scn_[ SCN_OBJ_SELECTED ], OBJ_SECTION ] := scrSecCur( scn_, scn_[ SCN_ROW_REP ] ) + scn_[ SCN_COL_MAX ] := max( scn_[ SCN_COL_MAX ], obj_[ scn_[ SCN_OBJ_SELECTED ], OBJ_TO_COL ] + 1 ) + scn_[ SCN_MODE ] := OBJ_MODE_IDLE + scn_[ SCN_REFRESH ] := OBJ_REFRESH_LINE + scn_[ SCN_OBJ_SELECTED ] := 0 + scrMsg() + ENDIF + + CASE VouchInRange( scn_[ SCN_LASTKEY ], K_SPACE, 254 ) .AND. scn_[ SCN_MODE ] <> OBJ_MODE_SELECT + scrAddTxt( obj_, scn_, scn_[ SCN_LASTKEY ], 1 ) + + CASE scn_[ SCN_LASTKEY ] == K_F1 // Help + help( 'NWREPORT' ) + + CASE scn_[ SCN_LASTKEY ] == K_F2 // Calculator + //calculate() + + CASE scn_[ SCN_LASTKEY ] == K_F3 // OBJECT + scrObject(obj_,scn_) + + CASE scn_[ SCN_LASTKEY ] == K_F4 // Properties + scrProperty( obj_,scn_ ) + + CASE scn_[ SCN_LASTKEY ] == K_F7 .OR. scn_[ SCN_LASTKEY ] == K_ALT_C // Copy + scrObjCopy(obj_,scn_) + + CASE scn_[ SCN_LASTKEY ] == K_F8 .OR. scn_[ SCN_LASTKEY ] == K_ALT_V // Paste + scrObjPas(obj_,scn_) + + CASE scn_[ SCN_LASTKEY ] == K_F9 // Box + scrAddBox( obj_,scn_,0 ) + + CASE scn_[ SCN_LASTKEY ] == K_F10 // Fields + scrAddFld( obj_,scn_,0 ) + + CASE scn_[ SCN_LASTKEY ] == K_DEL + IF ! empty( scn_[ SCN_TEXT_BLOCK_] ) + obj_:= scrTextDel( obj_,scn_ ) + scrOrdObj( obj_, scn_ ) + scn_[ SCN_MODE ] := 0 + scn_[ SCN_OBJ_SELECTED ] := 0 + scn_[ SCN_OBJ_HILITE ] := 0 + scn_[ SCN_REFRESH ] := OBJ_REFRESH_ALL + ELSEIF scrIsObjTxt( obj_,scn_ ) + scrAddTxt( obj_, scn_, scn_[ SCN_LASTKEY ], 2 ) + ELSEIF scn_[ SCN_MODE ] == OBJ_MODE_SELECT + obj_:= scrObjDel( obj_, scn_, scn_[ SCN_OBJ_SELECTED ] ) + scn_[ SCN_MODE ] := 0 + scn_[ SCN_OBJ_SELECTED ] := 0 + ELSEIF scn_[ SCN_OBJ_HILITE ] > 0 + obj_:= scrObjDel( obj_, scn_, scn_[ SCN_OBJ_HILITE ] ) + scn_[ SCN_MODE ] := 0 + scn_[ SCN_OBJ_SELECTED ] := 0 + scn_[ SCN_OBJ_HILITE ] := 0 + scn_[ SCN_REFRESH ] := OBJ_REFRESH_ALL + ENDIF + + CASE scn_[ SCN_LASTKEY ] == K_BS + IF scn_[ SCN_MODE ] <> OBJ_MODE_SELECT + IF scrMovLft( scn_ ) + IF scrIsObjTxt( obj_,scn_ ) + scrAddTxt( obj_,scn_,scn_[ SCN_LASTKEY ], 3 ) + ENDIF + ENDIF + ENDIF + + CASE scn_[ SCN_LASTKEY ] == K_ALT_B + scrAddBox( obj_, scn_, 0 ) + + CASE scn_[ SCN_LASTKEY ] == K_ALT_F + scrAddFld( obj_, scn_, 0 ) + CASE scn_[ SCN_LASTKEY ] == K_ALT_E + //scrAddExp( obj_, scn_, 0 ) + CASE scn_[ SCN_LASTKEY ] == K_ALT_N + scrAddLine( obj_, scn_ ) + CASE scn_[ SCN_LASTKEY ] == K_ALT_O + scrDelLine( obj_, scn_ ) + CASE scn_[ SCN_LASTKEY ] == K_ALT_W + scrRepCol( obj_, scn_ ) + CASE scn_[ SCN_LASTKEY ] == K_CTRL_F6 // Selection of Block + scrTextBlock( obj_, scn_ ) + CASE scn_[ SCN_LASTKEY ] == K_CTRL_F7 // Move, Copy + obj_:= scrTextMove( obj_, scn_, 1 ) + CASE scn_[ SCN_LASTKEY ] == K_CTRL_F8 // Move, Cut AND Paste + obj_:= scrTextMove( obj_, scn_, 0 ) + CASE scn_[ SCN_LASTKEY ] == K_CTRL_Z + scrExport( obj_, scn_ ) + CASE scn_[ SCN_LASTKEY ] == K_CTRL_W + scrImport( @obj_, @scn_ ) + CASE scn_[ SCN_LASTKEY ] == HB_K_RESIZE + ScrWvtConfig( obj_, scn_ ) + scrDisplay( scn_ ) + scrMove( obj_, scn_ ) + scrStatus( obj_, scn_ ) + + ENDCASE + + IF scn_[ SCN_MODE ] == OBJ_MODE_SELECT + scn_[ SCN_REFRESH ] := iif( scn_[ SCN_REFRESH ] == OBJ_REFRESH_NIL,; + OBJ_REFRESH_LINE, scn_[ SCN_REFRESH ] ) + scrUpdObjRC( obj_, scn_ ) + ENDIF + + // Check on which OBJECT cursor is placed + // + nObj := scrChkObj( obj_, scn_ ) + + IF nObj > 0 .AND. scn_[ SCN_MODE ] <> OBJ_MODE_SELECT + scn_[ SCN_REFRESH ] := iif( scn_[ SCN_REFRESH ] == OBJ_REFRESH_NIL, OBJ_REFRESH_LINE, scn_[ SCN_REFRESH ] ) + scn_[ SCN_OBJ_HILITE ] := nObj + scrOnFirstCol( obj_, scn_, nObj, { OBJ_O_FIELD, OBJ_O_EXP } ) + + ELSEIF ! empty( scn_[ SCN_OBJ_HILITE ] ) + scn_[ SCN_REFRESH ] := iif( scn_[ SCN_REFRESH ] == OBJ_REFRESH_NIL, OBJ_REFRESH_LINE, scn_[ SCN_REFRESH ] ) + scn_[ SCN_OBJ_HILITE ] := 0 + + ENDIF + + IF nObj > 0 .AND. scn_[ SCN_LASTKEY ] == K_F5 // Edit + IF obj_[ nObj, OBJ_TYPE ] == OBJ_O_FIELD + scrAddFld( obj_, scn_, nObj ) + ELSEIF obj_[ nObj, OBJ_TYPE ] == OBJ_O_TEXT + scrTxtProp( obj_, scn_, nObj ) + ELSEIF obj_[ nObj, OBJ_TYPE ] == OBJ_O_BOX + scrAddBox( obj_, scn_, nObj ) + ENDIF + ENDIF + + // Is the OBJECT selected + IF nObj > 0 .AND. scn_[ SCN_LASTKEY ] == K_F6 .AND. obj_[ nObj,OBJ_TYPE] == OBJ_O_BOX + scn_[SCN_MODE] := OBJ_MODE_SELECT + scn_[SCN_OBJ_SELECTED] := nObj + scrOnFirstCol( obj_, scn_, nObj, { OBJ_O_BOX } ) + scrMsg( "Box is Selected. Use Arrow Keys TO Move, Enter TO Finished !" ) + + ELSEIF nObj > 0 .AND. scn_[ SCN_LASTKEY ] == K_F6 .AND. ! ( obj_[ nObj,OBJ_TYPE ] == OBJ_O_BOX ) + scn_[ SCN_MODE ] := OBJ_MODE_SELECT + scn_[ SCN_OBJ_SELECTED ] := nObj + scrOnFirstCol( obj_, scn_, nObj, { OBJ_O_TEXT } ) + scrMsg( "OBJECT is Selected. Use Arrow Keys TO Move, Enter TO Finished" ) + + ENDIF + + IF scn_[ SCN_REFRESH ] == OBJ_REFRESH_ALL + scrMove( obj_, scn_ ) + ELSEIF scn_[ SCN_REFRESH ] == OBJ_REFRESH_LINE + IF scrIsBoxIn( obj_, scn_ ) + scrMove( obj_, scn_ ) + ELSE + scrMoveLine( obj_, scn_ ) + ENDIF + ENDIF + + scrStatus( obj_, scn_ ) // Status Line + + IF scn_[ SCN_GRAPHICS ] // Graphics Window + //grfRest() + ENDIF + ENDDO + + RECOVER + alert('ERROR has occured WHILE designing this document, save it anyway!') + END SEQUENCE + errorBlock( bError ) + + IF scn_[ SCN_GRAPHICS ] + //graphChar() + scn_[ SCN_GRAPHICS ] := .f. + ENDIF + + scrOrdObj( obj_ ) + + RETURN { obj_,scn_ } + +//----------------------------------------------------------------------// + +FUNCTION scrOrdObj(obj_) + + // Objects are ordered as per their type + asort( obj_,,, {|e_,f_| e_[ OBJ_TYPE ] < f_[ OBJ_TYPE ] } ) + + RETURN obj_ + +//----------------------------------------------------------------------// + +FUNCTION scrMovRgt( scn_ ) + LOCAL lMoved := .t. + + scn_[SCN_COL_CUR]++ + IF scn_[SCN_COL_CUR] > scn_[SCN_RIGHT] + IF scn_[SCN_COL_MAX] > scn_[SCN_COL_REP] + scn_[SCN_COL_DIS]-- + scn_[SCN_COL_CUR]-- + scn_[SCN_COL_REP]++ + scn_[SCN_REFRESH] := OBJ_REFRESH_ALL + ELSE + lMoved := .f. + tone( 100,1 ) + scn_[SCN_COL_CUR]-- + ENDIF + ELSE + scn_[SCN_COL_REP]++ + ENDIF + RETURN lMoved + +//----------------------------------------------------------------------// + +FUNCTION scrMovLft( scn_ ) + LOCAL lMoved := .t. + scn_[SCN_COL_CUR]-- + IF scn_[SCN_COL_CUR] < scn_[SCN_LEFT] + IF scn_[SCN_COL_REP] > 1 + scn_[SCN_COL_DIS]++ + scn_[SCN_COL_CUR]++ + scn_[SCN_COL_REP]-- + scn_[SCN_REFRESH] := OBJ_REFRESH_ALL + ELSE + lMoved := .f. + tone(200,1) + scn_[SCN_COL_CUR]++ + ENDIF + ELSE + scn_[SCN_COL_REP]-- + ENDIF + RETURN lMoved + +//----------------------------------------------------------------------// + +FUNCTION scrMovUp(scn_) + LOCAL lMoved := .t. + + scn_[SCN_ROW_CUR]-- + IF scn_[SCN_ROW_CUR] < scn_[SCN_TOP] + scn_[SCN_ROW_CUR] := scn_[SCN_TOP] + IF scn_[SCN_ROW_REP] > 1 + scn_[SCN_ROW_DIS]++ + scn_[SCN_ROW_REP]-- + scn_[SCN_REFRESH] := OBJ_REFRESH_ALL + ELSE + lMoved := .f. + tone(300,1) + ENDIF + ELSE + scn_[SCN_ROW_REP]-- + ENDIF + RETURN lMoved + +//----------------------------------------------------------------------// + +FUNCTION scrMovDn( scn_ ) + LOCAL lMoved := .t. + + scn_[ SCN_ROW_CUR ]++ + IF scn_[ SCN_ROW_CUR ] > scn_[ SCN_BOTTOM ] + scn_[ SCN_ROW_CUR ] := scn_[ SCN_BOTTOM ] + IF scn_[ SCN_ROW_REP ] < scn_[ SCN_REP_LINES ] + scn_[ SCN_ROW_DIS ]-- + scn_[ SCN_ROW_REP ]++ + scn_[ SCN_REFRESH ] := OBJ_REFRESH_ALL + ELSE + lMoved := .f. + tone(300,1) + ENDIF + ELSE + scn_[ SCN_ROW_REP ]++ + ENDIF + RETURN lMoved + +//----------------------------------------------------------------------// + +FUNCTION scrMovPgUp(scn_) + LOCAL lMoved := .f. + + IF scn_[SCN_ROW_CUR] == scn_[SCN_TOP] + IF scn_[SCN_ROW_REP] > 1 + scn_[SCN_ROW_CUR] := scn_[SCN_TOP] + scn_[SCN_ROW_REP] := 1 + scn_[SCN_ROW_DIS] := scn_[SCN_TOP] - 1 + lMoved := .t. + scn_[SCN_REFRESH] := OBJ_REFRESH_ALL + ENDIF + ELSE // IF scn_[SCN_ROW_CUR] == scn_[SCN_ROW_BOTTOM] + scn_[SCN_ROW_CUR] := scn_[SCN_TOP] + scn_[SCN_ROW_REP] := scn_[SCN_ROW_REP] - (scn_[SCN_ROW_CUR] - scn_[SCN_TOP]) + scn_[SCN_ROW_DIS] := scn_[SCN_ROW_DIS] - (scn_[SCN_ROW_CUR] - scn_[SCN_TOP]) + lMoved := .t. + ENDIF + + RETURN lMoved + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrIsObjTxt(obj_,scn_) + RETURN ascan(obj_, {|e_| e_[OBJ_TYPE]==OBJ_O_TEXT; + .AND. ; + VouchInRange(scn_[SCN_ROW_REP],e_[OBJ_ROW],e_[OBJ_TO_ROW]) ; + .AND. ; + VouchInRange(scn_[SCN_COL_REP],e_[OBJ_COL],e_[OBJ_TO_COL]) }) > 0 + +//----------------------------------------------------------------------// + +FUNCTION scrChkObj(obj_,scn_) + LOCAL n + n := ascan(obj_,{|e_| IF(e_[OBJ_TYPE]==OBJ_O_BOX .OR. e_[OBJ_TYPE]==OBJ_O_BMP,.f.,; + VouchInRange(scn_[SCN_ROW_REP],e_[OBJ_ROW],e_[OBJ_TO_ROW]) ; + .AND. ; + VouchInRange(scn_[SCN_COL_REP],e_[OBJ_COL],e_[OBJ_TO_COL])) }) + IF empty(n) // No OBJECT other than box, check box,BMP + n := ascan(obj_,{|e_| ; + VouchInRange(scn_[SCN_ROW_REP],e_[OBJ_ROW],e_[OBJ_TO_ROW]) ; + .AND. ; + VouchInRange(scn_[SCN_COL_REP],e_[OBJ_COL],e_[OBJ_TO_COL]) }) + ENDIF + RETURN n + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrUpdObjRC(obj_,scn_) + LOCAL nW, nH + LOCAL nObj := scn_[ SCN_OBJ_SELECTED ] + + IF nObj > 0 + nH := obj_[ nObj,OBJ_TO_ROW ] - obj_[ nObj,OBJ_ROW ] + nW := obj_[ nObj,OBJ_TO_COL ] - obj_[ nObj,OBJ_COL ] + + obj_[ nObj,OBJ_ROW ] := scn_[SCN_ROW_REP] + obj_[ nObj,OBJ_COL ] := scn_[SCN_COL_REP] + + IF obj_[ nObj,OBJ_TYPE ] == OBJ_O_BOX + obj_[ nObj,OBJ_TO_ROW ] := obj_[ nObj,OBJ_ROW ] + nH + obj_[ nObj,OBJ_TO_COL ] := obj_[ nObj,OBJ_COL ] + nW + ELSE + obj_[ nObj,OBJ_TO_ROW ] := scn_[SCN_ROW_REP] + obj_[ nObj,OBJ_TO_COL ] := scn_[SCN_COL_REP] + ; + len( obj_[ nObj, iif( obj_[ nObj,OBJ_TYPE ] == OBJ_O_TEXT, OBJ_EQN, OBJ_TEXT ) ] ) - 1 + ENDIF + ENDIF + RETURN NIL + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrRepCol( obj_,scn_ ) + LOCAL oCol := scn_[SCN_COL_MAX], nCol + + HB_SYMBOL_UNUSED( obj_ ) + + nCol := VouchGetSome( 'Number of Columns?', oCol ) + + IF !empty( nCol ) + nCol := max( 10,nCol ) + scn_[SCN_COL_MAX ] := nCol + scn_[SCN_RIGHT ] := min( maxCol(), scn_[SCN_LEFT]+nCol-1 ) + scn_[SCN_REFRESH ] := OBJ_REFRESH_ALL + scn_[ SCN_PROPERTY, REP_COLS ] := nCol + ENDIF + + RETURN NIL + +//----------------------------------------------------------------------// +/* + This is the routine FROM where row based equations can be implemented +*/ +STATIC FUNCTION scrAddLine(obj_,scn_) + LOCAL nRow := scn_[SCN_ROW_REP], nSct + + scn_[SCN_REFRESH] := OBJ_REFRESH_ALL + scn_[SCN_BOTTOM ] := min(scn_[SCN_BOTTOM]+1,maxrow()-3) + + nSct := scrSecOrd(scn_,nRow /*scn_[SCN_ROW_REP]*/) + + scn_[SCN_SECTORS_,nSct,SCT_ROWS]++ + scn_[SCN_REP_LINES]++ + + aeval(obj_,{|e_,i| IF(e_[OBJ_ROW] >= nRow, obj_[i,OBJ_TO_ROW] += 1,'') }) + aeval(obj_,{|e_,i| IF(e_[OBJ_ROW] >= nRow, obj_[i,OBJ_ROW ] += 1,'') }) + + scn_[SCN_REFRESH] := OBJ_REFRESH_ALL + + RETURN NIL + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrDelLine( obj_, scn_ ) + LOCAL nRow := scn_[ SCN_ROW_REP ] + LOCAL nSct, n, isLast + + isLast := nRow == scn_[ SCN_REP_LINES ] + + nSct := scrSecOrd( scn_,nRow /*scn_[SCN_ROW_REP]*/ ) + IF scn_[ SCN_SECTORS_, nSct, SCT_ROWS ] == 1 // A Single Row Must remain IN one group + RETURN NIL + ENDIF + + scn_[ SCN_SECTORS_, nSct,SCT_ROWS ]-- + scn_[ SCN_REP_LINES ]-- + + IF scn_[ SCN_REP_LINES ] < (scn_[SCN_BOTTOM]-scn_[SCN_TOP]+1) + scn_[ SCN_BOTTOM ] := max( scn_[ SCN_TOP ], min( scn_[ SCN_BOTTOM ] - 1, maxrow() - 3 ) ) + ENDIF + + DO WHILE .t. + IF ( n := ascan( obj_, {|e_| e_[ OBJ_ROW ] == nRow } ) ) == 0 + EXIT + ENDIF + VouchAShrink( obj_, n ) + ENDDO + IF empty( obj_ ) + aadd( obj_, scrObjBlank() ) + ENDIF + + aeval( obj_, {|e_,i| iif( e_[ OBJ_ROW ] > nRow, obj_[ i, OBJ_TO_ROW ] -= 1, '' ) } ) + aeval( obj_, {|e_,i| iif( e_[ OBJ_ROW ] > nRow, obj_[ i, OBJ_ROW ] -= 1, '' ) } ) + + IF isLast + scn_[SCN_ROW_REP]-- + scn_[SCN_ROW_CUR]-- + ENDIF + + scn_[SCN_REFRESH] := OBJ_REFRESH_ALL + + RETURN NIL + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrIsBoxIn(obj_,scn_) + RETURN ascan( obj_,{|e_| VouchInRange( scn_[SCN_ROW_REP ], e_[ OBJ_ROW ], e_[ OBJ_TO_ROW ] ); + .AND. ; + (e_[OBJ_TYPE] == OBJ_O_BOX ; + .OR. ; + e_[OBJ_TYPE] == OBJ_O_BMP ) } ) > 0 + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrObjCopy(obj_,scn_) + + HB_SYMBOL_UNUSED( obj_ ) + + IF scn_[SCN_MODE] == OBJ_MODE_SELECT + scn_[SCN_OBJ_COPIED] := scn_[SCN_OBJ_SELECTED] + ELSEIF scn_[SCN_OBJ_HILITE] > 0 + scn_[SCN_OBJ_COPIED] := scn_[SCN_OBJ_HILITE] + ENDIF + RETURN NIL + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrObjPas(obj_,scn_) // Paste Copied OBJECT + LOCAL nObj,o_,oldRow,oldCol,oldRow2,oldcol2 + + IF (nObj := scn_[SCN_OBJ_COPIED]) > 0 .AND. scn_[SCN_OBJ_SELECTED] == 0 + o_:= aclone(obj_[ nObj]) + + oldRow := o_[OBJ_ROW] ; oldCol := o_[OBJ_COL] + oldRow2 := o_[OBJ_TO_ROW] ; oldCol2 := o_[OBJ_TO_COL] + + o_[OBJ_ROW] := scn_[SCN_ROW_REP] + o_[OBJ_COL] := scn_[SCN_COL_REP] + IF o_[OBJ_TYPE ] == OBJ_O_FIELD .OR. o_[OBJ_TYPE] == OBJ_O_EXP + o_[OBJ_TO_ROW] := scn_[SCN_ROW_REP] + o_[OBJ_TO_COL] := scn_[SCN_COL_REP] + len(o_[OBJ_TEXT]) - 1 + ELSEIF o_[OBJ_TYPE] == OBJ_O_BOX .OR. o_[OBJ_TYPE] == OBJ_O_BMP + o_[OBJ_TO_ROW] := scn_[SCN_ROW_REP] + (oldRow2-oldRow) + o_[OBJ_TO_COL] := scn_[SCN_COL_REP] + (oldCol2-oldCol) + ELSEIF o_[OBJ_TYPE] == OBJ_O_TEXT + o_[OBJ_TO_ROW] := scn_[SCN_ROW_REP] + o_[OBJ_TO_COL] := scn_[SCN_COL_REP] + (oldCol2-oldCol) + ENDIF + + o_[OBJ_SECTION] := scrSecCur(scn_,scn_[SCN_ROW_REP]) + + aadd(obj_,o_) + + scrOrdObj( obj_ ) + scn_[ SCN_OBJ_SELECTED ] := 0 + scn_[ SCN_REFRESH ] := OBJ_REFRESH_LINE + scn_[ SCN_MODE ] := 0 + scn_[ SCN_OBJ_COPIED ] := 0 + ENDIF + RETURN NIL + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrObjDel(obj_,scn_,nObj) + LOCAL s_:= obj_,nUnique := obj_[ nObj,OBJ_OBJ_UNIQUE],n + + VouchAShrink(s_,nObj) + IF empty(s_) + aadd(s_,scrObjBlank()) + ENDIF + scn_[SCN_OBJ_SELECTED] := 0 + scn_[SCN_REFRESH] := OBJ_REFRESH_LINE + + IF scn_[SCN_DESIGN] == DGN_MODULE .AND. nUnique > 0 + IF (n := ascan(scn_[SCN_FIELDS],{|e_| e_[1] == nUnique })) > 0 + VouchAShrink(scn_[SCN_FIELDS],n) + ENDIF + ENDIF + RETURN s_ + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrObject(obj_,scn_) + LOCAL nObj + LOCAL mnu_:={'Field Alt_F' ,; + 'Boxes Alt_B' ,; + ' ' ,; + 'Columns Width Alt_W' ,; + 'Graphic Characters Alt_F6' ,; + ' ' ,; + 'Copy OBJECT Alt_C' ,; + 'Paste OBJECT Alt_V' ,; + 'Selection of Block Ctrl_F6',; + 'Copy Selection Ctrl_F7',; + 'Cut & Paste Selection Ctrl_F8',; + ' ' ,; + 'Matrix Alt_M' } + + LOCAL sel_:= {.t.,.t.,; + .f.,; + .t.,.t.,.t.,.t.,; + .f.,; + .t.,.t.,.t.,.t.,.t.,; + .f.,; + .t. } + + B_MSG CHOOSE mnu_ RESTORE SHADOW CENTER INTO nObj SELECTABLES sel_ + + @ scn_[ SCN_ROW_CUR ], scn_[ SCN_COL_CUR ] SAY '' + + DO CASE + CASE nObj == 1 // Field + scrAddFld( obj_, scn_, 0 ) + CASE nObj == 2 // Box + scrAddBox( obj_, scn_, 0 ) + CASE nObj == 3 // Blank + + CASE nObj == 4 // Columns + scrRepCol( obj_, scn_ ) + CASE nObj == 5 // Graphcs + //graphChar() + scn_[ SCN_GRAPHICS ] := ! scn_[ SCN_GRAPHICS ] + CASE nObj == 6 // Blank + + CASE nObj == 7 // Copy + scrObjCopy( obj_, scn_ ) + CASE nObj ==81 // Paste + scrObjPas( obj_, scn_) + CASE nObj == 9 // Block Selection + scrTextBlock( obj_, scn_ ) + CASE nObj == 10 // Copy Selectin + obj_:= scrTextMove( obj_, scn_, 1 ) + CASE nObj == 11 // Copy & Cut Selection + obj_:= scrTextMove( obj_, scn_, 0 ) + CASE nObj == 12 // Blank + + CASE nObj == 13 // Matrix + ENDCASE + + RETURN nObj + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrTxtProp( obj_, scn_, nObj ) + LOCAL sel_, v_ + + obj_[ nObj,OBJ_F_LEN ] := len(obj_[ nObj,OBJ_EQN ] ) + obj_[ nObj,OBJ_F_TYPE ] := 'C' + + v_:= scrObj2Vv( obj_[ nObj ] ) + sel_:= scrVvSelAble(scn_) + + sel_[ VV_ID ] := .F. + sel_[ VV_ALIGN ] := .T. + sel_[ VV_COLOR ] := .T. + sel_[ VV_F_LEN ] := .F. + sel_[ VV_F_DEC ] := .F. + sel_[ VV_REPEATED ] := .F. + sel_[ VV_VERTICLE ] := .F. + sel_[ VV_WRAP_SEMI ] := .F. + sel_[ VV_ZERO ] := .F. + sel_[ VV_EQN ] := .F. + + scrField( nObj, 3, obj_, scn_, v_, sel_, 'W/B ' ) + + RETURN NIL + +//----------------------------------------------------------------------// + +FUNCTION scrOnLastCol( obj_, scn_, nObj ) + LOCAL nOff, i + + IF obj_[ nObj, OBJ_TYPE ] == OBJ_O_BOX + nOff := obj_[ nObj, OBJ_TO_COL ] - scn_[ SCN_COL_CUR ] - 1 + FOR i := 1 TO nOff + scrMovRgt( scn_ ) + scrMove( obj_,scn_ ) + scrStatus( obj_,scn_ ) + NEXT + + nOff := obj_[ nObj, OBJ_TO_ROW ] - scn_[ SCN_ROW_CUR ] - 1 + FOR i := 1 TO nOff + scrMovDn( scn_ ) + scrMove( obj_,scn_ ) + scrStatus( obj_,scn_ ) + NEXT + + SetPos( scn_[ SCN_ROW_CUR ], scn_[ SCN_COL_CUR ] ) + ENDIF + + RETURN NIL + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrOnFirstCol( obj_,scn_,nObj,type_ ) + LOCAL nCur, nOff + + IF scn_[ SCN_COL_REP ] <> obj_[ nObj,OBJ_COL ] + IF VouchInArray( obj_[ nObj, OBJ_TYPE ], type_ ) + IF obj_[ nObj, OBJ_TYPE ] == OBJ_O_BOX + nCur := scn_[ SCN_COL_CUR ] + nOff := scn_[ SCN_COL_REP ] - obj_[ nObj, OBJ_COL ] + scn_[ SCN_COL_CUR ] := max( scn_[ SCN_LEFT ], scn_[ SCN_COL_CUR ] - nOff ) + scn_[ SCN_COL_REP ] := obj_[ nObj, OBJ_COL] + IF nOff > nCur - scn_[ SCN_LEFT ] + scn_[ SCN_REFRESH ] := OBJ_REFRESH_ALL + scn_[ SCN_COL_DIS ] += nOff - ( nCur - scn_[ SCN_LEFT ] ) + ENDIF + + nCur := scn_[ SCN_ROW_CUR ] + nOff := scn_[ SCN_ROW_REP ] - obj_[ nObj, OBJ_ROW ] + scn_[ SCN_ROW_CUR ] := max( scn_[ SCN_TOP ], scn_[ SCN_ROW_CUR ] - nOff ) + scn_[ SCN_ROW_REP ] := obj_[ nObj,OBJ_ROW ] + IF nOff > nCur - scn_[ SCN_TOP ] + scn_[ SCN_REFRESH ] := OBJ_REFRESH_ALL + scn_[ SCN_ROW_DIS ] += nOff - ( nCur - scn_[ SCN_TOP ] ) + ENDIF + + ELSE + IF scn_[ SCN_LASTKEY ] == K_RIGHT + nCur := scn_[ SCN_COL_CUR ] + nOff := obj_[ nObj, OBJ_TO_COL ] - scn_[ SCN_COL_REP ] + 1 // NEXT Col TO OBJECT + IF scn_[SCN_COL_REP] + nOff > scn_[SCN_COL_MAX] + scn_[SCN_COL_MAX] := scn_[ SCN_COL_REP ] + nOff + ENDIF + scn_[SCN_COL_CUR] := min( scn_[ SCN_RIGHT ], scn_[ SCN_COL_CUR ] + nOff ) + scn_[SCN_COL_REP] := obj_[ nObj,OBJ_TO_COL ] + 1 + IF nOff > scn_[SCN_RIGHT] - nCur + scn_[SCN_REFRESH] := OBJ_REFRESH_ALL + scn_[SCN_COL_DIS] -= nOff-(scn_[SCN_RIGHT]-nCur) + ENDIF + scn_[SCN_OBJ_HILITE] := 0 + ELSE + nCur := scn_[ SCN_COL_CUR ] + nOff := scn_[ SCN_COL_REP ] - obj_[ nObj,OBJ_COL ] + scn_[ SCN_COL_CUR ] := max( scn_[ SCN_LEFT ], scn_[ SCN_COL_CUR ]-nOff ) + scn_[ SCN_COL_REP ] := obj_[ nObj,OBJ_COL] + IF nOff > nCur-scn_[SCN_LEFT] + scn_[SCN_REFRESH] := OBJ_REFRESH_ALL + scn_[SCN_COL_DIS] += nOff-(nCur-scn_[SCN_LEFT]) + ENDIF + ENDIF + ENDIF + ENDIF + ENDIF + + RETURN NIL + +//----------------------------------------------------------------------// + +FUNCTION scrGetChar(obj_,nRow,nCol) + LOCAL s := THE_FILL,n + + // Locate Text + n := ascan(obj_,{|e_| e_[ OBJ_ROW ] == nRow .AND. ; + VouchInRange( nCol, e_[ OBJ_COL ], e_[ OBJ_TO_COL ] ) } ) + IF n == 0 // Locate Box + n := ascan(obj_,{|e_| VouchInRange( nRow, e_[ OBJ_ROW ], e_[ OBJ_TO_ROW ] ) .AND. ; + VouchInRange( nCol, e_[ OBJ_COL ], e_[ OBJ_TO_COL ] ) } ) + ENDIF + + IF n > 0 + IF obj_[n,OBJ_TYPE]==OBJ_O_TEXT + s := substr(obj_[n,OBJ_EQN],nCol-obj_[n,OBJ_COL]+1,1) + + ELSEIF obj_[n,OBJ_TYPE]==OBJ_O_FIELD .OR. obj_[n,OBJ_TYPE]==OBJ_O_EXP + s := substr(obj_[n,OBJ_ID ],nCol-obj_[n,OBJ_COL]+1,1) + + ELSEIF obj_[n,OBJ_TYPE]==OBJ_O_BOX .OR. obj_[n,OBJ_TYPE]==OBJ_O_BMP + IF nRow == obj_[n,OBJ_ROW ] + IF nCol == obj_[n,OBJ_COL] + s := substr(obj_[n,OBJ_BOX_SHAPE],1,1) + ELSEIF nCol == obj_[n,OBJ_TO_COL] + s := substr(obj_[n,OBJ_BOX_SHAPE],3,1) + ELSE + s := substr(obj_[n,OBJ_BOX_SHAPE],2,1) + ENDIF + ELSEIF nRow == obj_[n,OBJ_TO_ROW] + IF nCol == obj_[n,OBJ_COL] + s := substr(obj_[n,OBJ_BOX_SHAPE],7,1) + ELSEIF nCol == obj_[n,OBJ_TO_COL] + s := substr(obj_[n,OBJ_BOX_SHAPE],5,1) + ELSE + s := substr(obj_[n,OBJ_BOX_SHAPE],6,1) + ENDIF + ELSE + IF nCol == obj_[n,OBJ_COL] + s := substr(obj_[n,OBJ_BOX_SHAPE],8,1) // 4.8 are Same + ELSEIF nCol == obj_[n,OBJ_TO_COL] + s := substr(obj_[n,OBJ_BOX_SHAPE],4,1) + ELSE + s := substr(obj_[n,OBJ_BOX_SHAPE],9,1) + s := IF(empty(s),THE_FILL,s) + ENDIF + ENDIF + ENDIF + ENDIF + RETURN s + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrTextBlock(obj_,scn_) + LOCAL n, nKey + LOCAL key_:= { K_RIGHT,K_LEFT,K_UP,K_DOWN,K_ENTER } + + scrMsg( 'Use TO Select Text Block, TO Finish' ) + scn_[ SCN_TEXT_BLOCK_ ] := { scn_[ SCN_ROW_REP ], scn_[ SCN_COL_REP ], scn_[ SCN_ROW_REP ], scn_[ SCN_COL_REP ] } + scrMove( obj_, scn_ ) + scrStatus( obj_, scn_ ) + + DO WHILE .t. + nKey := scrInkey( key_ ) + + DO CASE + CASE nKey == key_[1] + IF scrMovRgt(scn_) + scn_[SCN_TEXT_BLOCK_,4]++ + ENDIF + CASE nKey == key_[2] + IF scrMovLft(scn_) + scn_[SCN_TEXT_BLOCK_,4]-- + ENDIF + CASE nKey == key_[3] + IF scrMovUp(scn_) + scn_[SCN_TEXT_BLOCK_,3]-- + ENDIF + CASE nKey == key_[4] + IF scrMovDn(scn_) + scn_[SCN_TEXT_BLOCK_,3]++ + ENDIF + CASE nKey == key_[5] + EXIT + ENDCASE + + IF scn_[SCN_TEXT_BLOCK_,3] < scn_[SCN_TEXT_BLOCK_,1] + n := scn_[SCN_TEXT_BLOCK_,1] + scn_[SCN_TEXT_BLOCK_,1] := scn_[SCN_TEXT_BLOCK_,3] + scn_[SCN_TEXT_BLOCK_,3] := n + ENDIF + + IF scn_[SCN_TEXT_BLOCK_,4] < scn_[SCN_TEXT_BLOCK_,2] + n := scn_[SCN_TEXT_BLOCK_,2] + scn_[SCN_TEXT_BLOCK_,2] := scn_[SCN_TEXT_BLOCK_,4] + scn_[SCN_TEXT_BLOCK_,4] := n + ENDIF + + scrMove(obj_,scn_) + scrStatus(obj_,scn_) + ENDDO + scrMsg('') + + RETURN NIL + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrTextMove(obj_,scn_,nMode) + LOCAL gst_,nKey + LOCAL crs := setCursor(0) + LOCAL key_:= {K_RIGHT,K_LEFT,K_UP,K_DOWN,K_ENTER} + + DEFAULT nMode TO 0 // 0.Paste 1.Copy + + IF ! empty( scn_[ SCN_TEXT_BLOCK_ ] ) + // CREATE a ghost movement block + scrMsg('Use Arrow Keys TO Move Selected Block') + // Check FOR current cursor position + gst_:= { scn_[ SCN_ROW_REP ] , scn_[ SCN_COL_REP ],; + scn_[ SCN_ROW_REP ] + scn_[ SCN_TEXT_BLOCK_, 3 ] - scn_[ SCN_TEXT_BLOCK_, 1 ],; + scn_[ SCN_COL_REP ] + scn_[ SCN_TEXT_BLOCK_, 4 ] - scn_[ SCN_TEXT_BLOCK_, 2 ] } + DO WHILE .t. + scrMove(obj_,scn_) + scrDispGhost(obj_,scn_,gst_) + scrStatus(obj_,scn_) + + nKey := scrInkey(key_) + DO CASE + CASE nKey == key_[1] + IF scrMovRgt(scn_) + gst_[2]++ ; gst_[4]++ + ENDIF + CASE nKey == key_[2] + IF scrMovLft(scn_) + gst_[2]-- ; gst_[4]-- + ENDIF + CASE nKey == key_[3] + IF scrMovUp(scn_) + gst_[1]-- ; gst_[3]-- + ENDIF + CASE nKey == key_[4] + IF scrMovDn(scn_) + gst_[1]++ ; gst_[3]++ + ENDIF + CASE nKey == key_[5] + EXIT + ENDCASE + ENDDO + // Post Selected Block TO Moved Area + obj_:= scrTextPost( obj_, scn_, gst_, nMode ) + + scrOrdObj( obj_, scn_ ) + + scrMove( obj_, scn_ ) + scrStatus( obj_, scn_ ) + + scrMsg() + ENDIF + setCursor(crs) + + RETURN obj_ + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrTextPost( obj_, scn_, gst_, nMode ) + LOCAL n,i,s,s1,s2,s3,n1,nWid,nCol,nn + LOCAL del_:={0},ins_:={},d_:={},ddd_ + LOCAL old_:= scn_[ SCN_TEXT_BLOCK_ ] + + FOR i := gst_[ 1 ] TO gst_[ 3 ] + n := -1 + DO WHILE .t. + n := ascan( obj_, {|e_| e_[ OBJ_ROW ] == i ; + .AND. ; + ( VouchInRange(e_[OBJ_COL],gst_[2],gst_[4]); + .OR. ; + VouchInRange(e_[OBJ_TO_COL],gst_[2],gst_[4])) ; + .AND.; + ! VouchInArray( n,del_ ) } ) + IF n > 0 + IF obj_[ n,OBJ_TYPE ] == OBJ_O_TEXT + aadd( del_, n ) + + s1 := '' ; s3 := '' + s := obj_[ n, OBJ_EQN ] + nCol := obj_[ n, OBJ_COL ] + + IF gst_[2] <= obj_[ n, OBJ_COL ] .AND. gst_[ 4 ] >= obj_[ n, OBJ_TO_COL ] + // Only deletion of OBJECT + // s2 := s + ELSEIF gst_[2] >= nCol + s1 := substr(s,1,gst_[2]-nCol) + // s2 := substr(s,gst_[2]-nCol+1,gst_[4]-nCol+1) + s3 := substr(s,gst_[4]-nCol+2) + ELSEIF gst_[2] < nCol + s1 := substr(s,1,gst_[2]-nCol) + // s2 := substr(s,gst_[2]-nCol+1,gst_[4]-nCol+1) + s3 := substr(s,gst_[4]-nCol+2) + ENDIF + + IF len( s1 ) > 0 + aadd( ins_,scrObjBlank() ) + n1 := len( ins_ ) + + ins_[ n1, OBJ_TYPE ] := OBJ_O_TEXT + ins_[ n1, OBJ_ROW ] := obj_[ n, OBJ_ROW ] + ins_[ n1, OBJ_COL ] := obj_[ n, OBJ_COL ] + ins_[ n1, OBJ_EQN ] := s1 + ins_[ n1, OBJ_ID ] := 'Text' + ins_[ n1, OBJ_COLOR ] := 'W/B' + ins_[ n1, OBJ_SECTION ] := obj_[ n, OBJ_SECTION ] + ins_[ n1, OBJ_TO_ROW ] := obj_[ n, OBJ_ROW ] + ins_[ n1, OBJ_TO_COL ] := ins_[ n1, OBJ_COL ] + len( s1 ) - 1 + ENDIF + + IF len( s3 ) > 0 + aadd( ins_, scrObjBlank() ) + n1 := len( ins_ ) + + ins_[ n1, OBJ_TYPE ] := OBJ_O_TEXT + ins_[ n1, OBJ_ROW ] := obj_[n, OBJ_ROW] + ins_[ n1, OBJ_COL ] := gst_[ 4 ] + 1 + ins_[ n1, OBJ_EQN ] := s3 + ins_[ n1, OBJ_ID ] := 'Text' + ins_[ n1, OBJ_COLOR ] := 'W/B' + ins_[ n1, OBJ_SECTION ] := obj_[ n, OBJ_SECTION ] + ins_[ n1, OBJ_TO_ROW ] := obj_[ n, OBJ_ROW ] + ins_[ n1, OBJ_TO_COL ] := ins_[ n1, OBJ_COL ] + len( s3 ) - 1 + ENDIF + + ELSEIF obj_[n,OBJ_TYPE] == OBJ_O_FIELD .OR. obj_[n,OBJ_TYPE] == OBJ_O_EXP + aadd( del_, n ) + + ELSEIF obj_[n,OBJ_TYPE] == OBJ_O_BOX + + ELSEIF obj_[n,OBJ_TYPE] == OBJ_O_BMP + + ENDIF + ELSE + EXIT + ENDIF + ENDDO + NEXT + + ddd_:= del_ ; del_:={0} ; nn := 0 + + FOR i := old_[1] TO old_[3] // Rows + n := -1 + + DO WHILE .t. + n := ascan(obj_,{|e_| e_[OBJ_ROW]==i; + .AND. ; + (VouchInRange(e_[OBJ_COL],old_[2],old_[4]); + .OR. ; + VouchInRange(e_[OBJ_TO_COL],old_[2],old_[4])) ; + .AND. ; + !VouchInArray(n,del_) }) + IF n > 0 + IF obj_[n,OBJ_TYPE] == OBJ_O_TEXT + aadd(del_,n) + + // TO be retained as it is + s1 := '' ; s2 := '' ; s3 := '' + s := obj_[n,OBJ_EQN] + nCol := obj_[n,OBJ_COL] + + IF old_[2] <= obj_[n,OBJ_COL] .AND. old_[4] >= obj_[n,OBJ_TO_COL] + s2 := s // Insert WITH moved coordinates + ELSEIF old_[2] >= obj_[n,OBJ_COL] + s1 := substr(s,1,old_[2]-nCol) + s2 := substr(s,old_[2]-nCol+1,old_[4]-old_[2]+1) + s3 := substr(s,old_[4]-nCol+2) + ELSEIF old_[2] < nCol + s1 := substr(s,1,old_[2]-nCol) + s2 := substr(s,old_[2]-nCol+1,old_[4]-old_[2]+1) + s3 := substr(s,old_[4]-nCol+2) + ENDIF + + IF nMode == 0 + IF len(s1)>0 + aadd(ins_,scrObjBlank()) + n1 := len(ins_) + ins_[n1,OBJ_TYPE] := OBJ_O_TEXT + ins_[n1,OBJ_ROW] := obj_[n,OBJ_ROW] + ins_[n1,OBJ_COL] := obj_[n,OBJ_COL] + ins_[n1,OBJ_EQN] := s1 + ins_[n1,OBJ_ID] := 'Text' + ins_[n1,OBJ_COLOR] := 'W/B' + ins_[n1,OBJ_SECTION] := obj_[n,OBJ_SECTION] + ins_[n1,OBJ_TO_ROW] := obj_[n,OBJ_ROW ] + ins_[n1,OBJ_TO_COL] := ins_[n1,OBJ_COL]+len(s1)-1 + ENDIF + IF len(s3) > 0 + aadd(ins_,scrObjBlank()) + n1 := len(ins_) + ins_[n1,OBJ_TYPE] := OBJ_O_TEXT + ins_[n1,OBJ_ROW] := obj_[n,OBJ_ROW] + ins_[n1,OBJ_COL] := old_[4]+1 + ins_[n1,OBJ_EQN] := s3 + ins_[n1,OBJ_ID] := 'Text' + ins_[n1,OBJ_COLOR] := 'W/B' + ins_[n1,OBJ_SECTION] := obj_[n,OBJ_SECTION] + ins_[n1,OBJ_TO_ROW] := obj_[n,OBJ_ROW ] + ins_[n1,OBJ_TO_COL] := ins_[n1,OBJ_COL]+len(s3)-1 + ENDIF + ENDIF + + IF len(s2) > 0 + aadd(ins_,aclone(obj_[n])) + n1 := len(ins_) + ins_[n1,OBJ_ROW] := gst_[1]+nn + ins_[n1,OBJ_COL] := gst_[2]+IF(old_[2]-obj_[n,OBJ_COL]>=0,; + 0,abs(old_[2]-obj_[n,OBJ_COL])) + ins_[n1,OBJ_TO_ROW] := ins_[n1,OBJ_ROW] + ins_[n1,OBJ_TO_COL] := ins_[n1,OBJ_COL]+len(s2)-1 + ins_[n1,OBJ_EQN] := s2 + ENDIF + + ELSEIF obj_[n,OBJ_TYPE] == OBJ_O_FIELD .OR. ; + obj_[n,OBJ_TYPE] == OBJ_O_EXP + IF nMode == 0 + aadd(del_,n) + ENDIF + + // Same OBJECT is TO be inserted IN moved block + aadd(ins_,aclone(obj_[n])) + n1 := len(ins_) + ins_[n1,OBJ_ROW] := gst_[1]+nn + nWid := obj_[n,OBJ_TO_COL]-obj_[n,OBJ_COL] + ins_[n1,OBJ_COL] := gst_[2]+old_[2]-obj_[n,OBJ_COL] + ins_[n1,OBJ_TO_ROW] := ins_[n1,OBJ_ROW] + ins_[n1,OBJ_TO_COL] := ins_[n1,OBJ_COL]+nWid + ENDIF + ELSE + EXIT + ENDIF + ENDDO + nn++ + NEXT + + IF nMode <> 0 + del_:={} + ENDIF + aeval( ddd_,{|e| aadd( del_, e ) } ) + + IF !empty( del_ ) + FOR i := 1 TO len( obj_) + IF ascan( del_, i ) == 0 + aadd( d_, obj_[ i ] ) + ENDIF + NEXT + obj_:= aclone( d_ ) + IF empty( obj_ ) + aadd( obj_, scrObjBlank() ) + ENDIF + ENDIF + + aeval( ins_, {|e_| aadd( obj_, e_ ) } ) + + scn_[SCN_TEXT_BLOCK_] := {} + + RETURN obj_ + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrTextDel(obj_,scn_) + LOCAL i,n,n1,s,s1,s3,nCol,ins_:={},del_:={},d_:={},old_:={} + + old_:= scn_[SCN_TEXT_BLOCK_] + FOR i := old_[1] TO old_[3] // Rows + n := -1 + + DO WHILE .t. + n := ascan(obj_,{|e_| e_[OBJ_ROW]==i; + .AND. ; + (VouchInRange(e_[OBJ_COL], old_[2],old_[4]); + .OR. ; + VouchInRange(e_[OBJ_TO_COL],old_[2],old_[4])) ; + .AND. ; + !VouchInArray(n,del_) }) + IF n > 0 + IF obj_[n,OBJ_TYPE] == OBJ_O_TEXT + aadd(del_,n) + + // TO be retained as it is + s1 := '' ; s3 := '' + s := obj_[n,OBJ_EQN] + nCol := obj_[n,OBJ_COL] + + IF old_[2] <= obj_[n,OBJ_COL] .AND. old_[4] >= obj_[n,OBJ_TO_COL] + // s2 := s // Insert WITH moved coordinates + ELSEIF old_[2] >= obj_[n,OBJ_COL] + s1 := substr(s,1,old_[2]-nCol) + // s2 := substr(s,old_[2]-nCol+1,old_[4]-old_[2]+1) + s3 := substr(s,old_[4]-nCol+2) + ELSEIF old_[2] < nCol + s1 := substr(s,1,old_[2]-nCol) + // s2 := substr(s,old_[2]-nCol+1,old_[4]-old_[2]+1) + s3 := substr(s,old_[4]-nCol+2) + ENDIF + + IF len(s1)>0 + aadd(ins_,scrObjBlank()) + n1 := len(ins_) + ins_[n1,OBJ_TYPE] := OBJ_O_TEXT + ins_[n1,OBJ_ROW] := obj_[n,OBJ_ROW] + ins_[n1,OBJ_COL] := obj_[n,OBJ_COL] + ins_[n1,OBJ_EQN] := s1 + ins_[n1,OBJ_ID] := 'Text' + ins_[n1,OBJ_COLOR] := 'W/B' + ins_[n1,OBJ_SECTION] := obj_[n,OBJ_SECTION] + ins_[n1,OBJ_TO_ROW] := obj_[n,OBJ_ROW ] + ins_[n1,OBJ_TO_COL] := ins_[n1,OBJ_COL]+len(s1)-1 + ENDIF + IF len(s3) > 0 + aadd(ins_,scrObjBlank()) + n1 := len(ins_) + ins_[n1,OBJ_TYPE] := OBJ_O_TEXT + ins_[n1,OBJ_ROW] := obj_[n,OBJ_ROW] + ins_[n1,OBJ_COL] := old_[4]+1 + ins_[n1,OBJ_EQN] := s3 + ins_[n1,OBJ_ID] := 'Text' + ins_[n1,OBJ_COLOR] := 'W/B' + ins_[n1,OBJ_SECTION] := obj_[n,OBJ_SECTION] + ins_[n1,OBJ_TO_ROW] := obj_[n,OBJ_ROW ] + ins_[n1,OBJ_TO_COL] := ins_[n1,OBJ_COL]+len(s3)-1 + ENDIF + + ELSEIF obj_[n,OBJ_TYPE] == OBJ_O_FIELD .OR. ; + obj_[n,OBJ_TYPE] == OBJ_O_EXP + aadd(del_,n) + + ENDIF + ELSE + EXIT + ENDIF + ENDDO + //nn++ + NEXT + + IF !empty(del_) + FOR i := 1 TO len(obj_) + IF ascan(del_,i) == 0 + aadd(d_,obj_[i]) + ENDIF + NEXT + obj_:= aclone(d_) + IF empty(obj_) + aadd(obj_,scrObjBlank()) + ENDIF + ENDIF + + aeval(ins_,{|e_| aadd(obj_,e_) }) + scn_[SCN_TEXT_BLOCK_] := {} + + RETURN obj_ + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrExport( obj_,scn_ ) + LOCAL cFile := 'SCREEN' + LOCAL rpt_ + + cFile := VouchGetSome( 'Screen Name Please', pad( cFile,100 ) ) + IF !empty( cFile ) + rpt_:= objScn2Rpt( obj_, scn_, scn_[ SCN_NMODE ] ) + //save_array( rpt_, trim( cFile ) + '.vsc' ) + uiDebug( rpt_ ) + ENDIF + + RETURN file( cFile ) + +//----------------------------------------------------------------------// + +STATIC FUNCTION scrImport( obj_,scn_ ) + LOCAL cFile := 'SCREEN' + LOCAL rpt_:={},aa_ + + cFile := VouchGetSome( 'Screen TO Import?', pad( cFile,100 ) ) + IF ! empty( cFile ) + //rpt_:= rest_array( trim( cFile ) + '.vsc' ) + ENDIF + IF !empty( rpt_ ) + aa_:= rpt2ObjScn( scn_[SCN_COBJECT], rpt_, scn_[SCN_NMODE], {},; + scn_[SCN_CRPT], scn_[SCN_NWHERE], scn_[SCN_LMSG] ) + obj_:= aa_[ 1 ] + scn_:= aa_[ 2 ] + ENDIF + + scn_[SCN_REFRESH] := OBJ_REFRESH_ALL + + RETURN NIL + +//----------------------------------------------------------------------// + diff --git a/harbour/contrib/hbcuied/cu_outpt.prg b/harbour/contrib/hbcuied/cu_outpt.prg index 84e1b40673..8f11224365 100644 --- a/harbour/contrib/hbcuied/cu_outpt.prg +++ b/harbour/contrib/hbcuied/cu_outpt.prg @@ -71,25 +71,6 @@ /*----------------------------------------------------------------------*/ -#define K_WVT_FULLSCREEN 299701 - -#define K_WVT_BITMAP 299705 -#define K_WVT_FRAME 299706 -#define K_WVT_ELLIPSE 299707 -#define K_WVT_LINE_H 299708 -#define K_WVT_LINE_V 299709 -#define K_WVT_GRID 299710 -#define K_WVT_BARCODE 299711 -#define K_WVT_TEXTBOX 299712 - -#define K_WVT_CARRY 299721 -#define K_WVT_BROUGHT 299722 -#define K_WVT_SUMMARY 299723 -#define K_WVT_GROUP 299724 -#define K_WVT_MATRIX 299725 - -//----------------------------------------------------------------------// - FUNCTION ScrDisplay( scn_ ) dispbegin() @@ -120,12 +101,12 @@ FUNCTION scrStatus(obj_,scn_) s += pad(scn_[SCN_FILE],12)+; ' ³ '+; - ' Row:'+; + ' R:'+; str( scn_[SCN_ROW_REP]-1, 3 )+; - ' Col:'+; + ' C:'+; str( scn_[SCN_COL_REP]-1, 3 )+; ' ³ ' +; - IF(readInsert(),'Ins ',' ')+; + iif(readInsert(),'Ins ',' ')+; ' ³ ' objId := '' @@ -147,9 +128,6 @@ FUNCTION scrStatus(obj_,scn_) IF ( nSct := scrSecOrd(scn_,scn_[SCN_ROW_REP])) <> NIL s += scn_[ SCN_SECTORS_,nSct,SCT_ID ] - #ifdef __WVT__ - cClr := scn_[ SCN_SECTORS_,nSct,SCT_COLOR ] - #ENDIF ENDIF @ scn_[SCN_STATUS_ROW], scn_[SCN_STATUS_COL] ; @@ -159,8 +137,8 @@ FUNCTION scrStatus(obj_,scn_) /* Ruler */ s := substr(scn_[SCN_RULER],; max( 1,scn_[SCN_COL_REP]-scn_[SCN_COL_CUR]+scn_[SCN_LEFT]),; - scn_[ SCN_RIGHT]-scn_[SCN_LEFT]+1 ) - DispBox( scn_[SCN_TOP]-1,0,scn_[SCN_TOP]-1,maxcol(),' ',scn_[SCN_CLR_OVERALL] ) + scn_[ SCN_RIGHT ] - scn_[SCN_LEFT ] + 1 ) + DispBox( scn_[ SCN_TOP ] - 1, 0, scn_[ SCN_TOP ] - 1, maxcol(), ' ', scn_[ SCN_CLR_OVERALL ] ) @ scn_[SCN_ROW_RULER],scn_[SCN_LEFT] SAY s COLOR scn_[SCN_CLR_RULER] @ scn_[SCN_ROW_RULER],scn_[SCN_COL_CUR] say ; substr( s, scn_[SCN_COL_CUR]-scn_[SCN_LEFT]+1,1) COLOR cClr @@ -178,7 +156,7 @@ FUNCTION scrStatus(obj_,scn_) FUNCTION scrHiLite(obj_,scn_,mode) LOCAL nObj := scn_[SCN_OBJ_HILITE] - LOCAL cColor := IF(mode,scn_[SCN_CLR_HILITE],obj_[nObj,OBJ_COLOR]) + LOCAL cColor := iif(mode,scn_[SCN_CLR_HILITE],obj_[nObj,OBJ_COLOR]) IF obj_[nObj,OBJ_TYPE] == OBJ_O_BOX DispBegin() @@ -201,17 +179,17 @@ FUNCTION scrHiLite(obj_,scn_,mode) //----------------------------------------------------------------------// -FUNCTION scrDispSelctd(obj_,scn_) +FUNCTION scrDispSelctd( obj_,scn_ ) LOCAL i,j,nCol,nRow - IF !empty(scn_[SCN_TEXT_BLOCK_]) + IF ! empty( scn_[ SCN_TEXT_BLOCK_ ] ) DispBegin() - FOR i := scn_[SCN_TEXT_BLOCK_,1] TO scn_[SCN_TEXT_BLOCK_,3] - IF (nRow := i+scn_[SCN_ROW_DIS]) <= scn_[SCN_BOTTOM] - FOR j := scn_[SCN_TEXT_BLOCK_,2] TO scn_[SCN_TEXT_BLOCK_,4] - IF (nCol := j+scn_[SCN_COL_DIS]) <= scn_[SCN_RIGHT] - @ nRow,nCol SAY scrGetChar(obj_,i,j) COLOR 'GR+/R' + FOR i := scn_[ SCN_TEXT_BLOCK_, 1 ] TO scn_[ SCN_TEXT_BLOCK_, 3 ] + IF ( nRow := i + scn_[ SCN_ROW_DIS ] ) <= scn_[ SCN_BOTTOM ] + FOR j := scn_[ SCN_TEXT_BLOCK_, 2 ] TO scn_[ SCN_TEXT_BLOCK_, 4 ] + IF ( nCol := j + scn_[ SCN_COL_DIS ] ) <= scn_[ SCN_RIGHT ] + @ nRow, nCol SAY scrGetChar( obj_, i, j ) COLOR 'GR+/R' ENDIF NEXT ENDIF @@ -223,17 +201,17 @@ FUNCTION scrDispSelctd(obj_,scn_) //----------------------------------------------------------------------// -FUNCTION scrDispGhost(obj_,scn_,gst_) +FUNCTION scrDispGhost( obj_,scn_,gst_ ) LOCAL i,j,nRow,nCol HB_SYMBOL_UNUSED( obj_ ) DispBegin() - FOR i := gst_[1] TO gst_[3] - IF (nRow := i+scn_[SCN_ROW_DIS]) <= scn_[SCN_BOTTOM] - FOR j := gst_[2] TO gst_[4] - IF (nCol := j+scn_[SCN_COL_DIS]) <= scn_[SCN_RIGHT] - @ nRow,nCol SAY THE_FILL COLOR 'GR+/R' + FOR i := gst_[ 1 ] TO gst_[ 3 ] + IF ( nRow := i + scn_[ SCN_ROW_DIS ] ) <= scn_[ SCN_BOTTOM ] + FOR j := gst_[ 2 ] TO gst_[ 4 ] + IF ( nCol := j + scn_[ SCN_COL_DIS ] ) <= scn_[ SCN_RIGHT ] + @ nRow, nCol SAY THE_FILL COLOR 'GR+/R' ENDIF NEXT ENDIF @@ -244,40 +222,13 @@ FUNCTION scrDispGhost(obj_,scn_,gst_) //----------------------------------------------------------------------// -FUNCTION scrMove(obj_,scn_) - LOCAL i,scrT,scrB,scrL,scrR,k,n,nRepOff,nRowWnd,nTo +FUNCTION scrMove( obj_, scn_ ) + LOCAL i LOCAL crs := setCursor( 0 ) LOCAL nOff, cText, nRow, nCol, cColor dispBegin() - IF scn_[SCN_DESIGN] == DGN_MODULE .OR. scn_[SCN_DESIGN]==DGN_SCREEN - scrT := VouchWndSave(0,0,scn_[SCN_TOP]-1,maxcol()) - scrB := VouchWndSave(scn_[SCN_BOTTOM]+1,0,maxrow(),maxcol()) - scrL := VouchWndSave(0,0,maxrow(),scn_[SCN_LEFT]-1) - scrR := VouchWndSave(0,scn_[SCN_RIGHT]+1,maxrow(),maxcol()) - ELSE - scrT := VouchWndSave(0,0,scn_[SCN_TOP]-2,maxcol()) - scrB := VouchWndSave(maxrow()-2,0,maxrow(),maxcol()) - DispBox( scn_[SCN_TOP],0,maxrow()-2,maxcol(),' ',scn_[SCN_CLR_OVERALL] ) - - nRowWnd := scn_[SCN_BOTTOM ] - scn_[SCN_TOP] + 1 - nRepOff := scn_[SCN_ROW_REP] - (scn_[SCN_ROW_CUR] - scn_[SCN_TOP]) - nTo := (nRowWnd + nRepOff - 1) - - k := 0 - FOR i := nRepOff TO nTo - IF ( n := scrSecOrd( scn_,i ) ) <> NIL - @ scn_[ SCN_TOP ]+k, 0 SAY scn_[ SCN_SECTORS_, n, SCT_SAY ] ; - COLOR scn_[ SCN_SECTORS_,n,SCT_COLOR ] - k++ - ENDIF - NEXT - - scrL := VouchWndSave(0,0,maxrow(),scn_[SCN_LEFT]-1) - scrR := VouchWndSave(0,scn_[SCN_RIGHT]+1,maxrow()-2,maxcol()) - ENDIF - dispBox(scn_[ SCN_TOP ],; scn_[ SCN_LEFT ],; scn_[ SCN_BOTTOM ],; @@ -297,30 +248,33 @@ FUNCTION scrMove(obj_,scn_) nCol := 0 ENDIF - IF obj_[i,OBJ_TYPE] == OBJ_O_BOX + IF obj_[ i,OBJ_TYPE ] == OBJ_O_BOX + cColor := iif( scn_[ SCN_OBJ_SELECTED ] == i, scn_[ SCN_CLR_SELECT ],; + iif( scn_[ SCN_OBJ_HILITE ] == i, scn_[ SCN_CLR_HILITE ],; + 'W/B' /* obj_[i,OBJ_COLOR] */ ) ) DO CASE - CASE VouchInArray(obj_[ i,OBJ_MDL_F_TYPE ], { 61,62,63,67,68 } ) + CASE VouchInArray( obj_[ i,OBJ_MDL_F_TYPE ], { 61,62,63,67,68 } ) dispBox( obj_[ i,OBJ_ROW ] + scn_[ SCN_ROW_DIS ],; obj_[ i,OBJ_COL ] + scn_[ SCN_COL_DIS ],; obj_[ i,OBJ_TO_ROW ] + scn_[ SCN_ROW_DIS ],; obj_[ i,OBJ_TO_COL ] + scn_[ SCN_COL_DIS ],; substr( obj_[ i,OBJ_BOX_SHAPE ], 1, 8 ),; - IF( scn_[ SCN_OBJ_HILITE ] == i, scn_[ SCN_CLR_HILITE ],; - 'w/b' /* obj_[i,OBJ_COLOR] */)) - CASE VouchInArray(obj_[i,OBJ_MDL_F_TYPE], {64,65} ) // Line - @ obj_[i,OBJ_ROW] + scn_[SCN_ROW_DIS],; - obj_[i,OBJ_COL] + scn_[SCN_COL_DIS] ; - TO obj_[i,OBJ_TO_ROW] + scn_[SCN_ROW_DIS],; - obj_[i,OBJ_TO_COL] + scn_[SCN_COL_DIS] ; - COLOR IF(scn_[SCN_OBJ_HILITE]==i,scn_[SCN_CLR_HILITE],; - 'w/b' /* obj_[i,OBJ_COLOR] */) + cColor ) + + CASE VouchInArray( obj_[ i, OBJ_MDL_F_TYPE ], { 64,65 } ) // Line + @ obj_[ i, OBJ_ROW ] + scn_[ SCN_ROW_DIS ],; + obj_[ i, OBJ_COL ] + scn_[ SCN_COL_DIS ] ; + TO obj_[ i, OBJ_TO_ROW ] + scn_[ SCN_ROW_DIS ],; + obj_[ i, OBJ_TO_COL ] + scn_[ SCN_COL_DIS ] ; + COLOR cColor + ENDCASE ENDIF - IF obj_[i,OBJ_TYPE] == OBJ_O_FIELD .OR. obj_[i,OBJ_TYPE] == OBJ_O_EXP + IF obj_[i,OBJ_TYPE] == OBJ_O_FIELD cText := obj_[ i,OBJ_TEXT ] - cColor := IF( scn_[ SCN_OBJ_SELECTED ] == i,scn_[ SCN_CLR_SELECT ],; - IF( scn_[ SCN_OBJ_HILITE ] == i,scn_[ SCN_CLR_HILITE ],; + cColor := iif( scn_[ SCN_OBJ_SELECTED ] == i,scn_[ SCN_CLR_SELECT ],; + iif( scn_[ SCN_OBJ_HILITE ] == i,scn_[ SCN_CLR_HILITE ],; 'W+/W' /* obj_[i,OBJ_COLOR] */ )) IF nOff < 0 cText := substr( obj_[ i,OBJ_TEXT ], abs( nOff ) + 1 ) @@ -330,8 +284,8 @@ FUNCTION scrMove(obj_,scn_) IF obj_[i,OBJ_TYPE] == OBJ_O_TEXT cText := obj_[ i,OBJ_EQN ] - cColor := IF( scn_[SCN_OBJ_SELECTED]==i,scn_[SCN_CLR_SELECT],; - IF( empty(obj_[i,OBJ_COLOR]),scn_[SCN_CLR_TEXT],; + cColor := iif( scn_[SCN_OBJ_SELECTED]==i,scn_[SCN_CLR_SELECT],; + iif( empty(obj_[i,OBJ_COLOR]),scn_[SCN_CLR_TEXT],; 'W/B' /* obj_[i,OBJ_COLOR] */)) IF nOff < 0 cText := substr( obj_[ i,OBJ_EQN ], abs( nOff ) + 1 ) @@ -344,28 +298,15 @@ FUNCTION scrMove(obj_,scn_) ENDIF NEXT - ScrDispSelctd( obj_,scn_ ) // Display Selected Screen - - IF scn_[ SCN_TOP ] > 0 - VouchWndRest(scrT) - ENDIF - IF scn_[ SCN_LEFT ] > 0 - VouchWndRest(scrL) - ENDIF - IF scn_[ SCN_BOTTOM ] < maxrow() - VouchWndRest(scrB) - ENDIF - IF scn_[ SCN_RIGHT ] < maxcol() - VouchWndRest(scrR) - ENDIF - + ScrDispSelctd( obj_, scn_ ) dispEnd() setcursor( crs ) + RETURN NIL //----------------------------------------------------------------------// -FUNCTION scrMoveLine(obj_,scn_) +FUNCTION scrMoveLine( obj_,scn_ ) LOCAL scrL,scrR,i,crs, nRow, nCol, cText, nOff, cColor crs := setCursor( 0 ) @@ -388,9 +329,6 @@ FUNCTION scrMoveLine(obj_,scn_) nOff := obj_[i,OBJ_COL]+scn_[SCN_COL_DIS] nRow := obj_[i,OBJ_ROW]+scn_[SCN_ROW_DIS] nCol := nOff - #ifdef __WVT__ - nCol := IF( nOff < 0, 0, nOff ) - #ENDIF IF obj_[i,OBJ_TYPE] == OBJ_O_BOX DO CASE @@ -399,7 +337,7 @@ FUNCTION scrMoveLine(obj_,scn_) obj_[i,OBJ_COL] + scn_[SCN_COL_DIS] ; TO obj_[i,OBJ_TO_ROW] + scn_[SCN_ROW_DIS],; obj_[i,OBJ_TO_COL] + scn_[SCN_COL_DIS] ; - COLOR IF(scn_[SCN_OBJ_HILITE]==i,scn_[SCN_CLR_HILITE],; + COLOR iif(scn_[SCN_OBJ_HILITE]==i,scn_[SCN_CLR_HILITE],; 'w/b' /* obj_[i,OBJ_COLOR] */) ENDCASE ENDIF @@ -407,25 +345,17 @@ FUNCTION scrMoveLine(obj_,scn_) IF obj_[ i,OBJ_ROW ] == scn_[ SCN_ROW_REP ] IF obj_[i,OBJ_TYPE] == OBJ_O_FIELD .OR. obj_[i,OBJ_TYPE] == OBJ_O_EXP cText := obj_[i,OBJ_TEXT] - cColor := IF(scn_[SCN_OBJ_SELECTED]==i,scn_[SCN_CLR_SELECT],; - IF(scn_[SCN_OBJ_HILITE ]==i,scn_[SCN_CLR_HILITE],; + cColor := iif(scn_[SCN_OBJ_SELECTED]==i,scn_[SCN_CLR_SELECT],; + iif(scn_[SCN_OBJ_HILITE ]==i,scn_[SCN_CLR_HILITE],; 'W+/W' /* obj_[i,OBJ_COLOR] */ )) - #ifdef __WVT__ - IF nOff < 0 - cText := substr( cText, abs( nOff )+1 ) - ENDIF - #ENDIF @ nRow, nCol SAY cText COLOR cColor ENDIF IF obj_[i,OBJ_TYPE] == OBJ_O_TEXT cText := obj_[i,OBJ_EQN] - cColor := IF(scn_[SCN_OBJ_SELECTED]==i,scn_[SCN_CLR_SELECT],; - IF(empty(obj_[i,OBJ_COLOR]),scn_[SCN_CLR_TEXT],; + cColor := iif(scn_[SCN_OBJ_SELECTED]==i,scn_[SCN_CLR_SELECT],; + iif(empty(obj_[i,OBJ_COLOR]),scn_[SCN_CLR_TEXT],; 'W/B' /* obj_[i,OBJ_COLOR] */)) - #ifdef __WVT__ - cText := IF( nOff < 0, substr( cText, abs( nOff )+1 ), cText ) - #ENDIF @ nRow, nCol SAY cText COLOR cColor ENDIF ENDIF diff --git a/harbour/contrib/hbcuied/cu_prpty.prg b/harbour/contrib/hbcuied/cu_prpty.prg index 3f93178211..4961c66251 100644 --- a/harbour/contrib/hbcuied/cu_prpty.prg +++ b/harbour/contrib/hbcuied/cu_prpty.prg @@ -71,127 +71,288 @@ //----------------------------------------------------------------------// -FUNCTION scrProperty( obj_,scn_ ) - LOCAL prp_ +FUNCTION scrAddBox( obj_, scn_, nObj, Sel ) + LOCAL nKey,o_,border,cClr, nnObj, cFile + + nnObj := nObj + cFile := '' + sel := 2 + + IF nnObj == 0 + o_:= scrObjBlank() + + o_[ OBJ_TYPE ] := OBJ_O_BOX + o_[ OBJ_ROW ] := scn_[ SCN_ROW_REP ] + o_[ OBJ_COL ] := scn_[ SCN_COL_REP ] + o_[ OBJ_TO_ROW ] := scn_[ SCN_ROW_REP ] + o_[ OBJ_TO_COL ] := scn_[ SCN_COL_REP ] + o_[ OBJ_SECTION ] := scrSecCur( scn_, scn_[ SCN_ROW_REP ] ) + o_[ OBJ_F_LEN ] := 9 + o_[ OBJ_MDL_F_TYPE ] := sel + 60 + + aadd( obj_, o_ ) + nObj := len( obj_ ) + ENDIF + + border := 'ÚÄ¿³ÙÄÀ³' // can be DOUBLE_SINGLE, etc + cClr := "w/b" + obj_[ nObj, OBJ_BORDER ] := 0.5 + + obj_[ nObj, OBJ_BOX_SHAPE ] := border + obj_[ nObj, OBJ_COLOR ] := cClr + obj_[ nObj, OBJ_ID ] := "Frame" + obj_[ nObj, OBJ_EQN ] := cFile + obj_[ nObj, OBJ_PATTERN ] := 'CLEAR ' + + IF nnObj > 0 + scrOnLastCol( obj_, scn_, nObj ) + scrMove( obj_, scn_ ) + ENDIF + + IF .t. + scrMsg( 'Draw Frame WITH . Finish WITH ' ) + + DO WHILE .t. + nKey := inkey( 0 ) + DO CASE + CASE nKey == K_RIGHT + IF scrMovRgt( scn_ ) + obj_[ nObj,OBJ_TO_COL ]++ + ENDIF + CASE nKey == K_LEFT + IF scrMovLft( scn_ ) + obj_[ nObj,OBJ_TO_COL ]-- + ENDIF + CASE nKey == K_DOWN + IF scrMovDn( scn_ ) + obj_[ nObj,OBJ_TO_ROW ]++ + ENDIF + CASE nKey == K_UP + IF scrMovUp( scn_ ) + obj_[ nObj,OBJ_TO_ROW ]-- + ENDIF + CASE nKey == K_ENTER + EXIT + ENDCASE + scrMove( obj_,scn_ ) + scrStatus( obj_,scn_ ) + ENDDO + ENDIF + + scrOrdObj( obj_ ) + scrMsg() + scn_[SCN_REFRESH] := OBJ_REFRESH_ALL + + RETURN NIL + +//----------------------------------------------------------------------// + +FUNCTION scrAddFld( obj_,scn_,nObj ) + LOCAL v_, n, sel_ + + sel_:= scrVvSelAble( scn_ ) + v_ := iif( nObj > 0, scrObj2Vv( obj_[ nObj ] ), scrVvBlank() ) + n := v_[ VV_FIELD ] + IF nObj == 0 + v_[ VV_FIELD ] := 0 + v_[ VV_ID ] := space( 10 ) + v_[ VV_F_PIC ] := space( 15 ) + v_[ VV_COLOR ] := 'N/W ' + ENDIF + + v_[ VV_EQN ] := 'fieldget('+ ltrim( str( n ) ) + ')' + + sel_[ VV_ALIGN ] := .f. + sel_[ VV_PRN_LEN ] := .f. + sel_[ VV_PRN_LEN ] := .f. + sel_[ VV_ALIGN ] := .f. + sel_[ VV_COLOR ] := .f. + sel_[ VV_POINT ] := .f. + sel_[ VV_COL_JUST ] := .f. + sel_[ VV_PATTERN ] := .f. + sel_[ VV_F_TYPE ] := .T. + + scrField( nObj, 1, obj_, scn_, v_, sel_, OBJ_CLR_FIELD ) + + IF nObj > 0 + scrOrdObj( obj_ ) + ENDIF + + RETURN NIL + +//----------------------------------------------------------------------// + +FUNCTION scrAddTxt( obj_,scn_,nKey,nMode ) + LOCAL txt_:={},n, lClub,i + LOCAL n1,s1,s2,nTxt,nDel + LOCAL nRepCol := scn_[SCN_COL_REP], nRepRow := scn_[SCN_ROW_REP] + LOCAL lOrder := .f. + // nMode 1.Add 2.Del 3.BS + + // Scan obj_ FOR Text Objects Related WITH Current Report Row + aeval( obj_,{|e_| iif( e_[ OBJ_TYPE ] == OBJ_O_TEXT .AND. e_[ OBJ_ROW ] == nRepRow, aadd( txt_,e_ ),'' ) } ) + IF nMode == 1 // New Character + IF empty( txt_ ) .OR. ascan( txt_,{|e_| VouchInRange( nRepCol, e_[OBJ_COL],e_[OBJ_TO_COL] ) } ) == 0 + aadd( txt_, scrObjBlank() ) ; lOrder := .t. + nTxt := len( txt_ ) + txt_[ nTxt, OBJ_TYPE ] := OBJ_O_TEXT + txt_[ nTxt, OBJ_F_TYPE ] := 'C' + txt_[ nTxt, OBJ_F_LEN ] := 1 + txt_[ nTxt, OBJ_ALIGN ] := 'L' + txt_[ nTxt, OBJ_ROW ] := scn_[SCN_ROW_REP] + txt_[ nTxt, OBJ_COL ] := scn_[SCN_COL_REP] + txt_[ nTxt, OBJ_EQN ] := '' + txt_[ nTxt, OBJ_ID ] := 'Text' + txt_[ nTxt, OBJ_COLOR ] := 'N/W' + txt_[ nTxt, OBJ_PITCH ] := 10 + txt_[ nTxt, OBJ_SECTION ] := scrSecCur( scn_,scn_[SCN_ROW_REP] ) + txt_[ nTxt, OBJ_TO_ROW ] := scn_[SCN_ROW_REP] + txt_[ nTxt, OBJ_TO_COL ] := scn_[SCN_COL_REP] + ENDIF + ENDIF + + nTxt := ascan( txt_,{|e_| VouchInRange( nRepCol, e_[ OBJ_COL ], e_[ OBJ_TO_COL ] ) } ) + + IF nMode == 1 + txt_[nTxt,OBJ_EQN] := substr( txt_[nTxt,OBJ_EQN],1,; + scn_[SCN_COL_REP]-txt_[nTxt,OBJ_COL] ) + ; + chr( nKey ) + ; + substr( txt_[nTxt,OBJ_EQN],scn_[SCN_COL_REP]-txt_[nTxt,OBJ_COL] + ; + iif( ReadInsert(),1,2 ) ) + txt_[nTxt,OBJ_TO_COL] := txt_[nTxt,OBJ_COL]+len( txt_[nTxt,OBJ_EQN] )-1 + + ELSEIF nMode == 2 .OR. nMode == 3 // Delete + IF readInsert() + txt_[nTxt,OBJ_EQN] := substr( txt_[nTxt,OBJ_EQN],1,; + scn_[SCN_COL_REP]-txt_[nTxt,OBJ_COL] ) + ; + substr( txt_[nTxt,OBJ_EQN],scn_[SCN_COL_REP]-txt_[nTxt,OBJ_COL] + 2 ) + txt_[nTxt,OBJ_TO_COL] := txt_[nTxt,OBJ_COL]+len( txt_[nTxt,OBJ_EQN] )-1 + ELSE // Divide it IN two objects + s1 := substr( txt_[nTxt,OBJ_EQN],1,scn_[SCN_COL_REP]-txt_[nTxt,OBJ_COL] ) + s2 := substr( txt_[nTxt,OBJ_EQN],scn_[SCN_COL_REP]-txt_[nTxt,OBJ_COL] + 2 ) + nDel := 0 + IF len( s1 ) > 0 + txt_[nTxt,OBJ_EQN] := s1 + txt_[nTxt,OBJ_TO_COL] := txt_[nTxt,OBJ_COL]+len( s1 )-1 + txt_[nTxt,OBJ_PRN_LEN] := len( s1 ) + ELSE + nDel := nTxt + ENDIF + + IF len( s2 ) > 0 + IF nDel == 0 + aadd( txt_,aclone( txt_[nTxt] ) ) // scrObjBlank() ) + lOrder := .t. + n1 := len( txt_ ) + ELSE + n1 := nDel + ENDIF + txt_[n1,OBJ_TYPE] := OBJ_O_TEXT + txt_[n1,OBJ_F_TYPE] := 'C' + txt_[n1,OBJ_F_LEN] := len( s2 ) + txt_[n1,OBJ_PRN_LEN] := len( s2 ) + // txt_[n1,OBJ_ALIGN] := 'L' + txt_[n1,OBJ_ROW] := scn_[SCN_ROW_REP] + txt_[n1,OBJ_COL] := scn_[SCN_COL_REP]+1 + txt_[n1,OBJ_EQN] := s2 + txt_[n1,OBJ_ID] := 'Text' + txt_[n1,OBJ_SECTION] := scrSecCur( scn_,scn_[SCN_ROW_REP] ) + txt_[n1,OBJ_TO_ROW] := scn_[SCN_ROW_REP] + txt_[n1,OBJ_TO_COL] := txt_[n1,OBJ_COL]+len( s2 )-1 + ENDIF + IF len( s1 )==0.AND.len( s2 )==0 + VouchAShrink( txt_,nTxt ) + IF empty( txt_ ) + aadd( txt_,scrObjBlank() ) + ENDIF + ENDIF + ENDIF + ENDIF + + IF !empty( txt_ ) + DO WHILE .t. + IF( n := ascan( txt_,{|e_| e_[OBJ_TO_COL] < e_[OBJ_COL] } ) ) > 0 + VouchAShrink( txt_,n ) + ELSE + EXIT + ENDIF + ENDDO + IF empty( txt_ ) + aadd( txt_,scrObjBlank() ) + ENDIF + // CLUB DIFFERENT TEXT OBJECTS IF THESE ARE ADJACENT + asort( txt_,,,{|e_,f_| e_[OBJ_COL] 0 + VouchAShrink( obj_,n ) + IF empty( obj_ ) + aadd( obj_, scrObjBlank() ) + ENDIF + ELSE + EXIT + ENDIF + ENDDO + + aeval( txt_,{|e_| iif( e_[OBJ_ROW]>0,aadd( obj_,e_ ),'' ) } ) // Now attach txt_ + + DO WHILE .t. + IF( n := ascan( obj_,{|e_| e_[OBJ_TO_COL] < e_[OBJ_COL] } ) ) > 0 + VouchAShrink( obj_,n ) + IF empty( obj_ ) + aadd( obj_,scrObjBlank() ) + ENDIF + ELSE + EXIT + ENDIF + ENDDO + + IF lOrder + // scrOrdObj( obj_ ) + ENDIF + IF nMode == 1 + keyboard( chr( K_RIGHT ) ) + ENDIF + + scn_[SCN_REFRESH] := OBJ_REFRESH_LINE + + RETURN NIL + +//----------------------------------------------------------------------// + +FUNCTION scrProperty( obj_, scn_ ) + LOCAL prp_:= {} HB_SYMBOL_UNUSED( obj_ ) DO CASE CASE scn_[ SCN_DESIGN ] == DGN_MODULE - prp_:= iif( empty( scn_[SCN_PROPERTY ] ), prpMdlBlank(), scn_[ SCN_PROPERTY ] ) - //prp_:= prpModule( prp_ ) /* Fetch actual values */ scn_[SCN_PROPERTY] := prp_ ENDCASE RETURN NIL -//----------------------------------------------------------------------// -#IF 0 -FUNCTION prpRStr2Ar(s,s1,s2) - LOCAL prp_:= array(REP_INIT_VRBLS) - - IF empty(s) // IF no property is defined, defaults - RETURN prpRepBlank() - ENDIF - - prp_[ REP_DESC ] := substr( s , REP_OS_DESC , REP_LEN_DESC ) - prp_[ REP_TYPE ] := val( substr( s , REP_OS_TYPE , REP_LEN_TYPE ) ) - prp_[ REP_IDX_NO ] := val( substr( s , REP_OS_IDX_NO , REP_LEN_IDX_NO ) ) - prp_[ REP_IDX_EXP ] := substr( s , REP_OS_IDX_EXP , REP_LEN_IDX_EXP ) - prp_[ REP_PG_SIZE ] := substr( s , REP_OS_PG_SIZE , REP_LEN_PG_SIZE ) - prp_[ REP_PG_LEN ] := val( substr( s , REP_OS_PG_LEN , REP_LEN_PG_LEN ) ) - prp_[ REP_PG_WID ] := val( substr( s , REP_OS_PG_WID , REP_LEN_PG_WID ) ) - prp_[ REP_LINES ] := val( substr( s , REP_OS_LINES , REP_LEN_LINES ) ) - prp_[ REP_MG_TOP ] := val( substr( s , REP_OS_MG_TOP , REP_LEN_MG_TOP ) ) - prp_[ REP_MG_LEFT ] := val( substr( s , REP_OS_MG_LEFT , REP_LEN_MG_LEFT ) ) - prp_[ REP_MG_BOTTOM ] := val( substr( s , REP_OS_MG_BOTTOM , REP_LEN_MG_BOTTOM ) ) - prp_[ REP_EJ_BEFORE ] := substr( s , REP_OS_EJ_BEFORE , REP_LEN_EJ_BEFORE ) == 'T' - prp_[ REP_EJ_AFTER ] := substr( s , REP_OS_EJ_AFTER , REP_LEN_EJ_AFTER ) == 'T' - prp_[ REP_PLAIN ] := val( substr( s , REP_OS_PLAIN , REP_LEN_PLAIN ) ) - prp_[ REP_FTR_PAG ] := substr( s , REP_OS_FTR_PAG , REP_LEN_FTR_PAG ) - prp_[ REP_SMR_NEXT ] := substr( s , REP_OS_SMR_NEXT , REP_LEN_SMR_NEXT ) == 'T' - prp_[ REP_HDR_PAGES ] := substr( s , REP_OS_HDR_PAGES , REP_LEN_HDR_PAGES ) - prp_[ REP_BNK_LINES ] := val( substr( s , REP_OS_BNK_LINES , REP_LEN_BNK_LINES ) ) - prp_[ REP_BNK_AFTER ] := val( substr( s , REP_OS_BNK_AFTER , REP_LEN_BNK_AFTER ) ) - prp_[ REP_DATA_BOX ] := substr( s , REP_OS_DATA_BOX , REP_LEN_DATA_BOX ) == 'T' - prp_[ REP_FILE ] := substr( s , REP_OS_FILE , REP_LEN_FILE ) - prp_[ REP_COPIES ] := val( substr( s , REP_OS_COPIES , REP_LEN_COPIES ) ) - prp_[ REP_TTL_PAGES ] := substr( s , REP_OS_TTL_PAGES , REP_LEN_TTL_PAGES ) - prp_[ REP_INIT_CPI ] := val( substr( s , REP_OS_INIT_CPI , REP_LEN_INIT_CPI ) ) - prp_[ REP_PRN_QLY ] := substr( s , REP_OS_PRN_QLY , REP_LEN_PRN_QLY ) - prp_[ REP_RECONFIRM ] := substr( s , REP_OS_RECONFIRM , REP_LEN_RECONFIRM ) == 'T' - prp_[ REP_FTR_BOTTOM ] := substr( s , REP_OS_FTR_BOTTOM, REP_LEN_FTR_BOTTOM ) == 'T' - prp_[ REP_HTML ] := substr( s , REP_OS_HTML , REP_LEN_HTML ) == 'T' - prp_[ REP_PRINTER ] := substr( s , REP_OS_PRINTER , REP_LEN_PRINTER ) - prp_[ REP_ORIENT ] := substr( s , REP_OS_ORIENT , REP_LEN_ORIENT ) - prp_[ REP_PREVIEW ] := substr( s , REP_OS_PREVIEW , REP_LEN_PREVIEW ) == 'T' - prp_[ REP_GRAY ] := substr( s , REP_OS_GRAY , REP_LEN_GRAY ) == 'T' - prp_[ REP_WINDLG ] := substr( s , REP_OS_WINDLG , REP_LEN_WINDLG ) == 'T' - prp_[ REP_DUPLEX ] := val( substr( s , REP_OS_DUPLEX , REP_LEN_DUPLEX ) ) - prp_[ REP_COLS ] := val( substr( s , REP_OS_COLS , REP_LEN_COLS ) ) - prp_[ REP_ROWS ] := val( substr( s , REP_OS_ROWS , REP_LEN_ROWS ) ) - - prp_[ REP_FOR ] := substr( s1, REP_OS_FOR , REP_LEN_FOR ) - prp_[ REP_WHILE ] := substr( s1, REP_OS_WHILE , REP_LEN_WHILE ) - prp_[ REP_FIRST ] := substr( s1, REP_OS_FIRST , REP_LEN_FIRST ) - prp_[ REP_EXE_PRE ] := substr( s2, REP_OS_EXE_PRE , REP_LEN_EXE_PRE ) - prp_[ REP_EXE_POST ] := substr( s2, REP_OS_EXE_POST , REP_LEN_EXE_POST ) - - prp_[ REP_ORIENT ] := iif( empty( prp_[ REP_ORIENT ] ), 'P', prp_[ REP_ORIENT ] ) - - RETURN prp_ -#ENDIF -//----------------------------------------------------------------------// - -FUNCTION prpRAr2Str(prp_,s,s1,s2) // Passed by reference - - s := pad( prp_[ REP_DESC ] , REP_LEN_DESC ) +; - pad( NTRIM( prp_[ REP_TYPE ] ), REP_LEN_TYPE ) +; - pad( NTRIM( prp_[ REP_IDX_NO ] ), REP_LEN_IDX_NO ) +; - pad( prp_[ REP_IDX_EXP ] , REP_LEN_IDX_EXP ) +; - pad( prp_[ REP_PG_SIZE ] , REP_LEN_PG_SIZE ) +; - pad( NTRIM( prp_[ REP_PG_LEN ] ), REP_LEN_PG_LEN ) +; - pad( NTRIM( prp_[ REP_PG_WID ] ), REP_LEN_PG_WID ) +; - pad( NTRIM( prp_[ REP_LINES ] ), REP_LEN_LINES ) +; - pad( NTRIM( prp_[ REP_MG_TOP ] ), REP_LEN_MG_TOP ) +; - pad( NTRIM( prp_[ REP_MG_LEFT ] ), REP_LEN_MG_LEFT ) +; - pad( NTRIM( prp_[ REP_MG_BOTTOM ] ), REP_LEN_MG_BOTTOM ) +; - iif( prp_[ REP_EJ_BEFORE ] , 'T','F' ) +; - iif( prp_[ REP_EJ_AFTER ] , 'T','F' ) +; - pad( NTRIM( prp_[ REP_PLAIN ] ), REP_LEN_PLAIN ) +; - pad( prp_[ REP_FTR_PAG ] , REP_LEN_FTR_PAG ) +; - iif( prp_[ REP_SMR_NEXT ] , 'T','F' ) +; - pad( prp_[ REP_HDR_PAGES ] , REP_LEN_HDR_PAGES ) +; - pad( NTRIM( prp_[ REP_BNK_LINES ] ), REP_LEN_BNK_LINES ) +; - pad( NTRIM( prp_[ REP_BNK_AFTER ] ), REP_LEN_BNK_AFTER ) +; - iif( prp_[ REP_DATA_BOX ] ,'T','F' ) +; - pad( prp_[ REP_FILE ] , REP_LEN_FILE ) +; - pad( NTRIM( prp_[ REP_COPIES ] ), REP_LEN_COPIES ) +; - pad( prp_[ REP_TTL_PAGES ] , REP_LEN_TTL_PAGES ) +; - pad( NTRIM( prp_[ REP_INIT_CPI ] ), REP_LEN_INIT_CPI ) +; - pad( prp_[ REP_PRN_QLY ] , REP_LEN_PRN_QLY ) +; - iif( prp_[ REP_RECONFIRM ] , 'T','F' ) +; - iif( prp_[ REP_FTR_BOTTOM ] , 'T','F' ) +; - iif( prp_[ REP_HTML ] , 'T','F' ) +; - pad( prp_[ REP_PRINTER ] , REP_LEN_PRINTER ) +; - pad( prp_[ REP_ORIENT ] , REP_LEN_ORIENT ) +; - iif( prp_[ REP_PREVIEW ] , 'T','F' ) +; - iif( prp_[ REP_GRAY ] , 'T','F' ) +; - iif( prp_[ REP_WINDLG ] , 'T','F' ) +; - pad( NTRIM( prp_[ REP_DUPLEX ] ), REP_LEN_DUPLEX ) +; - pad( NTRIM( prp_[ REP_COLS ] ), REP_LEN_COLS ) +; - pad( NTRIM( prp_[ REP_ROWS ] ), REP_LEN_ROWS ) - - s1 := pad( prp_[ REP_FOR ] , REP_LEN_FOR ) +; - pad( prp_[ REP_WHILE ] , REP_LEN_WHILE ) +; - pad( prp_[ REP_FIRST ] , REP_LEN_FIRST ) - - s2 := pad( prp_[ REP_EXE_PRE ] , REP_LEN_EXE_PRE ) +; - pad( prp_[ REP_EXE_POST ] , REP_LEN_EXE_POST ) - - RETURN NIL - //----------------------------------------------------------------------// FUNCTION scrVvBlank() @@ -538,256 +699,6 @@ FUNCTION scrClrFrBk( cClr ) #ENDIF //----------------------------------------------------------------------// -FUNCTION scrAddBox( obj_, scn_, nObj, Sel ) - LOCAL nKey,o_,border,cClr, nnObj, cFile - - DEFAULT Sel TO 0 - - nnObj := nObj - cFile := '' - border := ' '+chr( 255 ) - cClr := 'N/X ' - sel := 2 - - IF nnObj == 0 - o_:= scrObjBlank() - - o_[ OBJ_TYPE ] := OBJ_O_BOX - o_[ OBJ_ROW ] := scn_[ SCN_ROW_REP ] - o_[ OBJ_COL ] := scn_[ SCN_COL_REP ] - o_[ OBJ_TO_ROW ] := scn_[ SCN_ROW_REP ] - o_[ OBJ_TO_COL ] := scn_[ SCN_COL_REP ] - o_[ OBJ_SECTION ] := scrSecCur( scn_, scn_[ SCN_ROW_REP ] ) - o_[ OBJ_F_LEN ] := 9 - o_[ OBJ_MDL_F_TYPE ] := sel + 60 - - aadd( obj_, o_ ) - nObj := len( obj_ ) - ELSE - sel := obj_[ nObj, OBJ_MDL_F_TYPE ] - 60 - ENDIF - - IF sel == 2 - border := 'ÚÄ¿³ÙÄÀ³' // can be DOUBLE_SINGLE, etc - cClr := "w/b" - obj_[ nObj, OBJ_BORDER ] := 0.5 - ENDIF - - obj_[ nObj, OBJ_BOX_SHAPE ] := border - obj_[ nObj, OBJ_COLOR ] := cClr - obj_[ nObj, OBJ_ID ] := "Frame" - obj_[ nObj, OBJ_EQN ] := cFile - obj_[ nObj, OBJ_PATTERN ] := 'CLEAR ' - - IF nnObj == 0 - scrMsg( 'Draw Frame WITH . Finish WITH ' ) - - DO WHILE .t. - nKey := inkey( 0 ) - DO CASE - CASE nKey == K_RIGHT .AND. sel <> 5 - IF scrMovRgt( scn_ ) - obj_[ nObj,OBJ_TO_COL ]++ - ENDIF - CASE nKey == K_LEFT .AND. sel <> 5 - IF scrMovLft( scn_ ) - obj_[ nObj,OBJ_TO_COL ]-- - ENDIF - CASE nKey == K_DOWN .AND. sel <> 4 - IF scrMovDn( scn_ ) - obj_[ nObj,OBJ_TO_ROW ]++ - ENDIF - CASE nKey == K_UP .AND. sel <> 4 - IF scrMovUp( scn_ ) - obj_[ nObj,OBJ_TO_ROW ]-- - ENDIF - CASE nKey == K_ENTER - EXIT - ENDCASE - scrMove( obj_,scn_ ) - scrStatus( obj_,scn_ ) - ENDDO - ENDIF - - scrOrdObj( obj_ ) - scrMsg() - scn_[SCN_REFRESH] := OBJ_REFRESH_ALL - RETURN NIL - -//----------------------------------------------------------------------// - -FUNCTION scrAddFld( obj_,scn_,nObj ) - - HB_SYMBOL_UNUSED( obj_ ) - HB_SYMBOL_UNUSED( nObj ) - - DO CASE - CASE scn_[SCN_DESIGN] == DGN_MODULE - scrMdlFld( obj_, scn_, nObj ) - ENDCASE - - RETURN NIL - -//----------------------------------------------------------------------// - -FUNCTION scrAddTxt( obj_,scn_,nKey,nMode ) - LOCAL txt_:={},n, lClub,i - LOCAL n1,s1,s2,nTxt,nDel - LOCAL nRepCol := scn_[SCN_COL_REP], nRepRow := scn_[SCN_ROW_REP] - LOCAL lOrder := .f. - // nMode 1.Add 2.Del 3.BS - - // Scan obj_ FOR Text Objects Related WITH Current Report Row - aeval( obj_,{|e_| iif( e_[ OBJ_TYPE ] == OBJ_O_TEXT .AND. e_[ OBJ_ROW ] == nRepRow, aadd( txt_,e_ ),'' ) } ) - IF nMode == 1 // New Character - IF empty( txt_ ) .OR. ascan( txt_,{|e_| VouchInRange( nRepCol, e_[OBJ_COL],e_[OBJ_TO_COL] ) } ) == 0 - aadd( txt_, scrObjBlank() ) ; lOrder := .t. - nTxt := len( txt_ ) - txt_[ nTxt, OBJ_TYPE ] := OBJ_O_TEXT - txt_[ nTxt, OBJ_F_TYPE ] := 'C' - txt_[ nTxt, OBJ_F_LEN ] := 1 - txt_[ nTxt, OBJ_ALIGN ] := 'L' - txt_[ nTxt, OBJ_ROW ] := scn_[SCN_ROW_REP] - txt_[ nTxt, OBJ_COL ] := scn_[SCN_COL_REP] - txt_[ nTxt, OBJ_EQN ] := '' - txt_[ nTxt, OBJ_ID ] := 'Text' - txt_[ nTxt, OBJ_COLOR ] := 'N/W' - txt_[ nTxt, OBJ_PITCH ] := 10 - txt_[ nTxt, OBJ_SECTION ] := scrSecCur( scn_,scn_[SCN_ROW_REP] ) - txt_[ nTxt, OBJ_TO_ROW ] := scn_[SCN_ROW_REP] - txt_[ nTxt, OBJ_TO_COL ] := scn_[SCN_COL_REP] - ENDIF - ENDIF - - nTxt := ascan( txt_,{|e_| VouchInRange( nRepCol, e_[ OBJ_COL ], e_[ OBJ_TO_COL ] ) } ) - - IF nMode == 1 - txt_[nTxt,OBJ_EQN] := substr( txt_[nTxt,OBJ_EQN],1,; - scn_[SCN_COL_REP]-txt_[nTxt,OBJ_COL] ) + ; - chr( nKey ) + ; - substr( txt_[nTxt,OBJ_EQN],scn_[SCN_COL_REP]-txt_[nTxt,OBJ_COL] + ; - iif( ReadInsert(),1,2 ) ) - txt_[nTxt,OBJ_TO_COL] := txt_[nTxt,OBJ_COL]+len( txt_[nTxt,OBJ_EQN] )-1 - - ELSEIF nMode == 2 .OR. nMode == 3 // Delete - IF readInsert() - txt_[nTxt,OBJ_EQN] := substr( txt_[nTxt,OBJ_EQN],1,; - scn_[SCN_COL_REP]-txt_[nTxt,OBJ_COL] ) + ; - substr( txt_[nTxt,OBJ_EQN],scn_[SCN_COL_REP]-txt_[nTxt,OBJ_COL] + 2 ) - txt_[nTxt,OBJ_TO_COL] := txt_[nTxt,OBJ_COL]+len( txt_[nTxt,OBJ_EQN] )-1 - ELSE // Divide it IN two objects - s1 := substr( txt_[nTxt,OBJ_EQN],1,scn_[SCN_COL_REP]-txt_[nTxt,OBJ_COL] ) - s2 := substr( txt_[nTxt,OBJ_EQN],scn_[SCN_COL_REP]-txt_[nTxt,OBJ_COL] + 2 ) - nDel := 0 - IF len( s1 ) > 0 - txt_[nTxt,OBJ_EQN] := s1 - txt_[nTxt,OBJ_TO_COL] := txt_[nTxt,OBJ_COL]+len( s1 )-1 - txt_[nTxt,OBJ_PRN_LEN] := len( s1 ) - ELSE - nDel := nTxt - ENDIF - - IF len( s2 ) > 0 - IF nDel == 0 - aadd( txt_,aclone( txt_[nTxt] ) ) // scrObjBlank() ) - lOrder := .t. - n1 := len( txt_ ) - ELSE - n1 := nDel - ENDIF - txt_[n1,OBJ_TYPE] := OBJ_O_TEXT - txt_[n1,OBJ_F_TYPE] := 'C' - txt_[n1,OBJ_F_LEN] := len( s2 ) - txt_[n1,OBJ_PRN_LEN] := len( s2 ) - // txt_[n1,OBJ_ALIGN] := 'L' - txt_[n1,OBJ_ROW] := scn_[SCN_ROW_REP] - txt_[n1,OBJ_COL] := scn_[SCN_COL_REP]+1 - txt_[n1,OBJ_EQN] := s2 - txt_[n1,OBJ_ID] := 'Text' - txt_[n1,OBJ_SECTION] := scrSecCur( scn_,scn_[SCN_ROW_REP] ) - txt_[n1,OBJ_TO_ROW] := scn_[SCN_ROW_REP] - txt_[n1,OBJ_TO_COL] := txt_[n1,OBJ_COL]+len( s2 )-1 - ENDIF - IF len( s1 )==0.AND.len( s2 )==0 - VouchAShrink( txt_,nTxt ) - IF empty( txt_ ) - aadd( txt_,scrObjBlank() ) - ENDIF - ENDIF - ENDIF - ENDIF - - IF !empty( txt_ ) - DO WHILE .t. - IF( n := ascan( txt_,{|e_| e_[OBJ_TO_COL] < e_[OBJ_COL] } ) ) > 0 - VouchAShrink( txt_,n ) - ELSE - EXIT - ENDIF - ENDDO - IF empty( txt_ ) - aadd( txt_,scrObjBlank() ) - ENDIF - // CLUB DIFFERENT TEXT OBJECTS IF THESE ARE ADJACENT - asort( txt_,,,{|e_,f_| e_[OBJ_COL] 0 - VouchAShrink( obj_,n ) - IF empty( obj_ ) - aadd( obj_, scrObjBlank() ) - ENDIF - ELSE - EXIT - ENDIF - ENDDO - - aeval( txt_,{|e_| iif( e_[OBJ_ROW]>0,aadd( obj_,e_ ),'' ) } ) // Now attach txt_ - - DO WHILE .t. - IF( n := ascan( obj_,{|e_| e_[OBJ_TO_COL] < e_[OBJ_COL] } ) ) > 0 - VouchAShrink( obj_,n ) - IF empty( obj_ ) - aadd( obj_,scrObjBlank() ) - ENDIF - ELSE - EXIT - ENDIF - ENDDO - - IF lOrder - // scrOrdObj( obj_ ) - ENDIF - IF nMode == 1 - keyboard( chr( K_RIGHT ) ) - ENDIF - - scn_[SCN_REFRESH] := OBJ_REFRESH_LINE - - RETURN NIL - -//----------------------------------------------------------------------// - FUNCTION scrSecCur( scn_, nRepRow ) // Numeric id of sector LOCAL n,i n := 0 @@ -850,7 +761,7 @@ FUNCTION scrInkey( key_ ) DO WHILE .t. nKey := inkey( 0 ) - IF ascan( key_,nKey )>0 + IF ascan( key_, nKey ) > 0 EXIT ENDIF ENDDO diff --git a/harbour/contrib/hbcuied/hbcuied.hbp b/harbour/contrib/hbcuied/hbcuied.hbp index 5f84159985..ddd6a11fae 100644 --- a/harbour/contrib/hbcuied/hbcuied.hbp +++ b/harbour/contrib/hbcuied/hbcuied.hbp @@ -18,7 +18,6 @@ cu_main.prg cu_desgn.prg -cu_field.prg cu_menu.prg cu_outpt.prg cu_prpty.prg