XBROWSE remove or show header sort bitmap

XBROWSE remove or show header sort bitmap

Postby avista » Thu Mar 26, 2015 11:19 pm

Hi
I need to change sort order if i change column with arrow keys
and that is working good
But i want to remove sort bitmap showed on the header of the previous selected column
and show to the header of the new selected column
Please for solution

Code: Select all  Expand view
//----------------------------------------------------------------------------//

function OK_MAT( cMat )

local lVrati := .f.

local oDlg,oBrw

local nIndeksOld := 1

   DEFINE DIALOG oDlg SIZE 500,600 PIXEL TITLE "Artikli"

   @ 30,10 XBROWSE oBrw SIZE -10,-30 PIXEL OF oDlg ;
      DATASOURCE "MAT" ;
      COLUMNS "MAT", "NAZ" ;
      HEADERS "Artikl", "Naziv" ;
      CELL LINES NOBORDER AUTOSORT      FOOTERS ;
      ON CHANGE ( IIF( nIndeksOld <> oBrw:SelectedCol():nCreationOrder ,;
                       ( nIndeksOld := oBrw:SelectedCol():nCreationOrder ,;
                         MAT->( OrdSetFocus(oBrw:SelectedCol():nCreationOrder) ) ,;
; //  HERE i need to remove sort bitmap on the header from the old selected column
; //  and  to show sort bitmap on the header of the new selected column
; //  IF i click column header it is ok but not if i change it with arrow keys
                         oBrw:cSeek := "" ,;
                         oBrw:oSeek:Refresh() ,;
                         oBrw:Refresh()    ;
                       ) ,;
                     ) ;
                )

   oBrw:aCols[ 1 ]:bLClickHeader := { |r,c,f,oCol | oBrw:SelectCol(oCol:nPos) }
   oBrw:aCols[ 2 ]:bLClickHeader := { |r,c,f,oCol | oBrw:SelectCol(oCol:nPos) }

   oBrw:lColChangeNotify := .t.

   oBrw:CreateFromCode()

   @ 10,10 SAY oBrw:oSeek PROMPT oBrw:cSeek SIZE 180,10 PIXEL ;
      OF oDlg COLOR CLR_HRED,CLR_YELLOW

   ACTIVATE DIALOG oDlg CENTERED

   MAT->( OrdSetFocus( 1 ) )

RETURN lVrati




Best regards,
User avatar
avista
 
Posts: 301
Joined: Fri Jun 01, 2007 9:07 am
Location: Macedonia

Re: XBROWSE remove or show header sort bitmap

Postby FranciscoA » Fri Mar 27, 2015 4:28 am

avista.
Please try this sample code and tell us. (Here is working for me)
Code: Select all  Expand view
local nOldColSel
...
DBSELECTAREA("PVTPROD")
INDEX ON upper(FIELD->CLIENTE) TO CLTE TEMPORARY ADDITIVE
INDEX ON upper(FIELD->DESCRIP) TO DSCR TEMPORARY ADDITIVE
cAlias:=Alias()
...
@1,1 XBROWSE oBrw OF oDlg ;
     COLUMNS ...
     ALIAS cAlias ;
     AUTOSORT
...
   oBrw:lColChangeNotify := .t.
...
//-------------------------------------------------------------------------------------------------------------------
//HERE...
 nOldColSel := oBrw:nColSel

 oBrw:bChange:={|| iif(oBrw:nColSel <> nOldColSel .and. oBrw:aCols[oBrw:nColSel]:cSortOrder <> nil, (nOldColSel:=oBrw:nColSel,oBrw:aCols[oBrw:nColSel]:HeaderLButtonUp( 0, 0, 0 )),) }     //HERE...
//-------------------------------------------------------------------------------------------------------------------

 
Regards.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: XBROWSE remove or show header sort bitmap

Postby avista » Sat Mar 28, 2015 12:55 pm

Francisco
Thanks for reply ...workin good

One more question please ?

