start with Xbrowse and view otree same xbrowse

start with Xbrowse and view otree same xbrowse

Postby Silvio.Falconi » Mon Mar 13, 2023 7:59 am

I have a dialog with an xbrowse, a search at the top

Image

and I wanted to give the possibility to display an otree in the same xbrowse

the user has to select the tree through a popup menu where I enter all the fields that the tree could do
for example with the archive above in the dialog the tree can be created if all the records have the same province ( FIELD->Prov)
or in an article archive I could make the tree for the category and for another type of data

for example on archive you see on picture I can order for FIELD->PROV

and make a tree for the record have the same field->prov

the end user would have to switch between simple xbrowse and tree xbrowse






I made asmall test but not work good
Code: Select all  Expand view  RUN
#include "FiveWin.ch"
#include "xbrowse.ch"
#include "constant.ch"

REQUEST DBFCDX

function Main()

   local oDlg, oBrw,oBarDialog,oGroup
   local  nBottom   := 27.2
   local  nRight    := 89
   local  nWd       := Max( nRight * DLG_CHARPIX_W, 180 )
   local  nHt       := nBottom * DLG_CHARPIX_H
   local aCols    := { ;
                   { "FIRST",  "First"       ,,   200, },;
                   { "LAST",    "Last"       ,,   200, },;
                   { "CITY",     "City"      ,,   100, },;
                   { "STATE",     "State"    ,,    80, } }
     local bOnSkip   := { || oDbf:skip() }
    RddSetDefault( "DBFCDX" )


   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-12
   DEFINE FONT oBold NAME "TAHOMA" SIZE 0,-12  BOLD

       oDbf:=TCustomer():New()
       oDbf:setorder(1)
       oDbf:Gotop()

    DEFINE DIALOG oDlg SIZE nWd, nHt PIXEL TRUEPIXEL;
    FONT oFont  TiTle "DBF shown as a tree with XBrowse" COLOR CLR_BLACK, RGB( 245,245,235)  ;
    STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, ;
                  WS_MINIMIZEBOX)
      DEFINE BUTTONBAR oBarDialog OF oDlg  SIZE 80,70  TOP NOBORDER  2015

      @ 10, 700  BTNBMP oGroup Prompt "Group" ;
                FLAT  SIZE 80, 20  OF oDlg   PIXEL ;
                BITMAP "combo.bmp" RIGHT NOROUND;
               ACTION ::ShowPopUp( { |oBtn| changeBrowse( oBtn,oBrw,oDbf ) } )


      @ 110,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg NOBORDER

    oBrw:SetTree( BuildTree(oDbf), { "open", "close", "go" },bOnSkip)

   ADD TO oBrw DATA oBrw:oTreeItem:Cargo[ 1 ] HEADER "First"
   ADD TO oBrw DATA oBrw:oTreeItem:Cargo[ 2 ] HEADER "Last"
   ADD TO oBrw DATA oBrw:oTreeItem:Cargo[ 3 ] HEADER "Street"
   ADD TO oBrw DATA oBrw:oTreeItem:Cargo[ 4 ] HEADER "City"
   ADD TO oBrw DATA oBrw:oTreeItem:Cargo[ 5 ] HEADER "State"
   ADD TO oBrw DATA oBrw:oTreeItem:Cargo[ 6 ] HEADER "Zip"

   MyStyleBrowse(oBrw)
   oBrw:CreateFromCode()
   oBrw:aCols[ 1 ]:cHeader = "State & City"





                   oDlg:bResized  := <||
                   local oRect         := oDlg:GetCliRect()

                   oGroup:nTop  := oRect:ntop+81
                  oGroup:nLeft := oRect:nLeft+10
                    RETURN nil
                   >
     ACTIVATE DIALOG oDlg  CENTER          ;
                  ON INIT (  oDlg:resize() )
return nil
static function changeBrowse( oBtn,oBrw,oDbf )
   local oPop
   MENU oPop POPUP
   MENUITEM "Maketree"   action MakeTree(oDbf,oBrw)
   SEPARATOR
   MENUITEM "Makexbrowse"   action MakeBrowse(oBrw,oDbf)
   ENDMENU
  RETURN oPop


