FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour XBROWSE remove or show header sort bitmap
Posts: 301
Joined: Fri Jun 01, 2007 09:07 AM
XBROWSE remove or show header sort bitmap
Posted: 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 (fw): Select all Collapse
//----------------------------------------------------------------------------//

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,
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: XBROWSE remove or show header sort bitmap
Posted: Fri Mar 27, 2015 04:28 AM
avista.
Please try this sample code and tell us. (Here is working for me)
Code (fw): Select all Collapse
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
Posts: 301
Joined: Fri Jun 01, 2007 09:07 AM
Re: XBROWSE remove or show header sort bitmap
Posted: 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 (fw): Select all Collapse
@ 10,10 SAY oBrw:oSeek PROMPT oBrw:cSeek SIZE 180,10 PIXEL ;
      OF oDlg COLOR CLR_HRED,CLR_YELLOW

Best regards,
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: XBROWSE remove or show header sort bitmap
Posted: Sat Mar 28, 2015 06: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 (fw): Select all Collapse
#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
Posts: 301
Joined: Fri Jun 01, 2007 09:07 AM
Re: XBROWSE remove or show header sort bitmap
Posted: 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 (fw): Select all Collapse
WITH OBJECT oBrw
     :lSeekWild := Iif(lMYSeekWild, .t., .f.)
     :lIncrFilter := Iif(lMYIncrFilter, .t., .f.)
END


Need i something else ?

Best regards,
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: XBROWSE remove or show header sort bitmap
Posted: Tue Mar 31, 2015 01:24 PM

Enough

Regards



G. N. Rao.

Hyderabad, India
Posts: 301
Joined: Fri Jun 01, 2007 09:07 AM
Re: XBROWSE remove or show header sort bitmap
Posted: 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 (fw): Select all Collapse
#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.
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: XBROWSE remove or show header sort bitmap
Posted: Fri Apr 03, 2015 05: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 (fw): Select all Collapse
#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
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: XBROWSE remove or show header sort bitmap
Posted: Fri Apr 03, 2015 06:20 AM

Ups...!!!
For small tables, only.
Maybe Mr. Rao has time and improvement.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: XBROWSE remove or show header sort bitmap
Posted: Fri Apr 03, 2015 08: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 (fw): Select all Collapse
#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
Posts: 301
Joined: Fri Jun 01, 2007 09:07 AM
Re: XBROWSE remove or show header sort bitmap
Posted: Mon Apr 06, 2015 06:50 AM
Enough


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

Code (fw): Select all Collapse
   @ 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,
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: XBROWSE remove or show header sort bitmap
Posted: Mon Apr 06, 2015 03: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
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: XBROWSE remove or show header sort bitmap
Posted: Fri Apr 10, 2015 02:30 PM
Regards



G. N. Rao.

Hyderabad, India
Posts: 301
Joined: Fri Jun 01, 2007 09:07 AM
Re: XBROWSE remove or show header sort bitmap
Posted: Fri Apr 10, 2015 07: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 (fw): Select all Collapse
#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,

Continue the discussion