Page 1 of 1

Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Mon Nov 26, 2018 5:20 pm
by hmpaquito
Code: Select all  Expand view


METHOD KeyDown() CLASS TCalex

....
 case ::oView:IsKindOf( "TDAYVIEW" )
      do case
         case nKey == VK_UP
              IF ::oDayView:nRowDown > 1
                 ::oDayView:aSelectedRow:= {}
                 ::oDayView:nRowDown-= 1.0001
                 AAdd( ::oDayView:aSelectedRow, { ::oDayView:nRowDown, ::oDayView:nColDown } )
                 ::Refresh()
              ENDIF
              *
         case nKey == VK_DOWN
              IF ::oDayView:nRowDown < ::oDayView:nRowCount
                 ::oDayView:aSelectedRow:= {}
                 ::oDayView:nRowDown+= 1.0001
                 AAdd( ::oDayView:aSelectedRow, {::oDayView:nRowDown , ::oDayView:nColDown } )
                 ::Refresh()
              ENDIF
              *
         case nKey == VK_PRIOR
                *
                ::oDayView:GoNext()
                *
         case nKey == VK_NEXT
                *
                ::oDayView:GoPrev()
                *
endase
...
 

Re: Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Mon Nov 26, 2018 7:14 pm
by cmsoft
Muchas gracias por compartirlo...
Funciona muy bien!

Re: Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Mon Nov 26, 2018 7:44 pm
by hmpaquito
Gracias ! :D

Estoy intentando editar con intro y no necesitar hacerlo con mouse. Necesitariamos asignar la data oCalInfoSelected despues de navegar up/ down.
Le estoy dando más vueltas que a un mono pero no veo cómo hacerlo. Ahora lo tengo que dejar. Si alguien quiere echar una mano, sería muy de agradecer.

Saludos

=========================
EDITADO.

Creo que ya lo tengo. Cuando lo pruebe mejor lo subo.

Re: Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Tue Nov 27, 2018 11:07 am
by hmpaquito
Bueno, conseguido.. añadida edicion con Intro.

Así tenemos que el codigo de debajo incluye, para la vista diaria: edicion de cita con intro, navegacion entre horas con flecha up/down y navegacion entre dias con avance y retroceso de pagina.


Code: Select all  Expand view
case ::oView:IsKindOf( "TDAYVIEW" )
      do case
         case nKey == VK_RETURN

          ::oDayView:HitTest2()
          #Define oCALINFO_  ::oDayView:oCalex:oCalInfo
          ::oDayView:oCalex:oCalInfoSelected:= oCALINFO_

          IF oCALINFO_ != NIL
             // Modificacion de agenda
             ::oSample:BuildDialog( ::oDayView, oCALINFO_:dStart, oCALINFO_:dEnd, oCALINFO_:nStart, oCALINFO_:nEnd)
          ELSE
             // Nueva cita
             #Define nAtColDown_ ::oDayView:nColDown
             #Define nTime_      ::oDayView:GetTimeFromRow( (::oDayView:nRowDown)+ 1 )
             #Define nTimeDown_  ::oDayView:GetTimeFromRow( (::oDayView:nRowDown) )


             ::oSample:BuildDialog( ::oDayView,;
                               ::GetFirstDateWeek() + nAtColDown_ - 1, ;
                               ::GetFirstDateWeek() + ::oDayView:nAtCol - 1, ;
                               nTimeDown_,;
                               nTime_ )

          ENDIF

          ::oDayView:SetFocus()


         case nKey == VK_UP
              IF ::oDayView:nRowDown > 1
                 ::oDayView:aSelectedRow:= {}
                 ::oDayView:nRowDown-= 0.9999999
                 ::oDayView:nRowDown:= Max(::oDayView:nRowDown, 1)
                 AAdd( ::oDayView:aSelectedRow, { ::oDayView:nRowDown, ::oDayView:nColDown } )
                 ::Refresh()
              ENDIF
              *
         case nKey == VK_DOWN
              IF ::oDayView:nRowDown < ::oDayView:nRowCount
                 ::oDayView:aSelectedRow:= {}
                 ::oDayView:nRowDown+= 1.0001
                 AAdd( ::oDayView:aSelectedRow, {::oDayView:nRowDown , ::oDayView:nColDown } )
                 ::Refresh()
              ENDIF
              *
         case nKey == VK_PRIOR
              *
              ::oDayView:GoNext()
              *
         case nKey == VK_NEXT
              *
              ::oDayView:GoPrev()
              *
         case nKey == VK_LEFT
         case nKey == VK_RIGHT
         otherwise
            return ::Super:KeyDown( nKey, nFlags )
      endcase
 

