Buttonbar + Menu VS. Ribbonbar

Buttonbar + Menu VS. Ribbonbar

Postby mariordz » Wed Mar 13, 2019 4:17 pm

Buenos días a todos, recién estoy tratando de migrar mi viejo menu que implemente usando Buttonbar a usar Ribbonbar, tengo algunas dudas, con Buttonbar puedo generar de forma dinámica mis menús, basado en los atributos de mis usuarios Ejemplo:

Defino la barra de botones con acceso controlado de acuerdo a la "firma" (ID de usuario) o por el nivel del mismo)
Code: Select all  Expand view
define window oVentprinc from 0,0 to 9,165 title "Sistema principal" menu creamenu()
define buttonbar oBarra of oVentprinc 3dlook size 50,50
   aFirmarr:={"MAR","VSJ","JAV"}
   cFirrr:=ascan(aFirmarr,firma)
   if cFirrr<>0
    define button of oBarra resource "BMPIMAGEN" action reporte1() tooltip "Procesar reporte"
   endif
   define button of oBarra resource "BMPMARKET" action marketin() tooltip "Telemarketing"
   define button of oBarra resource "BMPMARCON" action consmark() tooltip "Consulta telemarketing"
   define button of oBarra resource "BMPCALEND" action calendar() tooltip "Calendario de grupo"
   if leve="A" .or. lAdmrh=.T.
    define button of oBarra resource "BMPUSUARIOS" action Admusers() tooltip "Administra usuarios"
   endif
   activate window oVentprinc
 



Función para crear el menú, las opciones del mismo también están controladas de acuerdo a los atributos del usuario
Code: Select all  Expand view
Function creamenu()
   local oMenu
   menu oMenu 2015
   menuitem "&CONSULTAS"
   menu
      if firma="MAR" .or. firma="ABC"
        menuitem "Consulta de cliente" action cons_clie()
        endif
   endmenu
   if firma="MAR" .or. firma="ABC"
    menuitem "&TAREAS ESPECIALES"
        menu
           menuitem "&Especial 1" action Esp1()
           separator
           menuitem "Especial 2" action Esp2()
       if firma="MAR"
          menuitem "Espcecial 3" action Esp3()
       endif
         endmenu
   endif
 


Como se ve en este pequeño ejemplo solo se mostrarán los menús si el usuario que se "firmo" cumple con ciertos requisitos, así mismo algunas de las opcion es de dichos menús solo se mostrarán si se cumplen algunos criterios, la pregunta es:
¿Es posible administrar estas opciones usando un RibbonBar? Leyendo encontré que se pueden deshabilitar los "Tabs" del RibbonBar (oRBar:aEnable[NoDeTab]:=.F.) y efectivamente lo deshabilita, pero me gustaría poder esconderlo (trate con la opción oRBar:hide[2]:=.T., pero no funciona).

Cualquier ayuda será muy agradecida.

Saludos.
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Buttonbar + Menu VS. Ribbonbar

Postby cnavarro » Wed Mar 13, 2019 4:25 pm

Bien, no sé si te he entendido bien, pero al igual que en la buttonbar, o en los menús, defines las opciones que quieres mostrar, aquí puedes hacer lo mismo, con la condición que necesites y utilizando el metodo AddTab de la Ribbon, y no definir los prompts al principio junto a la definición de la Ribbon.
Espero haberme explicado
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Buttonbar + Menu VS. Ribbonbar

Postby mariordz » Wed Mar 13, 2019 4:32 pm

Muchas gracias por tu respuesta, tendrás un pequeño ejemplo de como lo manejas?

Gracias.
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Buttonbar + Menu VS. Ribbonbar

Postby mariordz » Wed Mar 13, 2019 5:52 pm

Me respondo, me puse a revisar el archivo rbdesign.prg, ahi viene como generar el ribbonBar desde 0.

oRBar:AddTab( "CIERRE DIARIO" )

Gracias por no darme el pescado y forzarme a buscarlo por mi mismo.
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Buttonbar + Menu VS. Ribbonbar