How to show oBrw:cSeek on the footer of the selected col.
I dont want to show it on dialog like this
Code: Select all  Expand view

@ 10,10 SAY oBrw:oSeek PROMPT oBrw:cSeek SIZE 180,10 PIXEL ;
      OF oDlg COLOR CLR_HRED,CLR_YELLOW
 

Best regards,
User avatar
avista
 
Posts: 301
Joined: Fri Jun 01, 2007 9:07 am
Location: Macedonia

Re: XBROWSE remove or show header sort bitmap

Postby nageswaragunupudi » Sat Mar 28, 2015 6:31 pm

This is a sample using states.dbf in \fwh\samples\ folder.
Please copy this sample program in samples folder, build and test as it is.
Then you may adopt to your tables.

Code: Select all  Expand view
#include "fivewin.ch"

REQUEST DBFCDX

//----------------------------------------------------------------------------//

function Main()

   FIELD CODE,NAME

   local oDlg, oBrw, oFont

   FERASE( "STATES.CDX" )

   USE STATES VIA "DBFCDX"
   INDEX ON CODE TAG CODE
   INDEX ON UPPER(NAME) TAG NAME
   SET ORDER TO TAG CODE
   GO TOP

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg SIZE 400,400 PIXEL FONT oFont

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      DATASOURCE "STATES" ;
      COLUMNS "Code", "Name" ;
      HEADERS "StateCode", "StateName" ;
      AUTOSORT CELL LINES FOOTERS NOBORDER ;
      ON CHANGE ( ;
         If( Empty( oBrw:SelectedCol():cOrder ), ;
           ( oBrw:SelectedCol():SetOrder(), oBrw:Refresh() ), ;
         nil ) )

   WITH OBJECT oBrw
      :lColChangeNotify := .t.
      :lSortDescend     := .f.
      :bFooters         := { |oCol| If( Empty( oCol:cOrder ), "", oBrw:cSeek ) }
      :oSeek            := TSeek():New( oBrw )
      //
      :CreateFromCode()
   END

   ACTIVATE DIALOG oDlg CENTERED

return nil

//----------------------------------------------------------------------------//

CLASS TSeek STATIC

   DATA oBrw

   METHOD New( oBrw ) CONSTRUCTOR
   METHOD SetText( c ) INLINE ::oBrw:RefreshFooters()

ENDCLASS

METHOD New( oBrw ) CLASS TSeek

   ::oBrw   := oBrw

return Self

//----------------------------------------------------------------------------//
 
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: XBROWSE remove or show header sort bitmap

Postby avista » Tue Mar 31, 2015 12:06 pm

Mr. Rao
Thanks this is working good.

Just one more question
How to implement Incremental Seeks/Filters
optional controled by variables lMYSeekWild, lMYIncrFilter

Can i add

Code: Select all  Expand view

WITH OBJECT oBrw
     :lSeekWild := Iif(lMYSeekWild, .t., .f.)
     :lIncrFilter := Iif(lMYIncrFilter, .t., .f.)
END
 


Need i something else ?

Best regards,
User avatar
avista
 
Posts: 301
Joined: Fri Jun 01, 2007 9:07 am
Location: Macedonia

Re: XBROWSE remove or show header sort bitmap

Postby nageswaragunupudi » Tue Mar 31, 2015 1:24 pm

Enough
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: XBROWSE remove or show header sort bitmap

Postby avista » Thu Apr 02, 2015 10:39 pm

Mr Rao,

Ihave try manytimes and i think oBrw:cFilterFld must be controled too.
This sample is now working good (? or maybe i need to test it on bigger file)

Code: Select all  Expand view
#include "fivewin.ch"

REQUEST DBFCDX

//----------------------------------------------------------------------------//

