BUG xBrowse savestate, restorestate

Post Reply
User avatar
pymsoft
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia
Contact:

BUG xBrowse savestate, restorestate

Post by pymsoft »

Tengo el siguiente problema:

Code: Select all

#include "fivewin.ch"
#include "xbrowse.ch"

function Main2()

   local oDlg, oBrw, cSaveState, cPath := "c:\"

  cSaveState := GETPVPROFSTRING( "BrowseArray", "SaveState", "", cPath + "prueba.ini" )
  msginfo( cSaveState )

   DEFINE DIALOG oDlg SIZE 600, 200

   @ 0, 0 XBROWSE oBrw OF oDlg ARRAY { { "uno","dos","tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez" } } AUTOCOLS
      
   oBrw:CreateFromCode()

   oBrw:bKeyDown = { || oDlg:SetText( Str( oBrw:nColSel ) ) }  
      
   ACTIVATE DIALOG oDlg CENTER ON INIT ( IIF( !EMPTY( cSaveState ), oBrw:RestoreState( cSaveState ), "" ), oDlg:oClient := oBrw, oDlg:Resize() );
                        VALID ( cSaveState := oBrw:savestate(), msginfo( cSaveState), WritePProString( "BrowseArray", "SaveState", cSaveState, cPath + "prueba.ini" ), .t. )


return nil

Si pongo la columna numero diez entre la 6 y la 7, al hacer el restorestate me cambia el orden de las columnas 7, 8 y 9, alguna idea?


gracias
Pedro Gonzalez
User avatar
pymsoft
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia
Contact:

Post by pymsoft »

Antonio,


Es un problema que da fastidio a mis clientes, ya que todo mi programa ahora usa xbrowse, y salva/recupera las posiciones de cada columna.
Se logra entender cual es el problema o pongo imagenes?


gracias
Pedro Gonzalez
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Post by Daniel Garcia-Gil »

siempre una imagen habla mas que mil palabras... :wink:
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
pymsoft
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia
Contact:

Post by pymsoft »

Abro la ventana con el browse:

Image



Cambio la columna 10 y la meto entra la 6 y la 7:

Image

Cierro el browse, salvo en el archivo .ini y luego re-abro el browse:

Image

El orden deberia ser: 1,2,3,4,5,6,10,7,8,9

En vez, el orden es: 1,2,3,4,5,6,10,9,8,7

Ahora deberia ser mas claro.

Saludos
Pedro Gonzalez
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Post by Daniel Garcia-Gil »

cambia el metodo RestoreState( cState )
por este... espero se solucione tu problema

Code: Select all

METHOD RestoreState( cState ) CLASS TXBrowse

   local oCol
   local aMoved, aNaturalOrder
   local cCol
   local nLen, nOrder, nWidth, nFor, nAt, nHeight
   local lHide,cHeader,j

   if Empty( cState )
      return nil
   endif

   aMoved := {}
   aNaturalOrder := {}
   nLen   := Len( ::aCols )

   nHeight := Val(StrToken( cState, 1, ";" ) )

   if Empty( ::nRowHeight )
      return nil
   endif

   // Check integrity

   for nFor := 1 to nLen
      cCol := StrToken( cState, nFor + 1, ";" )
      if Empty( cCol )
         return nil
      endif
      aadd( aNaturalOrder, nFor )
   next

   ::nRowHeight := nHeight

   for nFor := 1 to nLen
      cCol   := StrToken( cState, nFor + 1, ";" )
      nOrder := Val( StrToken( cCol, 1, ":" ) )
      nWidth := Val( StrToken( cCol, 2, ":" ) )
      cHeader :=  StrToken( cCol, 3, ":" )
      lHide  := ( AllTrim( StrToken( cCol, 4, ":" ) ) == "H" )
      nAt := Ascan( ::aCols, {|v| v:nCreationOrder == nOrder } )
      if nAt > 0
         oCol := ::aCols[ nAt ]
         oCol:lHide  := lHide
         oCol:nWidth := nWidth
         oCol:cHeader := cHeader
      endif
      if nOrder != nFor  
      	if nOrder != aNaturalOrder[ nFor ] .and. ( nAt := Ascan( aNaturalOrder, nOrder ) ) != 0 
         ::SwapCols( nFor, nAt, .f. )         
         aNaturalOrder[ nFor ]:= nOrder
         aNaturalOrder[ nAt ]:= nFor
        endif
      endif      	
   next

   ::GetDisplayCols()
   ::Super:Refresh()

return nil
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
pymsoft
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia
Contact:

Post by pymsoft »

Daniel,

muchas gracias, lo acabo de probar y funciona :-)



Ahora voy a fijarme cuales son las modificaciones que tu hiciste, serían de proponer a Antonio, porque es un bug en la clase original.



Saludos y nuevamente gracias
Pedro Gonzalez
User avatar
pymsoft
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia
Contact:

Post by pymsoft »

Daniel,


visto el código escrito me quedó clarísimo.

ahora lo pruebo mas a fondo, pero te diría que quedó perfecto.



saludos
Pedro Gonzalez
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Post by Daniel Garcia-Gil »

siempre a la orden cualquier cosa mi messenger es danielgarciagil@cantv.net
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Post Reply