Function MakeBrowse(oBrw,oDbf)
     local aCols    := { ;
                   { "FIRST",  "First"       ,,   200, },;
                   { "LAST",    "Last"       ,,   200, },;
                   { "CITY",     "City"      ,,   100, },;
                   { "STATE",     "State"    ,,    80, } }

     oBrw:SetoDbf( oDbf,aCols)
     MyStyleBrowse(oBrw)
     oBrw:refresh()

  return nil

Function  MakeTree(oDbf,oBrw)
    local bOnSkip   := { || oDbf:skip() }
    local aCols    := { ;
                   { "FIRST",  "First"       ,,   200, },;
                   { "LAST",    "Last"       ,,   200, },;
                   { "CITY",     "City"      ,,   100, },;
                   { "STATE",     "State"    ,,    80, } }



    oDbf:setorder("State")
    oDbf:Gotop()
   oBrw:SetTree( BuildTree(oDbf), { "open", "close", "go" },bOnSkip)

 return nil


 Function MyStyleBrowse(oBrw)
   local nColorHeader  := RGB( 245,245,235)
   local nColorFooter  := RGB( 245,245,235)
   local nColorPigiama := RGB(243,243,238)

             WITH OBJECT oBrw
            :nRowHeight          := 28
            :l2007               := .F.
            :l2015               := .T.
            :lRecordSelector     := .F.
            :nColDividerStyle    := LINESTYLE_LIGHTGRAY
            :nRowDividerStyle    := LINESTYLE_LIGHTGRAY
            :nStretchCol         := STRETCHCOL_WIDEST
            :nMarqueeStyle        := MARQSTYLE_HIGHLROW

           * :lAllowRowSizing     := .F.
           * :lAllowColSwapping   := .F.
            *:lAllowColHiding     := .F.
            *:lAllowSizings       := .F.

             :lDrawBorder := .t.
             :nClrBorder := Rgb(195,195,185)

            :bRecSelHeader    := ""
            :bClrSelFocus := { || {,rgb(255,255,224)}}
            :bClrRowFocus := { || {, rgb(255,255,224)}}
            :nRecSelColor     :=   nRgb( 245,244,234)
            :bClrHeader       := {|| { ,nColorHeader } }
            :bClrFooter       := {|| { ,nColorFooter } }
            :bClrStd := { || { CLR_BLACK, If( oBrw:KeyNo % 2 == 0, CLR_WHITE,nColorPigiama ) } }
         END
         return nil




static function BuildTree(oDbf)
   local oTree, cState
   TREE oTree
      while ! oDbf:Eof()
         if Empty( cState )
            _TreeItem( oDbf:State ):Cargo := { Space( 20 ), Space( 20 ),Space( 20 ), Space( 20 ),Space( 20 ), Space( 20 ) }
            TREE
            cState = oDbf:State
         else
            if cState != oDbf:State
               ENDTREE
               cState = oDbf:State
               _TreeItem( oDbf:State ):Cargo := { Space( 20 ), Space( 20 ),Space( 20 ), Space( 20 ),Space( 20 ), Space( 20 ) }

               TREE
            endif
         endif
         if oDbf:State == cState
            _TreeItem( oDbf:City ):Cargo := { oDbf:First, oDbf:Last, oDbf:street,oDbf:city,oDbf:state,oDbf:zip }
         endif
         oDbf:skip()
      enddo
      ENDTREE
   ENDTREE
        oDbf:gotop()
        return oTree
//------------open the dbf
CLASS TXData from TDatabase
  ENDCLASS
CLASS TCustomer from TXData
   METHOD New()
ENDCLASS
METHOD New( lShared ) CLASS TCustomer
   Default lShared := .t.
   ::super:New(,"customer" ,"DBFCDX", lShared)
   if ::use()
      ::setOrder(1)
      ::gotop()
   endif
   RETURN Self
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
Silvio.Falconi
 
Posts: 7075
Joined: Thu Oct 18, 2012 7:17 pm

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 80 guests