File: u_dw_form.sru
Size: 12847
Date: Mon, 07 Apr 2008 21:31:38 +0200
$PBExportHeader$u_dw_form.sru
$PBExportComments$Form entry datawindow
forward
global type u_dw_form from u_dw
end type
end forward

global type u_dw_form from u_dw
event ke_validatefailed ( long row,  string dwcolumnname,  string displaymessage )
event ke_validatefailedshowall ( long row[],  string dwcolumnname[],  string displaymessage[] )
event ke_dropdown pbm_dwndropdown
event ke_preinitservice ( )
end type
global u_dw_form u_dw_form

type variables
Public:
Boolean #Tooltips
Boolean #EditMode
Boolean #AutoSizeColumns = TRUE
Boolean #ValidateRequiredFields = TRUE
Boolean #StandardDropDownDatawindow = TRUE
Boolean #DropDownServices = TRUE
Boolean #DropDownDateTime = TRUE
Boolean #IgnoreDateTimeError = TRUE
Boolean #PromptValidationErrors = TRUE
Boolean #StopOnFirstValidationError = TRUE

Protected:
string is_validatecolumns[]
CONSTANT string DW_FORM_SERVICE = "n_svc_dw_form"
//Private:
string is_taborders
boolean INIT_EDITMODE
boolean IS_EDITMODE
n_base_dropdown inv_dd

Private:
CONSTANT string DEFAULT_TIP = "||DW TIP||"
long ToolTipID, BaloonToolTipID
String dwTooltip, LastDWO
Boolean HitTest, IsBalloon
integer ii_lastx, ii_lasty
end variables

forward prototypes
public subroutine of_standarddddw ()
public subroutine of_initvalidatefields ()
public function integer of_validatefields ()
public subroutine of_autosizecolumns (readonly boolean ab_autosize)
public subroutine of_editmode (readonly boolean ab_editmode)
public subroutine of_initeditmode ()
public function boolean of_iseditmode ()
public function integer of_setdataobject (readonly string as_dataobjectname)
public subroutine of_initdropdownservices ()
protected subroutine of_recalcdddw ()
public subroutine of_setcolumndropdown (readonly string as_colname, readonly string as_dropdownservice)
public function integer of_initallservices ()
public subroutine of_autosizecolumns (readonly boolean ab_autosize, readonly boolean ab_initcolsize)
public subroutine of_autosizecolumns (readonly boolean ab_autosize, readonly boolean ab_initcolsize, readonly boolean ab_halfpad)
public subroutine of_tooltips (readonly boolean ab_tooltips)
public subroutine of_addtooltip (readonly string as_colname, readonly string as_tooltip)
public subroutine of_addtooltip (readonly string as_colname, readonly boolean ab_balloon, readonly icon ai_icon, readonly string as_title, readonly string as_tooltip)
public subroutine of_resetvalidate ()
end prototypes

event ke_validatefailed(long row, string dwcolumnname, string displaymessage);string ls_title, ls_msg

ls_title = "Required Value Missing"
ls_msg = "Please supply a value for " + displaymessage + "."

IF #PromptValidationErrors THEN
   MessageBox(ls_title, ls_msg, Exclamation!)
END IF

this.ScrollToRow(row)
this.SetFocus()
this.SetRow(row)
this.SetColumn(dwcolumnname)
end event

event ke_validatefailedshowall(long row[], string dwcolumnname[], string displaymessage[]);string ls_title, ls_msg
long ll_ctr, n

ll_ctr = UPPERBOUND(displaymessage)
FOR n = 1 TO ll_ctr
   ls_msg += displaymessage[n]
   IF n < ll_ctr THEN ls_msg += CString.CR_NEWLINE
NEXT

ls_title = "Required Value(s) Missing"
ls_msg = "Please supply a value for the following:" + &
         CString.CR_NEWLINE + CString.CR_NEWLINE + &
         ls_msg

IF #PromptValidationErrors THEN
   MessageBox(ls_title, ls_msg, Exclamation!)
END IF

this.ScrollToRow(row[1])
this.SetFocus()
this.SetRow(row[1])