Postby cnavarro » Wed Mar 13, 2019 8:30 pm

Gracias a ti por entender que es mejor explicar el concepto y continuar investigando ....
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Buttonbar + Menu VS. Ribbonbar

Postby cmsoft » Thu Mar 14, 2019 11:44 am

Hola Mario:
Cuando armas un menú personalizado según los permisos que tiene el usuario, te puedes encontrar que algunos tabs pueden no tener contenido (el usuario no tiene permiso a ningun subitem). En estos casos el método :DeleteTab(n) que aplica al ribbonbar te puede ser útil.
También, como aquí para que quede prolijo, el ancho del grupo de botones va a depender de la cantidad de items que tenga permiso, otro método que puede serte útil es :SetSize(n) que aplica a un grupo del ribbonbar.
Espero que te sea de utilidad...
Saludos
User avatar
cmsoft
 
Posts: 1285
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Buttonbar + Menu VS. Ribbonbar

Postby mariordz » Mon Apr 01, 2019 4:39 pm

Muchas gracias por sus aportes, ya quedó finalmente implementado y se ve bastante bien, como comenta Cesar, tuve que hacer un reacomodo de todos los items de cada grupo para que no quedaran (o quedaran los menos posibles) de espacios en blanco.

El login al sistema quedo así:
Image

Y la RibbonBar:

Image

Ahora se me ha metido a la cabeza la idea de generar un grupo que sea construido por el usuario, básicamente mi ídea es que le den click derecho del mouse a la opción deseada y que les aparezca un menu contextual que les de la opción de agregar o quitar del grupo de favoritos, obviamente al agregar/quitar voy a guardar en una tabla el ID del usuario, el nombre del item y la función que llama, para que la siguiente vez que se firme el usuario se pueda construir este grupo "favoritos"

Una idea es hacerlo asi:
Code: Select all  Expand view
if firma="MAR"
cFunc1:="GetMacAdd()"
add group oGr2_6 ribbon oRBar to option 6 prompt "DESARROLLO" width 310
@3,155 add button oBtn4_2_6 prompt "Obtener MAC address" group oGr2_6 bitmap "mac_add" action &cFunc1 size 150,20 MOSTLEFT
oBtn4_2_6:bRButtonUp := { | nRow, nCol | checafav() }
endif


Function checafav
    if msgyesno("Desea agregar este comando a favoritos","Favoritos")
        ?"Si, agregar"
        *poner proceso para guardar datos en base de datos
    endif
return
 


Si tiene alguna idea mejor lea gradeceré los aportes.
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Buttonbar + Menu VS. Ribbonbar

Postby cnavarro » Mon Apr 01, 2019 5:04 pm

Bien, si he entendido lo que pretendes
No es exactamente eso lo que hace el ejemplo TBDESIGN.PRG ?
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Buttonbar + Menu VS. Ribbonbar

Postby mariordz » Wed Apr 03, 2019 6:55 pm

Buenos días, parcialmente si, pero necesito saber si hay alguna forma de conocer 3 valores del botón pulsado.

Por ejemplo de la línea:

@3,155 add button oBtn4_2_6 prompt "Obtener MAC address" group oGr2_6 bitmap "mac_add" action GetMacAdd() size 150,20 MOSTLEFT

1.- El prompt "Obtener MAC address"
2.- El bitmap "mac_add"
3.- El action "GetMacAdd()"

Estos tres valores los guardaría en una tabla asociados al ID del usuario que se ha firmado, de esa manera tendré los valores que necesito para reconstruir el menu "Favoritos" cada vez que el usuario ingrese al sistema.

Y la construiría asi:
Code: Select all  Expand view

select * from tablafavoritos where userid=cUsuario

for unid=1 to [Nregistros]
   cProm1:="Obtener MAC address"
   cBitm1:="mac_add"
   cFunc1:="GetMacAdd()"

   @3,140 add button oBtn4_2_6 prompt cProm1 group oGr2_6 bitmap cBitm1 action &cFunc1 size 145,20 MOSTLEFT
