File: n_svc_tab.sru
Size: 3103
Date: Mon, 07 Apr 2008 21:31:28 +0200
$PBExportHeader$n_svc_tab.sru
$PBExportComments$Tab Control Service
forward
global type n_svc_tab from n_svc_base
end type
end forward

global type n_svc_tab from n_svc_base
end type
global n_svc_tab n_svc_tab

forward prototypes
public function integer of_broadcast (readonly u_tab auo_tab, readonly u_tabpage auo_source, readonly string as_msg)
public function integer of_savepages (readonly u_tab auo_tab)
public function integer of_addtabpage (ref n_svc_mgr anv_svc, readonly u_tab auo_tab, readonly string as_classname)
public function boolean of_isvalidtabpage (readonly powerobject apo)
end prototypes

public function integer of_broadcast (readonly u_tab auo_tab, readonly u_tabpage auo_source, readonly string as_msg);u_tabpage luo_tabpage
long ll_count, n

ll_count = UPPERBOUND(auo_tab.Control)

FOR n = 1 to ll_count
   //skip broadcasting page
   IF auo_source = auo_tab.Control[n] THEN CONTINUE   
   //skip invalid pages
   IF NOT of_IsValidTabpage(auo_tab.Control[n]) THEN CONTINUE
   //cast object
   luo_tabpage = auo_tab.Control[n]
   IF luo_tabpage.EVENT ke_broadcastreceive(as_msg) = &
      CRet.FAILURE THEN RETURN Cret.FAILURE  
NEXT

RETURN CRet.SUCCESS
end function

public function integer of_savepages (readonly u_tab auo_tab);long n, ll_count
u_tabpage luo_tabpage

ll_count = UPPERBOUND(auo_tab.Control)

//validate all pages
FOR n = 1 to ll_count
   //skip invalid page
   IF NOT of_IsValidTabpage(auo_tab.Control[n]) THEN CONTINUE
   //cast object
   luo_tabpage = auo_tab.Control[n]
   //validate  
   IF luo_tabpage.EVENT ke_validate() = CRet.FAILURE THEN 
      auo_tab.SelectTab(auo_tab.Control[n])
      RETURN CRet.FAILURE
   END IF
NEXT

//update all pages
FOR n = 1 to ll_count
   //skip invalid page
   IF NOT of_IsValidTabpage(auo_tab.Control[n]) THEN CONTINUE
   //cast object
   luo_tabpage = auo_tab.Control[n]
   //validate  
   IF luo_tabpage.EVENT ke_update() = CRet.FAILURE THEN 
      auo_tab.SelectTab(auo_tab.Control[n])
      RETURN CRet.FAILURE
   END IF
NEXT

RETURN CRet.SUCCESS  
end function

public function integer of_addtabpage (ref n_svc_mgr anv_svc, readonly u_tab auo_tab, readonly string as_classname);n_svc_powerbuilder lnv_pb
u_tabpage luo_tabpage

anv_svc.of_LoadSvc(lnv_pb, CSvc.POWERBUILDER)

TRY
   IF NOT lnv_pb.of_IsDescendant(CFbase.TABPAGE, as_classname) THEN
      MessageBox("of_AddTabPage", "The class '" + &
                  as_classname + "' is not inherited from u_tabpage.")
      RETURN CRet.FAILURE
   END IF
   
   auo_tab.OpenTab(luo_tabpage, as_classname, 0)
   
   luo_tabpage.of_RegisterTab(auo_tab)
CATCH (Exception ex)
   MessageBox("of_AddTabPage", ex.GetMessage())
   RETURN CRet.FAILURE
END TRY

RETURN CRet.SUCCESS
end function

public function boolean of_isvalidtabpage (readonly powerobject apo);n_svc_mgr lnv_svc
n_svc_powerbuilder lnv_pb
ClassDefinition lcd

lnv_svc.of_LoadSvc(lnv_pb, CSvc.POWERBUILDER)

lcd = apo.ClassDefinition

RETURN lnv_pb.of_IsDescendant(CFbase.TABPAGE, lcd)
end function

on n_svc_tab.create
call super::create
end on

on n_svc_tab.destroy
call super::destroy
end on