function Main()

   FIELD CODE,NAME

   local oDlg, oBrw, oFont
   local oCol

   local lWild   := .f.
   local lFilter := .t.

   FERASE( "STATES.CDX" )

   USE STATES VIA "DBFCDX"
   INDEX ON CODE TAG CODE
   INDEX ON UPPER(NAME) TAG NAME
   SET ORDER TO TAG CODE
   GO TOP

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg SIZE 400,400 PIXEL FONT oFont

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      DATASOURCE "STATES" ;
      COLUMNS "CODE", "NAME" ;
      HEADERS "StateCode", "StateName" ;
      AUTOSORT CELL LINES FOOTERS NOBORDER ;
      ON CHANGE ( If( Empty( oBrw:SelectedCol():cOrder ) ,;
                      ( oBrw:SelectedCol():SetOrder()    ,;
                        // ??
                        IIF( lFilter ,;
                             ( oBrw:cFilterFld := oBrw:SelectedCol():cExpr ,;
                               oBrw:cSeek      := ""                       ,;
                             ) ,;
                             nil ;
                           ) ,;
                        oBrw:Refresh()                    ;
                      ) ,;
                      nil ;
                    ) ;
                )

   FOR EACH oCol IN oBrw:aCols
       oCol:bLClickHeader := { |r,c,f,oCol | ;
                               ( oBrw:SelectCol(oCol:nPos)                   ,;
                                 IIF( lFilter ,;
                                      ( oBrw:cFilterFld := oBrw:SelectedCol():cExpr ,;
                                        oBrw:cSeek      := ""                       ,;
                                      ) ,;
                                      nil ;
                                    ) ,;
                                 oBrw:Refresh()                              ,;
                               ) ;
                             }

       oCol:bClrFooter := {|| { CLR_HRED, CLR_YELLOW }}
   NEXT

   WITH OBJECT oBrw
      :lSeekWild        := IIF( lWild,   .t., .f. )
      :lIncrFilter      := IIF( lFilter, .t., .f. )


      :lColChangeNotify := .t.
      :lSortDescend     := .f.
      :bFooters         := { |oCol| If( Empty( oCol:cOrder ), "", oBrw:cSeek ) }
      :oSeek            := TSeek():New( oBrw )
      //
      :CreateFromCode()
   END


   ACTIVATE DIALOG oDlg CENTERED

return nil

//----------------------------------------------------------------------------//

CLASS TSeek STATIC

   DATA oBrw

   METHOD New( oBrw ) CONSTRUCTOR
   METHOD SetText( c ) INLINE ::oBrw:RefreshFooters()

ENDCLASS

METHOD New( oBrw ) CLASS TSeek

   ::oBrw   := oBrw

return Self

//----------------------------------------------------------------------------//




I cant find the way to change footer background color to YELLOW
when column is selected

And ... where to make changes if there are one more column in the midle
which is not indexed.

Best regards,
And thanks again for nice sample.
Last edited by avista on Mon Apr 06, 2015 6:41 am, edited 3 times in total.
User avatar
avista
 
Posts: 301
Joined: Fri Jun 01, 2007 9:07 am
Location: Macedonia

Re: XBROWSE remove or show header sort bitmap

Postby FranciscoA » Fri Apr 03, 2015 5:28 am

avista wrote:I cant find the way to change footer background color to YELLOW
when column is selected


Avista, please try this sample. Clientes.dbf is in samples folder.

Code: Select all  Expand view
#include "fivewin.ch"
#include "xbrowse.ch"

REQUEST DBFCDX

//----------------------------------------------------------------------------//

function Main()
   local oDlg, oBrw, oFont
   local bClrGrad

   USE CLIENTES VIA "DBFCDX"
   GO TOP

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg SIZE 800,400 PIXEL FONT oFont

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      DATASOURCE "CLIENTES" ;
      AUTOCOLS ;
      AUTOSORT CELL LINES FOOTERS NOBORDER

   WITH OBJECT oBrw
      :lColChangeNotify := .t.
      :CreateFromCode()
   END

   bClrGrad := {|| { { 1, RGB(252,232,171), RGB(248,195, 34) }, ;
                     { 1, RGB(248,195, 34), RGB(252,232,171) } } }

   oBrw:aCols[oBrw:nColSel]:bClrGrad := bClrGrad

   oBrw:bChange:={||  Aeval(oBrw:aCols,{|o,n| o:bClrGrad := oBrw:bClrGrad}) ,;
                      oBrw:SelectedCol():bClrGrad := bClrGrad,;
                      oBrw:Refresh() }

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()
   CLOSE