next
 


Es posible hacer esto?
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Buttonbar + Menu VS. Ribbonbar

Postby cnavarro » Wed Apr 03, 2019 7:13 pm

Busca "detached" en el foro, es el concepto que necesitas para hacer eso, entendiendo que el query de respuesta de lo que buscas en la tabla ya lo tienes en un array
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Buttonbar + Menu VS. Ribbonbar

Postby mariordz » Wed Apr 03, 2019 9:17 pm

Gracias Cristobal, el punto que los favoritos se van a ir agregando a la tabla conforme el usuario los vaya seleccionando, la idea original es que el usuario le de click derecho a alguna opción del sistema y le aparezca un menú para agregar o quitar de sus favoritos.

Como verás hay varios tabuladores y varios grupos dentro de cada unos de ellos y muchas opciones dentro de cada grupo, esa complejidad me impulsa a darles a los usuarios la opción de que tengan un lugar donde agrupen las opciones de las tareas que realizan con mayor frecuencia, por lo tanto los usuarios son los que decidirán que opciones irán agregando a sus favoritos.

Es por eso que necesito saber si es posible que al seleccionar la opción "Agregar a favoritos" pueda recibir estos tres parámetros de acuerdo al botón pulsado, una vez que tenga estos valores los almacenaría en la tabla de favoritos.

Espero haberme explicado con claridad.

Saludos.
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Buttonbar + Menu VS. Ribbonbar

Postby Antonio Linares » Mon Apr 08, 2019 5:31 am

Mario,

Aqui tienes el ejemplo usando "detached locals" como te ha indicado Cristobal:

Code: Select all  Expand view
#include "FiveWin.ch"
#include "ribbon.ch"

function Main()

   local oWnd

   DEFINE WINDOW oWnd

   BuildRibbonBar( oWnd )

   ACTIVATE WINDOW oWnd

return nil

function BuildRibbonBar( oWnd )

   local oRBar, oGrp, oBtn, n

   DEFINE RIBBONBAR oRBar WINDOW oWnd PROMPT  "One", "Two", "Three" HEIGHT 134 TOPMARGIN 25

   ADD GROUP oGrp RIBBON oRBar TO OPTION 1 PROMPT "new" WIDTH 260

   for n = 1 to 3
      @ 3, 3 + ( n - 1 ) * 80 ADD BUTTON oBtn PROMPT "new" + AllTrim( Str( n ) ) ;
         GROUP oGrp ACTION MsgInfo( "click" ) SIZE 80, 83 TOP
      oBtn:bRClicked = GenBlock( oBtn, n )
   next

return nil

function GenBlock( oBtn, n )

return { || MsgInfo( n, oBtn:cCaption ) }
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42061
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Buttonbar + Menu VS. Ribbonbar

Postby mariordz » Mon Apr 08, 2019 5:16 pm

Gracias Antonio, ya lo estoy probando y encontrando la luz al final de este tunel, solo un pequeño detalle más, cuando tengo un POPUP, como se diferencia el botón derecho y el izquierdo?

Actualmente, al darle click en una opción de un menu POPUP me da la misma acción, independietemente del botón del mouse que haya pulsado.

Code: Select all  Expand view

@3,175 add button oBtn4_2_5 prompt "Reportes de nomina" group oGr2_5 bitmap "nomina_semana" size 150,20 POPUP MOSTLEFT menu repor_nomina()         


Function repor_nomina
    local oPopuprn
    public cTipnom
    menu oPopuprn popup 2015
        menuitem "Semanal" action rep_incsem() resource "nomina_semana"
        menuitem "Quincenal" action (cTipnom:="Q",rep_incqui()) resource "nomina_quincena"
    endmenu
return oPopuprn
 


Quisiera obtener el valor de oMenuitem:cPrompt, solo cuando se pulse el botón derecho del mouse, en caso contrario que ejecute su clausula "ACTION" de forma normal.
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: russimicro and 36 guests