IF ll_ctr = 1 THEN
   this.SetColumn(dwcolumnname[1])
END IF
end event

event ke_dropdown;IF #DropDownServices THEN
   n_svc_dropdown lnv_dd
   n_svc_mgr lnv_svc
   
   lnv_svc.of_LoadSvc(lnv_dd, CSvc.DROPDOWN)
   
   RETURN lnv_dd.of_showdropdown(lnv_svc, this, this.GetRow(), this.GetColumnName(), inv_dd)
ELSE
   RETURN CRet.NO_ACTION
END IF
end event

event ke_preinitservice();//fired prior to running services
end event

public subroutine of_standarddddw ();n_svc_mgr lnv_svc
n_svc_dw_form lnv_dwf

lnv_svc.of_LoadSvc(lnv_dwf, DW_FORM_SERVICE)
lnv_dwf.of_StandardDDDW(lnv_svc, this)
end subroutine

public subroutine of_initvalidatefields ();string ls_empty[]
n_svc_dw_form lnv_dw
n_svc_mgr lnv_svcman

IF NOT #ValidateRequiredFields THEN RETURN

//clear array
is_validatecolumns = ls_empty

lnv_svcman.of_loadsvc(lnv_dw, DW_FORM_SERVICE)

lnv_dw.of_InitValidateFields(this, is_validatecolumns)
end subroutine

public function integer of_validatefields ();long ll_ret, n, ll_rows[]
n_svc_mgr lnv_svcman
n_svc_dw_form lnv_dw
string ls_columns[], ls_msgs[]

IF NOT #ValidateRequiredFields THEN RETURN CRet.NO_ACTION

IF NOT of_IsEditMode() THEN RETURN CRet.NO_ACTION

lnv_svcman.of_loadsvc(lnv_dw, DW_FORM_SERVICE)

TRY
   ll_ret = &
      lnv_dw.of_ValidateFields(lnv_svcman, &
                               this, &
                               is_validatecolumns, &
                               ls_columns, &
                               ll_rows, &
                               ls_msgs)
                               
   IF ll_ret > 0 THEN
      IF #StopOnFirstValidationError THEN
         //show only first error
         EVENT ke_validatefailed(ll_rows[1], ls_columns[1], ls_msgs[1])
      ELSE
         //show all errors
         EVENT ke_validatefailedshowall(ll_rows, ls_columns, ls_msgs)
      END IF
   END IF
CATCH (Exception ex)
   ll_ret = CRet.FAILURE
FINALLY
   RETURN ll_ret
END TRY
end function

public subroutine of_autosizecolumns (readonly boolean ab_autosize);of_AutosizeColumns(ab_autosize, FALSE)
end subroutine

public subroutine of_editmode (readonly boolean ab_editmode);n_svc_mgr lnv_svc
n_svc_dw_form lnv_f

IF NOT INIT_EDITMODE THEN of_initeditmode()

IS_EDITMODE = ab_editmode