return nil
 

Regards
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: XBROWSE remove or show header sort bitmap

Postby FranciscoA » Fri Apr 03, 2015 6:20 am

Ups...!!!
For small tables, only.
Maybe Mr. Rao has time and improvement.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: XBROWSE remove or show header sort bitmap

Postby FranciscoA » Fri Apr 03, 2015 8:48 pm

This allows the standard xBrowse speed, when VK_DOWN .or. VK_UP, but has problems with painted of selected column when the visible columns are exceeded.

Can anyone fix it?

Code: Select all  Expand view
#include "fivewin.ch"
#include "xbrowse.ch"

REQUEST DBFCDX

//----------------------------------------------------------------------------//

function Main()
   local oDlg, oBrw, oFont
   local bClrGrad, nOldColSel

   USE CLIENTES VIA "DBFCDX"
   GO TOP

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg SIZE 1100,600 PIXEL FONT oFont

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      DATASOURCE "CLIENTES" ;
      AUTOCOLS ;
      AUTOSORT CELL LINES FOOTERS NOBORDER

   WITH OBJECT oBrw
      :lColChangeNotify := .t.
      :CreateFromCode()
   END

   bClrGrad := {|| { { 1, RGB(252,232,171), RGB(248,195, 34) }, ;
                     { 1, RGB(248,195, 34), RGB(252,232,171) } } }

   nOldColSel := oBrw:nColSel
   oBrw:aCols[nOldColSel]:bClrGrad := bClrGrad

   oBrw:bChange:={|| if( oBrw:nColSel != nOldColSel ,;
                       ( AEval(oBrw:aCols, {|o| o:bClrGrad := oBrw:bClrGrad }),;
                         oBrw:SelectedCol():bClrGrad := bClrGrad,;
                         nOldColSel:= oBrw:nColSel ,;
                         oBrw:Refresh() ),) }

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()
   CLOSE
return nil
 
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: XBROWSE remove or show header sort bitmap

Postby avista » Mon Apr 06, 2015 6:50 am

Enough


Mr Rao,
Like i said probably oBrw:cFilterFld must be controled
Please see this part and tell me your opinion.

Code: Select all  Expand view

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      DATASOURCE "STATES" ;
      COLUMNS "CODE", "NAME" ;
      HEADERS "StateCode", "StateName" ;
      AUTOSORT CELL LINES FOOTERS NOBORDER ;
      ON CHANGE ( If( Empty( oBrw:SelectedCol():cOrder ) ,;
                      ( oBrw:SelectedCol():SetOrder()    ,;
                        // ?? IS this ok ?
                        IIF( lFilter ,;
                             ( oBrw:cFilterFld := oBrw:SelectedCol():cExpr ,;
                               oBrw:cSeek      := ""                       ,;
//                             oBrw:Seek( "" )                             ,;
                             ) ,;
                             nil ;
                           ) ,;
                        oBrw:Refresh()                    ;
                      ) ,;
                      nil ;
                    ) ;
                )
 


Best regards,
User avatar
avista
 
Posts: 301
Joined: Fri Jun 01, 2007 9:07 am
Location: Macedonia

Re: XBROWSE remove or show header sort bitmap

Postby FranciscoA » Mon Apr 06, 2015 3:13 pm

Avista wrote:
I cant find the way to change footer background color to YELLOW
when column is selected


viewtopic.php?f=6&t=30514
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: XBROWSE remove or show header sort bitmap