Re: Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Tue Nov 27, 2018 11:30 am
by cmsoft
Muchas gracias nuevamente por compartirlo!

Re: Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Tue Nov 27, 2018 6:53 pm
by AngelSalom
Genial aporte. Quería consultarte si en la clase que tu tienes está solucionado este problema que planteé hace algún tiempo :
http://forums.fivetechsupport.com/viewtopic.php?f=6&t=36079&p=214995&hilit=tcalex#p214995

Si miras Septiembre o Diciembre de este año por ejemplo y está el calendario configurado para que el primer día de la semana sea lunes (calendario de España) no "pinta" bien la vista mensual .

Gracias,

Re: Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Tue Nov 27, 2018 7:10 pm
by hmpaquito
Hola Ángel,

No se me mostraban bien. Miré en el foro a ver qué tal y vi tu mensaje viewtopic.php?f=6&t=33878&start=15#p206676 donde Cristóbal te decía que compararas con el bitbucket de Daniel.
Eso hice, copié un par de trozos de código que estaban distintos y se me arregló. Si quieres inténtalo y si no te funciona intento buscar cuales son los cambios que hice.


Saludos

Re: Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Tue Nov 27, 2018 8:18 pm
by cnavarro
Gracias por tu aporte
No lo he podido probar, ando liadillo, pero seguro que funciona correctamente
Saludos

Re: Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Tue Nov 27, 2018 8:25 pm
by hmpaquito
Cristóbal,

No lo he podido probar, ando liadillo, pero seguro que funciona correctamente

Hasta ahora nadie las ha probado, salvo yo. Así que no deben ser muy de fiar :wink:

He seguido haciendo modificaciones. La verdad es que la zona de vista diaria, poco a poco, se está quedando muy bien. Es increíble el trabajo de Daniel.

Saludos

Re: Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Tue Nov 27, 2018 8:27 pm
by cnavarro
Lo repito, seguro que funciona correctamente
Cuando lo pruebe te digo

Re: Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Sun Dec 02, 2018 8:53 pm
by AngelSalom
hmpaquito wrote:Hola Ángel,

No se me mostraban bien. Miré en el foro a ver qué tal y vi tu mensaje viewtopic.php?f=6&t=33878&start=15#p206676 donde Cristóbal te decía que compararas con el bitbucket de Daniel.
Eso hice, copié un par de trozos de código que estaban distintos y se me arregló. Si quieres inténtalo y si no te funciona intento buscar cuales son los cambios que hice.


Saludos

Lo encontré, gracias. Se trataba de modificar el método SetDate() de la clase TMonthView

Re: Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Sun Dec 02, 2018 9:14 pm
by AngelSalom
hmpaquito wrote:Bueno, conseguido.. añadida edicion con Intro.

Así tenemos que el codigo de debajo incluye, para la vista diaria: edicion de cita con intro, navegacion entre horas con flecha up/down y navegacion entre dias con avance y retroceso de pagina.


Code: Select all  Expand view
case ::oView:IsKindOf( "TDAYVIEW" )
      do case
         case nKey == VK_RETURN

          ::oDayView:HitTest2()
          #Define oCALINFO_  ::oDayView:oCalex:oCalInfo
          ::oDayView:oCalex:oCalInfoSelected:= oCALINFO_

          IF oCALINFO_ != NIL
             // Modificacion de agenda
             ::oSample:BuildDialog( ::oDayView, oCALINFO_:dStart, oCALINFO_:dEnd, oCALINFO_:nStart, oCALINFO_:nEnd)
          ELSE
             // Nueva cita
             #Define nAtColDown_ ::oDayView:nColDown
             #Define nTime_      ::oDayView:GetTimeFromRow( (::oDayView:nRowDown)+ 1 )
             #Define nTimeDown_  ::oDayView:GetTimeFromRow( (::oDayView:nRowDown) )


             ::oSample:BuildDialog( ::oDayView,;
                               ::GetFirstDateWeek() + nAtColDown_ - 1, ;
                               ::GetFirstDateWeek() + ::oDayView:nAtCol - 1, ;
                               nTimeDown_,;
                               nTime_ )

          ENDIF

          ::oDayView:SetFocus()


         case nKey == VK_UP
              IF ::oDayView:nRowDown > 1
                 ::oDayView:aSelectedRow:= {}
                 ::oDayView:nRowDown-= 0.9999999
                 ::oDayView:nRowDown:= Max(::oDayView:nRowDown, 1)
                 AAdd( ::oDayView:aSelectedRow, { ::oDayView:nRowDown, ::oDayView:nColDown } )
                 ::Refresh()
              ENDIF
              *
         case nKey == VK_DOWN
              IF ::oDayView:nRowDown < ::oDayView:nRowCount
                 ::oDayView:aSelectedRow:= {}
                 ::oDayView:nRowDown+= 1.0001
                 AAdd( ::oDayView:aSelectedRow, {::oDayView:nRowDown , ::oDayView:nColDown } )
                 ::Refresh()
              ENDIF
              *
         case nKey == VK_PRIOR
              *
              ::oDayView:GoNext()
              *
         case nKey == VK_NEXT
              *
              ::oDayView:GoPrev()
              *
         case nKey == VK_LEFT
         case nKey == VK_RIGHT
         otherwise
            return ::Super:KeyDown( nKey, nFlags )
      endcase
 


