*--------------------------------------------------------------------------------------------------------------------------------------------------------
* (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