lnv_svc.of_LoadSvc(lnv_f, DW_FORM_SERVICE)
lnv_f.of_EditMode(lnv_svc, this, is_taborders, is_validatecolumns, ab_editmode, #StandardDropdownDatawindow)

end subroutine

public subroutine of_initeditmode ();n_svc_mgr lnv_svc
n_svc_dw_form lnv_f

lnv_svc.of_LoadSvc(lnv_f, DW_FORM_SERVICE)
is_taborders = lnv_f.of_GetTabSequence(lnv_svc, this)
INIT_EDITMODE = TRUE
end subroutine

public function boolean of_iseditmode ();RETURN IS_EDITMODE
end function

public function integer of_setdataobject (readonly string as_dataobjectname);IF SUPER::of_SetDataobject(as_dataobjectname) = CRet.FAILURE THEN &
   RETURN CRet.FAILURE

RETURN of_InitAllServices()
end function

public subroutine of_initdropdownservices ();IF #DropDownServices THEN
   n_svc_mgr lnv_svc
   n_svc_dropdown lnv_dd
   
   lnv_svc.of_LoadSvc(lnv_dd, CSvc.DROPDOWN)
   
   //date/time
   IF #DropDownDateTime THEN
      lnv_dd.of_DropdownDatetime(lnv_svc, this)
   END IF
   //init
   lnv_dd.of_InitDropdownServices(lnv_svc, this)
END IF
end subroutine

protected subroutine of_recalcdddw ();n_svc_mgr lnv_svc
n_svc_dw_form lnv_dwf

lnv_svc.of_LoadSvc(lnv_dwf, DW_FORM_SERVICE)
lnv_dwf.of_RecalcDDDW(lnv_svc, this)
end subroutine

public subroutine of_setcolumndropdown (readonly string as_colname, readonly string as_dropdownservice);n_svc_mgr lnv_svc
n_svc_dropdown lnv_dd

lnv_svc.of_LoadSvc(lnv_dd, CSvc.DROPDOWN)
lnv_dd.of_setdropdownservice(lnv_svc, this, as_colname, as_dropdownservice)
end subroutine

public function integer of_initallservices ();//fire pre-init
EVENT ke_preinitservice()

IF #ValidateRequiredFields THEN
   of_InitValidateFields()
END IF
IF #StandardDropDownDatawindow THEN
   of_StandardDDDW()
END IF
IF #DropdownServices THEN
   of_InitDropdownServices()
END IF

of_EditMode(#EditMode)

POST of_AutoSizeColumns(#AutoSizeColumns)

RETURN CRet.SUCCESS
end function

public subroutine of_autosizecolumns (readonly boolean ab_autosize, readonly boolean ab_initcolsize);of_AutoSizeColumns(ab_autosize, ab_initcolsize, FALSE)
end subroutine

public subroutine of_autosizecolumns (readonly boolean ab_autosize, readonly boolean ab_initcolsize, readonly boolean ab_halfpad);#AutoSizeColumns = ab_autosize

IF #AutoSizeColumns THEN
   n_svc_mgr lnv_svc
   n_svc_dw_form lnv_form
   
   lnv_svc.of_LoadSvc(lnv_form, DW_FORM_SERVICE)
   lnv_form.of_AutoSizeColumns(lnv_svc, this, ab_initcolsize, ab_halfpad)
   //re-init
   of_ResizeObjects(TRUE)
END IF
end subroutine

public subroutine of_tooltips (readonly boolean ab_tooltips);#Tooltips = ab_tooltips

IF #Tooltips THEN
   n_svc_mgr lnv_svc
   n_svc_tooltip lnv_tip
   
   lnv_svc.of_loadsvc(lnv_tip, CSvc.TOOLTIP)
   ToolTipID = lnv_tip.of_addtool(lnv_svc, this, DEFAULT_TIP, 0, FALSE, FALSE)
   BaloonToolTipID = lnv_tip.of_addtool(lnv_svc, this, DEFAULT_TIP, 0, TRUE, FALSE)
END IF
end subroutine

public subroutine of_addtooltip (readonly string as_colname, readonly string as_tooltip);of_AddToolTip(as_colname, FALSE, none!, CString.EMPTY, as_tooltip)
end subroutine

public subroutine of_addtooltip (readonly string as_colname, readonly boolean ab_balloon, readonly icon ai_icon, readonly string as_title, readonly string as_tooltip);n_svc_mgr lnv_svc
n_svc_dw_form lnv_dw

lnv_svc.of_LoadSvc(lnv_dw, DW_FORM_SERVICE)
lnv_dw.of_AddToolTip(lnv_svc, this, as_colname, ab_balloon, ai_icon, as_title, as_tooltip)
end subroutine

public subroutine of_resetvalidate ();n_svc_mgr lnv_svcman
n_svc_dw_form lnv_dw

IF NOT #ValidateRequiredFields THEN RETURN

IF NOT of_IsEditMode() THEN RETURN

lnv_svcman.of_loadsvc(lnv_dw, DW_FORM_SERVICE)

lnv_dw.of_ResetValidate(lnv_svcman, this, is_validatecolumns)
end subroutine

on u_dw_form.create
call super::create
end on

on u_dw_form.destroy
call super::destroy
end on

event resize;call super::resize;//we need to resize the DDDW's 
//when we resize the DW
IF #StandardDropDownDatawindow THEN
   of_RecalcDDDW()
END IF
end event

event itemerror;call super::itemerror;IF #IgnoreDateTimeError THEN
   IF NOT ISVALID(dwo) THEN RETURN CRet.NO_ACTION
   
   string ls_col  
   n_svc_mgr lnv_svc
   n_svc_dw_form lnv_dw
   
   lnv_svc.of_LoadSvc(lnv_dw, DW_FORM_SERVICE)
   ls_col = STRING(dwo.Name)
   
   RETURN lnv_dw.of_IgnoreDateTimeError(this, row, ls_col)
END IF
end event

event destructor;call super::destructor;IF ISVALID(inv_dd) THEN DESTROY inv_dd

IF #ToolTips THEN
   n_svc_mgr lnv_svc
   n_svc_tooltip lnv_tip
   
   lnv_svc.of_LoadSvc(lnv_tip, CSvc.TOOLTIP)
   //release tooltips
   lnv_tip.of_remove(lnv_svc, this, ToolTipID)
   lnv_tip.of_remove(lnv_svc, this, BaloonToolTipID)
END IF
end event

event ke_preopen;call super::ke_preopen;of_Tooltips(#Tooltips)
end event

event ke_dwmousemove;call super::ke_dwmousemove;//===========================================================================
// Event   : Ke_dwmousemove (public )
// Object: dw_1
//---------------------------------------------------------------------------
// Description:
// Note:
//---------------------------------------------------------------------------
// Parameters:
//  value Integer xpos
//  value Integer ypos
//  value Long row
//  value DWObject dwo
//---------------------------------------------------------------------------
// Returns: Long
//---------------------------------------------------------------------------
// Author: (Yeyi) Gabriel B. Abulencia
//===========================================================================
n_svc_mgr lnv_svc

IF #ToolTips THEN 
   IF dwToolTip = DEFAULT_TIP THEN RETURN CRet.NO_ACTION

   n_svc_tooltip lnv_tip
   
   lnv_svc.of_LoadSvc(lnv_tip, CSvc.TOOLTIP)
   lnv_tip.of_dwmousemove(lnv_svc, this, dwo, dwToolTip, LastDWO, BaloonToolTipID, ToolTipID, HitTest, IsBalloon)
END IF
end event

event ke_mousemove;call super::ke_mousemove;//===========================================================================
// Event   : Ke_mousemove (public )
// Object: dw_1
//---------------------------------------------------------------------------
// Description:
// Note:
//---------------------------------------------------------------------------
// Parameters:
//  value UnsignedLong flags
//  value Integer xpos
//  value Integer ypos
//---------------------------------------------------------------------------
// Returns: Long
//---------------------------------------------------------------------------
// Author: (Yeyi) Gabriel B. Abulencia
//===========================================================================
IF #ToolTips And HitTest THEN
   n_svc_mgr lnv_svc
   n_svc_isempty lnv_check
   n_svc_tooltip lnv_tip
   
   IF dwToolTip = DEFAULT_TIP THEN RETURN CRet.NO_ACTION
   
   //load service
   lnv_Svc.of_LoadSvc(lnv_check, CSvc.ISEMPTY)
   IF lnv_check.of_isempty(dwTooltip) THEN RETURN CRet.NO_ACTION
   lnv_Svc.of_LoadSvc(lnv_tip, CSvc.TOOLTIP)
   lnv_tip.of_relaymsg(lnv_svc, this, IsBalloon)   
END IF
end event

event ke_linkagevalidate;call super::ke_linkagevalidate;IF #Link AND #EditMode THEN
   IF AncestorReturnValue = CRet.FAILURE THEN RETURN AncestorReturnValue
   
   IF of_Validatefields() > 0 THEN 
      RETURN CRet.FAILURE
   END IF
END IF

RETURN AncestorReturnValue
end event