Postby nageswaragunupudi » Fri Apr 10, 2015 2:30 pm

Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10248
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: XBROWSE remove or show header sort bitmap

Postby avista » Fri Apr 10, 2015 7:08 pm

Mr Rao
Thanks so much
Everything is good with first sample
But i cant find good way to implement Incremental Seeks/Filters

Postby avista » Tue Mar 31, 2015 1:06 pm

Mr. Rao
Thanks this is working good.

Just one more question
How to implement Incremental Seeks/Filters
optional controled by variables lMYSeekWild, lMYIncrFilter

Can i add

WITH OBJECT oBrw
:lSeekWild := Iif(lMYSeekWild, .t., .f.)
:lIncrFilter := Iif(lMYIncrFilter, .t., .f.)
END

Need i something else ?



Postby nageswaragunupudi » Tue Mar 31, 2015 2:24 pm

Enough


Code: Select all  Expand view
#include "fivewin.ch"

REQUEST DBFCDX

//----------------------------------------------------------------------------//

function Main()

   FIELD CODE,NAME

   local oDlg, oBrw, oFont
   local oCol

   local lWild   := .f.
   local lFilter := .t.

   FERASE( "STATES.CDX" )

   USE STATES VIA "DBFCDX"
   INDEX ON CODE TAG CODE
   INDEX ON UPPER(NAME) TAG NAME
   SET ORDER TO TAG CODE
   GO TOP

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg SIZE 400,400 PIXEL FONT oFont

   @ 10,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;
      DATASOURCE "STATES" ;
      COLUMNS "CODE", "NAME" ;
      HEADERS "StateCode", "StateName" ;
      AUTOSORT CELL LINES FOOTERS NOBORDER ;
      ON CHANGE ( If( Empty( oBrw:SelectedCol():cOrder ) ,;
                      ( oBrw:SelectedCol():SetOrder()    ,;
                        // ??
                        IIF( lFilter ,;
                             ( oBrw:cFilterFld := oBrw:SelectedCol():cExpr ,;
                               oBrw:cSeek      := ""                       ,;
                             ) ,;
                             nil ;
                           ) ,;
                        oBrw:Refresh()                    ;
                      ) ,;
                      nil ;
                    ) ;
                )

   FOR EACH oCol IN oBrw:aCols
       oCol:bLClickHeader := { |r,c,f,oCol | ;
                               ( oBrw:SelectCol(oCol:nPos)                   ,;
                                 IIF( lFilter ,;
                                      ( oBrw:cFilterFld := oBrw:SelectedCol():cExpr ,;
                                        oBrw:cSeek      := ""                       ,;
                                      ) ,;
                                      nil ;
                                    ) ,;
                                 oBrw:Refresh()                              ,;
                               ) ;
                             }

       oCol:bClrFooter := {|| { CLR_HRED, CLR_YELLOW }}
   NEXT

   WITH OBJECT oBrw
      :lSeekWild        := IIF( lWild,   .t., .f. )
      :lIncrFilter      := IIF( lFilter, .t., .f. )


      :lColChangeNotify := .t.
      :lSortDescend     := .f.
      :bFooters         := { |oCol| If( Empty( oCol:cOrder ), "", oBrw:cSeek ) }
      :oSeek            := TSeek():New( oBrw )
      //
      :CreateFromCode()
   END


   ACTIVATE DIALOG oDlg CENTERED

return nil

//----------------------------------------------------------------------------//

CLASS TSeek STATIC

   DATA oBrw

   METHOD New( oBrw ) CONSTRUCTOR
   METHOD SetText( c ) INLINE ::oBrw:RefreshFooters()

ENDCLASS

METHOD New( oBrw ) CLASS TSeek

   ::oBrw   := oBrw

return Self

//----------------------------------------------------------------------------//
 


You are the only one who can
Please your opinion

Best best regards,
User avatar
avista
 
Posts: 301
Joined: Fri Jun 01, 2007 9:07 am
Location: Macedonia


Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: Rick Lipkin and 80 guests