INCLUDE "picklist.4gh" FORWARD pickListWCL VARIABLE mPickListWN pickListWCL VARIABLE mPickListLB ixListBox # the PKLB holds the PK values of the contents of mPickListLB. # It is hidden VARIABLE mPKLB ixListBox # variables to return the PK and item in the LB VARIABLE rtnPK CHAR(*) = NULL VARIABLE rtnItem CHAR(*) = NULL # name of the table that's currently in the list VARIABLE mTabName CHAR(*) = NULL VARIABLE mSqlStmt CHAR(*) = NULL VARIABLE mMaxRows CHAR(*) = NULL FUNCTION pickAbleBN(myVC ixVisualContainer, BNname CHAR(*), whatWay CHAR(*)) RETURNING VOID # dis or enable the button designated VARIABLE myBN ixButton LET myBN = myVC.getContainedObjByName(BNname) IF whatWay = "DIS" THEN CALL myBN.disable() ELSE CALL myBN.enable() END IF END FUNCTION # pickAbleBN(myVC ixVisualContainer, BNname CHAR(*), whatWay CHAR(*)) FUNCTION pickAbleMoveBNs(myVC ixVisualContainer, whichWay CHAR(*)) RETURNING VOID IF whichWay = "DIS" THEN # if we want to disable, just go ahead and disable CALL pickAbleBN(myVC,"gfFirstRowBN","DIS") CALL pickAbleBN(myVC,"gfPrevPageBN","DIS") CALL pickAbleBN(myVC,"gfNextPageBN","DIS") CALL pickAbleBN(myVC,"gfLastRowBN","DIS") ELSE # enable only if there's a current row and other details IF mPickListLB.getNumItems() > 0 THEN IF mPickListLB.getSelectedItem() > 1 THEN IF mPickListLB.getNumItems() > 20 THEN CALL pickAbleBN(myVC,"gfFirstRowBN","EN") CALL pickAbleBN(myVC,"gfPrevPageBN","EN") END IF ELSE CALL pickAbleBN(myVC,"gfFirstRowBN","DIS") CALL pickAbleBN(myVC,"gfPrevPageBN","DIS") END IF IF mPickListLB.getSelectedItem() < mPickListLB.getNumItems() - 19 THEN CALL pickAbleBN(myVC,"gfLastRowBN","EN") CALL pickAbleBN(myVC,"gfNextPageBN","EN") ELSE CALL pickAbleBN(myVC,"gfLastRowBN","DIS") CALL pickAbleBN(myVC,"gfNextPageBN","DIS") END IF ELSE # recursively call to disable CALL pickAbleMoveBNs(myVC, "DIS") END IF # mPickListLB.getNumItems() > 0 END IF END FUNCTION # pickAbleMoveBNs(myVC ixVisualContainer, whichWay CHAR(*)) FUNCTION locatePickList(myBN ixButton) RETURNING VOID VARIABLE myString ixString VARIABLE BNname CHAR(*) VARIABLE itemNum SMALLINT LET myString = NEW ixString("") CALL myString.concat(myBN.name) LET BNname = myString.getValueStr() CASE WHEN BNname MATCHES "*irstRowBN" LET itemNum = 1 WHEN BNname MATCHES "*extPageBN" # select down to the bottom of the next page the subsequent select # will locate us at the top of the next page. LET itemNum = mPickListLB.getSelectedItem() + 39 WHEN BNname MATCHES "*revPageBN" LET itemNum = mPickListLB.getSelectedItem() - 20 WHEN BNname MATCHES "*astRowBN" # locate at the very bottom, then we'll page back 19 columns LET itemNum = mPickListLB.getNumItems() END CASE IF itemNum > mPickListLB.getNumItems() THEN LET itemNum = mPickListLB.getNumItems() END IF IF itemNum < 1 THEN LET itemNum = 1 END IF CALL mPickListLB.selectItem(itemNum) IF BNname MATCHES "*extPageBN" OR BNname MATCHES "*astRowBN" THEN # we're at the bottom of the displayed LB, so get to the top LET itemNum = itemNum - 19 IF itemNum < 1 THEN LET itemNum = 1 END IF CALL mPickListLB.selectItem(itemNum) END IF CALL mPickListLB.focus() END FUNCTION # locatePickList(myBN ixButton) FUNCTION selPickItem(pickFlag BOOLEAN) RETURNING VOID # called from pickListLB.activate(), applyBN.activate(), and revertBN.activate() # to set the modular values as required LET rtnPK = NULL LET rtnItem = NULL IF pickFlag THEN # do fill in the modulars LET rtnItem = mPickListLB.getItemByNumber(mPickListLB.getSelectedItem()) LET rtnPK = mPKLB.getItemByNumber(mPickListLB.getSelectedItem()) END IF END FUNCTION # selPickItem(pickFlag BOOLEAN) FUNCTION pickListWCL::fillPickList (tabName CHAR(*), sqlStmt CHAR(*), maxRows INTEGER) RETURNING INTEGER VARIABLE ct SMALLINT VARIABLE myItem CHAR(*) VARIABLE myPK CHAR(*) VARIABLE myStatus INTEGER VARIABLE myRow ixRow VARIABLE myValue ixValue VARIABLE myTB ixTextBox VARIABLE msgTxt CHAR(*) IF mTabName IS NULL OR mTabName != tabName OR mSqlStmt IS NULL OR mSqlStmt != sqlStmt OR mMaxRows IS NULL OR mMaxRows != maxRows THEN # either first time in, # or not the same stuff as before; fill the LB IF ixApp::setCursor(ixApp::busyCur) THEN END IF LET mTabName = tabName LET mSqlStmt = sqlStmt LET mMaxRows = maxRows # empty anything in the pick boxes IF mPickListLB.getNumItems() > 0 THEN FOR ct = mPickListLB.getNumItems() TO 1 STEP -1 LET myItem = mPickListLB.delete(ct) LET myPK = mPKLB.delete(ct) END FOR # ct = mPickListLB.getNumItems() TO 1 END IF # mPickListLB.getNumItems() > 0 LET myStatus = prepPick(sqlStmt) WHILE myStatus = 0 LET myRow = fetchPick() IF myRow IS NULL THEN # error on the fetch EXIT WHILE END IF # myRow IS NULL LET myValue = myRow.getVal(1) IF myValue IS NULL THEN LET myStatus = 100 EXIT WHILE END IF LET ct = mPKLB.insert(itemVal: myValue, itemNum: mPKLB.getNumItems() + 1) LET myValue = myRow.getVal(2) LET ct = mPickListLB.insert(itemVal: myValue, itemNum: mPickListLB.getNumItems() + 1) IF ct = maxRows THEN # that's all; # if maxRows is 0 we'll never match it and get all rows LET myStatus = 100 END IF END WHILE # myStatus = 0 # select the 1st one CALL mPickListLB.selectItem(1) # turn on the paging keys as required CALL pickAbleMoveBNs(mPickListWN,"EN") # display a count LET myTB = mPickListWN.getContainedObjByName("messageTB") LET msgTxt = mPickListLB.getNumItems() USING "<<<<<<<<&", " Items" CALL myTB.replaceText(0,NULL,msgTxt) CALL myTB.setCursorPos(0) IF ixApp::setCursor(ixApp::standardCur) THEN END IF END IF # mTabName IS NULL OR mTabName != tabName ... RETURN mPickListLB.getNumItems() END FUNCTION # pickListWCL::fillPickList(tabName CHAR(*), sqlStmt CHAR(*), maxRows) FUNCTION pickListWCL::getPickList() RETURNING CHAR(*), CHAR(*) RETURN rtnPK, rtnItem END FUNCTION # pickListWCL::getPickList() HANDLER pickListWCL::pickListWN_start() RETURNING VOID # start LET mPickListWN = getWindow() LET mPickListLB = getContainedObjByName("pickListLB") LET mPKLB = getContainedObjByName("PKLB") END HANDLER -- pickListWCL::pickListWN_start HANDLER pickListWCL::pickListWN_finish(byWhom smallint) RETURNING BOOLEAN # don't allow them to finish from a child window IF byWhom = ixWindow::closedBySysMenu THEN RETURN FALSE ELSE RETURN TRUE END IF END HANDLER -- pickListWCL::pickListWN_finish HANDLER ixListBox::pickListWN_pickListLB_activate() RETURNING VOID # pick the highlighted row and return CALL selPickItem(TRUE) CALL mPickListWN.hide() END HANDLER -- ixListBox::pickListWN_pickListLB_activate HANDLER ixListBox::pickListWN_pickListLB_select() RETURNING VOID # turn on the paging keys as required CALL pickAbleMoveBNs(mPickListWN,"EN") END HANDLER -- ixListBox::pickListWN_pickListLB_select HANDLER ixPictureButton::pickListWN_gfFirstRowBN_activate() RETURNING VOID CALL locatePickList(self) # set buttons as required CALL pickAbleMoveBNs(getWindow(), "EN") END HANDLER -- ixPictureButton::pickListWN_gfFirstRowBN_activate HANDLER ixPictureButton::pickListWN_gfPrevPageBN_activate() RETURNING VOID CALL locatePickList(self) # set buttons as required CALL pickAbleMoveBNs(getWindow(), "EN") END HANDLER -- ixPictureButton::pickListWN_gfPrevPageBN_activate HANDLER ixPictureButton::pickListWN_gfNextPageBN_activate() RETURNING VOID CALL locatePickList(self) # set buttons as required CALL pickAbleMoveBNs(getWindow(), "EN") END HANDLER -- ixPictureButton::pickListWN_gfNextPageBN_activate HANDLER ixPictureButton::pickListWN_gfLastRowBN_activate() RETURNING VOID CALL locatePickList(self) # set buttons as required CALL pickAbleMoveBNs(getWindow(), "EN") END HANDLER -- ixPictureButton::pickListWN_gfLastRowBN_activate HANDLER ixPictureButton::pickListWN_applyBN_activate() RETURNING VOID # pick the highlighted row and return CALL selPickItem(TRUE) CALL mPickListWN.hide() END HANDLER -- ixPictureButton::pickListWN_applyBN_activate HANDLER ixPictureButton::pickListWN_revertBN_activate() RETURNING VOID # close without picking anything CALL selPickItem(FALSE) CALL mPickListWN.hide() END HANDLER -- ixPictureButton::pickListWN_revertBN_activate FUNCTION pickListWCL::pickListWCL( geometry ixGeometry, appearance ixAppearance, windowStyle SMALLINT, containingWindow ixWindow, title CHAR(*), enabled BOOLEAN, helpFile CHAR(*), name CHAR(*), helpNum INTEGER, source BOOLEAN, shown BOOLEAN, topicName CHAR(*), icon CHAR(*) ) : ixWindow( containingWindow : containingWindow, name : name, enabled : enabled, shown : shown, helpNum : helpNum, geometry : geometry, appearance : appearance, helpFile : helpFile, title : title, icon : icon, windowStyle : windowStyle, topicName : topicName, source : source ) VARIABLE itemList ixVector VARIABLE includeTable ixRow VARIABLE result INTEGER LET result = 0 HANDLE start WITH pickListWCL::pickListWN_start HANDLE finish WITH pickListWCL::pickListWN_finish LET itemList = NEW ixVector() LET pickListLB = NEW ixListBox( geometry : NEW ixGeometry( top : 75, left : 60, height : 4215, width : 2910 ), appearance : NEW ixAppearance( fontName : "Arial", fontSize : NULL, fontBold : NULL, fontItalic : NULL, fontUnderline : NULL, foreColor : NULL, backColor : NULL ), enabled : TRUE, tabIndex : NULL, tabEnabled : TRUE, style : ixListBox::singleSelect, name : "pickListLB", helpNum : 0, itemList : itemList, shown : TRUE, sorted : FALSE, container : SELF ) HANDLE pickListLB.activate WITH ixListBox::pickListWN_pickListLB_activate HANDLE pickListLB.select WITH ixListBox::pickListWN_pickListLB_select LET gfFirstRowBN = NEW ixPictureButton( geometry : NEW ixGeometry( top : 75, left : 3075, height : 450, width : 450 ), enabled : FALSE, tabIndex : NULL, tabEnabled : TRUE, disablePic : "gfFirstRowBN78", pressPic : "gfFirstRowBN76", enablePic : "gfFirstRowBN77", theDefault : FALSE, dynamicMode : FALSE, name : "gfFirstRowBN", helpNum : 0, shown : TRUE, container : SELF ) HANDLE gfFirstRowBN.activate WITH ixPictureButton::pickListWN_gfFirstRowBN_activate LET gfPrevPageBN = NEW ixPictureButton( geometry : NEW ixGeometry( top : 610, left : 3075, height : 450, width : 450 ), enabled : FALSE, tabIndex : NULL, tabEnabled : TRUE, disablePic : "gfPrevPageBN78", pressPic : "gfPrevPageBN76", enablePic : "gfPrevPageBN77", theDefault : FALSE, dynamicMode : FALSE, name : "gfPrevPageBN", helpNum : 0, shown : TRUE, container : SELF ) HANDLE gfPrevPageBN.activate WITH ixPictureButton::pickListWN_gfPrevPageBN_activate LET gfNextPageBN = NEW ixPictureButton( geometry : NEW ixGeometry( top : 1145, left : 3075, height : 450, width : 450 ), enabled : FALSE, tabIndex : NULL, tabEnabled : TRUE, disablePic : "gfNextPageBN78", pressPic : "gfNextPageBN76", enablePic : "gfNextPageBN77", theDefault : FALSE, dynamicMode : FALSE, name : "gfNextPageBN", helpNum : 0, shown : TRUE, container : SELF ) HANDLE gfNextPageBN.activate WITH ixPictureButton::pickListWN_gfNextPageBN_activate LET gfLastRowBN = NEW ixPictureButton( geometry : NEW ixGeometry( top : 1680, left : 3075, height : 450, width : 450 ), enabled : FALSE, tabIndex : NULL, tabEnabled : TRUE, disablePic : "gfLastRowBN78", pressPic : "gfLastRowBN76", enablePic : "gfLastRowBN77", theDefault : FALSE, dynamicMode : FALSE, name : "gfLastRowBN", helpNum : 0, shown : TRUE, container : SELF ) HANDLE gfLastRowBN.activate WITH ixPictureButton::pickListWN_gfLastRowBN_activate LET applyBN = NEW ixPictureButton( geometry : NEW ixGeometry( top : 4395, left : 2510, height : 450, width : 450 ), enabled : TRUE, tabIndex : NULL, tabEnabled : TRUE, disablePic : "applyBN78", pressPic : "applyBN76", enablePic : "applyBN77", theDefault : FALSE, dynamicMode : FALSE, name : "applyBN", helpNum : 0, shown : TRUE, container : SELF ) HANDLE applyBN.activate WITH ixPictureButton::pickListWN_applyBN_activate LET revertBN = NEW ixPictureButton( geometry : NEW ixGeometry( top : 4395, left : 3050, height : 450, width : 450 ), enabled : TRUE, tabIndex : NULL, tabEnabled : TRUE, disablePic : "revertBN78", pressPic : "revertBN76", enablePic : "revertBN77", theDefault : FALSE, dynamicMode : FALSE, name : "revertBN", helpNum : 0, shown : TRUE, container : SELF ) HANDLE revertBN.activate WITH ixPictureButton::pickListWN_revertBN_activate LET itemList = NEW ixVector() LET PKLB = NEW ixListBox( geometry : NEW ixGeometry( top : 2310, left : 3105, height : 1950, width : 360 ), appearance : NEW ixAppearance( fontName : NULL, fontSize : NULL, fontBold : NULL, fontItalic : NULL, fontUnderline : NULL, foreColor : NULL, backColor : NULL ), enabled : TRUE, tabIndex : NULL, tabEnabled : TRUE, style : ixListBox::singleSelect, name : "PKLB", helpNum : 0, itemList : itemList, shown : FALSE, sorted : FALSE, container : SELF ) LET messageTB = NEW ixTextBox( geometry : NEW ixGeometry( top : 4380, left : 90, height : 450, width : 2355 ), appearance : NEW ixAppearance( fontName : NULL, fontSize : NULL, fontBold : FALSE, fontItalic : NULL, fontUnderline : NULL, foreColor : NULL, backColor : NULL ), enabled : TRUE, tabIndex : NULL, tabEnabled : FALSE, maxChars : 255, name : "messageTB", helpNum : 0, shown : TRUE, text : "Please wait...", multiLine : TRUE, container : SELF ) END FUNCTION -- pickListWCL::pickListWCL