Sólo un par de ajustes, intercambiar VK_NEXT y VK_PRIOR y saber qué hace HitTest2()
Code: Select all  Expand view
case ::oView:IsKindOf( "TDAYVIEW" )
      do case
         case nKey == VK_RETURN

//          ::oDayView:HitTest2()
          #Define oCALINFO_  ::oDayView:oCalex:oCalInfo
          ::oDayView:oCalex:oCalInfoSelected:= oCALINFO_

          IF oCALINFO_ != NIL
             // Modificacion de agenda
             ::oSample:BuildDialog( ::oDayView, oCALINFO_:dStart, oCALINFO_:dEnd, oCALINFO_:nStart, oCALINFO_:nEnd)
          ELSE
             // Nueva cita
             #Define nAtColDown_ ::oDayView:nColDown
             #Define nTime_      ::oDayView:GetTimeFromRow( (::oDayView:nRowDown)+ 1 )
             #Define nTimeDown_  ::oDayView:GetTimeFromRow( (::oDayView:nRowDown) )


             ::oSample:BuildDialog( ::oDayView,;
                               ::GetFirstDateWeek() + nAtColDown_ - 1, ;
                               ::GetFirstDateWeek() + ::oDayView:nAtCol - 1, ;
                               nTimeDown_,;
                               nTime_ )

          ENDIF

          ::oDayView:SetFocus()


         case nKey == VK_UP
              IF ::oDayView:nRowDown > 1
                 ::oDayView:aSelectedRow:= {}
                 ::oDayView:nRowDown-= 0.9999999
                 ::oDayView:nRowDown:= Max(::oDayView:nRowDown, 1)
                 AAdd( ::oDayView:aSelectedRow, { ::oDayView:nRowDown, ::oDayView:nColDown } )
                 ::Refresh()
              ENDIF
              *
         case nKey == VK_DOWN
              IF ::oDayView:nRowDown < ::oDayView:nRowCount
                 ::oDayView:aSelectedRow:= {}
                 ::oDayView:nRowDown+= 1.0001
                 AAdd( ::oDayView:aSelectedRow, {::oDayView:nRowDown , ::oDayView:nColDown } )
                 ::Refresh()
              ENDIF
              *
         case nKey == VK_NEXT
              *
              ::oDayView:GoNext()
              *
         case nKey == VK_PRIOR
              *
              ::oDayView:GoPrev()
              *
         case nKey == VK_LEFT
         case nKey == VK_RIGHT
         otherwise
            return ::Super:KeyDown( nKey, nFlags )
      endcase
 

Re: Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Mon Dec 03, 2018 11:02 pm
by jnavas
Saludos
Puedes publica el código Completo?

Re: Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Tue Dec 04, 2018 1:47 am
by albeiroval
+1

Re: Aporte para TCalex: Navegación con teclas en Vista Dia

PostPosted: Tue Dec 04, 2018 9:07 am
by hmpaquito
Ángel,

Code: Select all  Expand view
METHOD HitTest2( ) CLASS TCalEx
   local aCoor, aRet
 
   aCoor = ::GetCoorFromPos( ::nRowDown, ::nColDown )

   //verify is over oCalInfo object
   ::oCalex:oCalInfo := ::GetInfoFromCoors( aCoor[CI_TOP], aCoor[CI_LEFT], ::dDateSelected )

   aRet = { HITTEST_BODY, If( ::oCalex:oCalInfo != NIL, NIL, aCoor ) }

return aRet
 


Cuando tenga una ventana de oportunidad publicaré el resto de mejoras de movimiento con teclas (y otras). Todo el código, más adelante, porque lleva particularidades que tengo que sacar con codeblocks.