*-------------------------------------------------------------------------------------------------------------------------------------------------------- * (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! *-------------------------------------------------------------------------------------------------------------------------------------------------------- *< FOXBIN2PRG: Version="1.21" SourceFile="gridsort.vcx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * * DEFINE CLASS gridsort AS custom *< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" /> * *m: delidx && Delete IDX files if you use a Table *m: gridsort && Sort the column Ascending and Descending *m: readme && Read Me First *m: settooltip *m: showmenu && show a menu containing the name of all column and let user choose to see what he/she wants *p: ctooltip *p: isdelidx *p: ocolumnreference * * ctooltip = isdelidx = .T. Name = "gridsort" ocolumnreference = .NULL. Tag = "" * PROCEDURE delidx && Delete IDX files if you use a Table *************************************************** * Method........: DelIdx * Description...: This method automatically delete Idx files if you use thisa class with a table and set isdelidx to .T. * Date..........: 10 January 2006 * Author........: Ali Mohammad Hosein zadeh *************************************************** RETURN fnum=Adir(fnames,'*.idx') For i=1 To fnum If 'THISFORM'$Upper(fnames(i,1)) Delete File Fullpath(fnames(i,1)) Endif Endfor ENDPROC PROCEDURE Destroy If This.isdelidx This.delidx Endif ENDPROC PROCEDURE gridsort && Sort the column Ascending and Descending *************************************************** * Method........: GridSort * Description...: This method sort the column that you click * Date..........: 02 October 2005 * Update........: 10 December 2005 * Author........: Ali Mohammad Hosein zadeh *************************************************** Parameters ocolumn Private cobj,fname,fldname,ccount,cstr,nstr,cname *!* Procces to get the path to form LOCAL lcFname, llReorder llReorder = .F. *!* 21.11.2006 *!* mutu.marius && daca nu se transmite nimic - se ordoneaza dupa ultima coloana ordonata IF (PCOUNT() = 0 OR TYPE('oColumn') # 'O') AND !ISNULL(this.oColumnreference) oColumn = this.oColumnreference llReorder = .T. ENDIF IF TYPE('oColumn') # 'O' RETURN ENDIF IF ISNULL(oColumn) RETURN ENDIF && se retine ultima coloana ordonata this.oColumnreference = oColumn cstr='ocolumn.' nstr='' cname='' Do While .T. cstr=cstr+'parent.' nstr=cstr+'baseclass' If &nstr='Form' Exit Else nstr=cstr+'name' cname=&nstr+'.'+cname Endif Enddo *!* Make a temporary name for Idx file cobj='ThisForm.'+cname+ocolumn.Name+"."+ocolumn.CurrentControl+".ControlSource" fname = Strtran(cobj,'.','') lcfname=ADDBS(SYS(2023)) + fname *!* Assign field name to fldname fldname=&cobj *!* Assign The number or columns to ccount cobj="ThisForm."+cname+"COLUMNCOUNT" ccount=&cobj *!* CLEAR any column's picture For i=1 To ccount cobj="ThisForm."+cname+"columns("+Alltrim(Str(i))+").header1.picture=''" &cobj ENDFOR *!* Find out if it's first click or DESCENDING order If Empty(ocolumn.Tag) OR (ocolumn.Tag="Down" AND !llReorder) OR (llReorder AND ocolumn.Tag="Up") *!* INDEX ON field IF TYPE(fldname) = 'C' lcIndexName = 'left(' + fldname + ', 90)' INDEX on &lcIndexName To (lcfname) ELSE Index On &fldname To (lcfname) ENDIF *!* SAVE order of column ocolumn.Tag="Up" *!* Assign the picture cobj="ThisForm."+cname+ocolumn.Name+".header1.picture='up.bmp'" &cobj *!* FINALLY set order Set Order To (fname) Else *!* INDEX ON field IF TYPE(fldname) = 'C' lcIndexName = 'left(' + fldname + ', 90)' INDEX on &lcIndexName To (lcfname) ELSE Index On &fldname To (lcfname) ENDIF *!* SAVE order of column ocolumn.Tag="Down" *!* Assign the picture cobj="ThisForm."+cname+ocolumn.Name+".header1.picture='down.bmp'" &cobj *!* FINALLY set order Set Order To (fname) Descending Endif *!* Refresh the grid Go Top cobj="ThisForm."+cname+"Refresh" &cobj ENDPROC PROCEDURE Init *!* Set Classlib To Locfile('wizbtns','vcx') *!* Set Procedure To Locfile('gridproc','prg') ENDPROC PROCEDURE readme && Read Me First * ********************************************************************************************** * GridSort.vcx - Ali Mohammad Hosein Zadeh - info@binyazprograms.com - 10 January 2006 * * ********************************************************************************************** * Updated : 10 January 2006 * Updated : 10 December 2005 * ********************************************************************************************** * Description: * ------------ * A class for Visual FoxPro 8.0,9.0 that do many things for your grid. * * Class exposes the following methods : * ------------------------------------ * GridSort - Sort the columns ascending or descending automatically * SetToolTip - Sets the column's tooltip to it's ControlSource * ShowMenu - Show the main menu that you can hide or show colums and you can filter the table or cursor * DelIdx - For internal use.Delete Idx files if you use this class with a table and set isdelidx=.T. * * How to use : * ------------ * Grid Sort : * It's enough to write this line in the header's click event: * ThisForm.gridsort1.gridsort(This.Parent) * SetToolTip : * It's enough to write this line in the MouseMove of the column you want : * ThisForm.gridsort1.settooltip(This,nXCoord,nYCoord) * ShowMenu : * It's enough to write this line in the RightClick of the grid you want : * Thisform.gridsort1.showmenu(This) * * Limitations & Disclaimer: * ------------------------- * I authorize gridsort.vcx to be used by anyone for anything in which you would like to use it. * Feel free to modify, hack, fold, spindle, mutilate or otherwise alter this class library * any way you see fit. You may freely distribute this class library and may even tell * your boss that you wrote it, just please don't post it back to the web with your name on it. * This class library appears to function correctly but has not been extensively tested. * * Please E-Mail me if you have any questions, comments, improvements, suggestions, bugs found, * bugs fixed or just to say "looky, I'm using it!". * * ********************************************************************************************** ENDPROC PROCEDURE settooltip *************************************************** * Method........: SetToolTip * Description...: This method sets the column's tooltip that you pass * Date..........: 10 January 2006 * Author........: Ali Mohammad Hosein zadeh *************************************************** Lparameters ocolumn,x,Y Local nRelRow_Out, nRelCol_Out,nWhere_Out ocolumn.Parent.SetFocus() ocolumn.Parent.Gridhittest(x,Y,@nWhere_Out,@nRelRow_Out,@nRelCol_Out) ocolumn.Parent.ActivateCell(nRelRow_Out, nRelCol_Out) If This.ctooltip<>Eval("ocolumn." + ocolumn.CurrentControl + ".value") This.ctooltip=ocolumn.Parent.ToolTipText ocolumn.Parent.ToolTipText=Eval("alltrim(ocolumn." + ocolumn.CurrentControl + ".value)") Endif ENDPROC PROCEDURE showmenu && show a menu containing the name of all column and let user choose to see what he/she wants *************************************************** * Method........: ShowMenu * Description...: Show the main menu * Date..........: 10 January 2006 * Author........: Ali Mohammad Hosein zadeh *************************************************** Parameters ogrid If Type("ogrid")<>"O" Return ENDIF Dimension nmenus(ogrid.ColumnCount,2) For i=1 To ogrid.ColumnCount nmenus(i,1)=ogrid.Columns(i).header1.Caption nmenus(i,2)=ogrid.Columns(i).Visible ENDFOR Define Popup popmenus SHORTCUT Relative From Mrow(),Mcol() Define Bar 1 Of popmenus Prompt "All" Define Bar 2 Of popmenus Prompt "Costum" Define Bar 3 Of popmenus Prompt "\-" Set Mark Of Bar 1 Of popmenus Empty(Filter()) Set Mark Of Bar 2 Of popmenus !Empty(Filter()) On Selection Bar 1 Of popmenus Do All In gridproc On Selection Bar 2 Of popmenus Do custom_filter In gridproc For i=4 To Alen(nmenus,1)+3 Define Bar i Of popmenus Prompt nmenus(i-3,1) Set Mark Of Bar i Of popmenus To nmenus(i-3,2) cstr="ogrid.Columns("+Alltrim(Str(i-3))+").visible=!ogrid.Columns("+Alltrim(Str(i-3))+").visible" On Selection Bar i Of popmenus &cstr ENDFOR ogrid.Refresh Activate Popup popmenus ENDPROC ENDDEFINE