Skip to content

Commit

Permalink
refactor : move predefined menu items to BBjGridContextMenuItem and…
Browse files Browse the repository at this point in the history
… remove `BBjGridContextMenuPredefinedMenuitem`

BREAKING CHANGE: `BBjGridContextMenuPredefinedMenuitem` is removed , use `BBjGridContextMenuItem` instead (@see Enterprise/ContextMenuDemo.bbj).
  • Loading branch information
hyyan committed Jul 19, 2019
1 parent b23c82a commit 2614d51
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 154 deletions.
101 changes: 30 additions & 71 deletions BBjGridExWidgetContextMenu.bbj
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@ class public BBjGridContextMenu
rem * @param BBjString item! the item ID
rem */
method public void addItem(BBjString item!)
predefined! = new BBjGridContextMenuPredefinedMenuitem(item!)
#Items!.put(predefined!.getId() , predefined!)
#Items!.put(str(System.nanoTime()), item!)
methodend
rem /**
rem * Conver the menu to a JSON string
Expand All @@ -57,24 +56,23 @@ class public BBjGridContextMenu
classend
rem /**
rem * A class which reprensets the default grid context menu
rem *
rem *
rem * @author Hyyan Abo Fakher
rem */
class public BBjGridDefaultContextMenu extends BBjGridContextMenu

rem /**
rem * Construct the default grid context menu
rem */
method public BBjGridDefaultContextMenu()
#addItem(BBjGridContextMenuPredefinedMenuitem.COPY())
#addItem(BBjGridContextMenuPredefinedMenuitem.COPY_WITH_HEADERS())
#addItem(BBjGridContextMenuPredefinedMenuitem.EXPORT())
#addItem(BBjGridContextMenuItem.COPY())
#addItem(BBjGridContextMenuItem.COPY_WITH_HEADERS())
#addItem(BBjGridContextMenuItem.EXPORT())
methodend

classend
rem /**
rem * An interface which defines a menu item
rem *
rem *
rem * @author Hyyan Abo Fakher
rem */
interface public BBjGridContextMenuItemInteface
Expand All @@ -95,15 +93,33 @@ interface public BBjGridContextMenuItemInteface

interfaceend
rem /**
rem * A class which represents predefined menu items. The items are packed with the grid
rem * you can not change the icon of these items or add css classes to them.
rem * If you need to change the label any of these items then you need to do in the translation file.
rem *
rem * A class which reprensetsa grid context menu item
rem *
rem * @author Hyyan Abo Fakher
rem */
class public BBjGridContextMenuPredefinedMenuitem implements BBjGridContextMenuItemInteface
class public BBjGridContextMenuItem implements BBjGridContextMenuItemInteface
rem /**
rem * The item's label
rem */
field public BBjString Label! = null()
rem /**
rem * Optional tooltip for the menu item
rem */
field public BBjString Tooltip! = null()
rem /**
rem * The icon to display beside the icon, either a DOM element or HTML string
rem */
field public BBjString Icon! = null()
rem /**
rem * The item id
rem * Additional CSS classes to be applied to the menu item
rem */
field public BBjString CssClasses! = null()
rem /**
rem * if this menu is a sub menu, contains a list of sub menu item definitions
rem */
field public BBjGridContextMenu SubMenu! = null()
rem /**
rem * The item's ID
rem */
field protected BBjString Id! = null()
rem /**
Expand Down Expand Up @@ -169,63 +185,6 @@ class public BBjGridContextMenuPredefinedMenuitem implements BBjGridContextMenuI
rem /**
rem * Disable default constructor
rem */
method private BBjGridContextMenuPredefinedMenuitem()
methodend
rem /**
rem * Construct new BBjGridContextMenuPredefinedtitem
rem *
rem * @param BBjString id! The item id
rem */
method public BBjGridContextMenuPredefinedMenuitem(BBjString Id!)
#Id! = id!
methodend
rem /**
rem * {@inheritDoc}
rem */
method public BBjString getId()
methodret #Id!
methodend
rem /**
rem * {@inheritDoc}
rem */
method public BBjString toString()
methodret #getId()
methodend

classend
rem /**
rem * A class which reprensetsa grid context menu item
rem *
rem * @author Hyyan Abo Fakher
rem */
class public BBjGridContextMenuItem implements BBjGridContextMenuItemInteface
rem /**
rem * The item's label
rem */
field public BBjString Label! = null()
rem /**
rem * Optional tooltip for the menu item
rem */
field public BBjString Tooltip! = null()
rem /**
rem * The icon to display beside the icon, either a DOM element or HTML string
rem */
field public BBjString Icon! = null()
rem /**
rem * Additional CSS classes to be applied to the menu item
rem */
field public BBjString CssClasses! = null()
rem /**
rem * if this menu is a sub menu, contains a list of sub menu item definitions
rem */
field public BBjGridContextMenu SubMenu! = null()
rem /**
rem * The item's ID
rem */
field protected BBjString Id! = null()
rem /**
rem * Disable default constructor
rem */
method private BBjGridContextMenuItem()
methodend
rem /**
Expand Down
173 changes: 90 additions & 83 deletions Demo/Enterprise/ContextMenuDemo.bbj
Original file line number Diff line number Diff line change
@@ -1,108 +1,115 @@
rem /**
rem * This file is part of the BBjGridExWidget plugin.
rem * (c) Basis Europe <eu@basis.com>
rem *
rem * For the full copyright and license information, please view the LICENSE
rem * file that was distributed with this source code.
rem */
use ::BBjGridExWidget/BBjGridExWidget.bbj::BBjGridExWidget
use ::BBjGridExWidget/BBjGridExWidgetContextMenu.bbj::BBjGridContextMenuItem
use ::BBjGridExWidget/BBjGridExWidgetContextMenu.bbj::BBjGridContextMenuPredefinedMenuitem
use ::BBjGridExWidget/BBjGridExWidgetContextMenu.bbj::BBjGridContextMenu
use ::BBjGridExWidget/BBjGridExWidgetContextMenu.bbj::BBjGridContextMenuItem
use com.basiscomponents.db.ResultSet
use com.basiscomponents.bc.SqlQueryBC
use java.sql.Types
use com.google.gson.JsonObject

? 'HIDE'

declare auto BBjTopLevelWindow wnd!
declare auto BBjListButton lb_db!
declare auto BBjListButton lb_tbl!
declare auto BBjToolButton btn_fit!
declare BBjGridExWidget grid!

lic!=System.getProperty("bbjgridexwidget.license")

if lic!=null() or str(lic!)="" then
a=msgbox("set license key in bbj.properties under bbjgridexwidget.license=<yourlicense>",48,"Demo for Enterprise Features")
release
fi

BBjGridExWidget.setLicenseKey(lic!)

wnd! = BBjAPI().openSysGui("X0").addWindow(10,10,800,600,"BBj Grid Ex Demo")
wnd! .setCallback(BBjAPI.ON_CLOSE,"byebye")
wnd! .setCallback(BBjAPI.ON_RESIZE,"resize")

grid! = new BBjGridExWidget(wnd!,100,0,0,800,600)


gosub fillGrid
wnd!.setCallback(BBjAPI.ON_CLOSE,"byebye")
wnd!.setCallback(BBjAPI.ON_RESIZE,"resize")

gosub main
process_events

fillGrid:

declare SqlQueryBC sbc!
sbc! = new SqlQueryBC(BBjAPI().getJDBCConnection("ChileCompany"))
rs! = sbc!.retrieve("SELECT * FROM CUSTOMER")

style! = new JsonObject()
style!.addProperty("background","#bdbdbd")
grid!.addStyle(".maps-style" , style!)

menu! = new BBjGridContextMenu()

rem predefined items
menu!.addItem(BBjGridContextMenuPredefinedMenuitem.AUTO_SIZE_ALL())
menu!.addItem(BBjGridContextMenuPredefinedMenuitem.RESET_COLUMNS())
menu!.addItem(BBjGridContextMenuPredefinedMenuitem.EXPORT())

rem custom item
item! = new BBjGridContextMenuItem(6000,"Show Direction")
item!.setTooltip("Open the location in Google Maps")
item!.setIcon("http://icons.iconarchive.com/icons/papirus-team/papirus-apps/256/maps-icon.png" , 20 , 20)
item!.setCssClasses("maps-style")
menu!.addItem(item!)
grid!.setCallback(6000,"onShowDirection")


rem custom item
item! = new BBjGridContextMenuItem(6001,"Search Firstname in Namepedia")
item!.setTooltip("Search First Name in Namepedia")
item!.setIcon("http://icons.iconarchive.com/icons/papirus-team/papirus-apps/256/godot-icon.png" , 20 , 20)
menu!.addItem(item!)
grid!.setCallback(6001,"onShowFirstName")

item! = new BBjGridContextMenuItem(6002,"Copy Functions")
rem /**
rem * Retrive the data from the database and configure the grid
rem */
main:
declare SqlQueryBC sbc!
declare ResultSet rs!

sbc! = new SqlQueryBC(BBjAPI().getJDBCConnection("ChileCompany"))
rs! = sbc!.retrieve("SELECT * FROM CUSTOMER")

rem /**
rem * Create a new context menu to attach to the grid
rem */
menu! = new BBjGridContextMenu()

rem /**
rem * Add some predefined items with their actions to the menu
rem * @see <a href="https://bbj-plugins.github.io/BBjGridExWidget/javadoc/BBjGridExWidget/ContextMenu/BBjGridContextMenuItem.html">BBjGridContextMenuItem</a>
rem */
menu!.addItem(BBjGridContextMenuItem.AUTO_SIZE_ALL())
menu!.addItem(BBjGridContextMenuItem.RESET_COLUMNS())
menu!.addItem(BBjGridContextMenuItem.EXPORT())

rem /**
rem * Create custom menu items
rem *
rem * Any custom menu item requires two params , an id (used for handling events) and a label
rem * When the item is clicked on the client , the client will notify the grid with an event
rem * using the chosen id so you can use the grid's setCallback method to handle the event
rem */

direction! = new BBjGridContextMenuItem(6000,"Show Direction")
direction!.setIcon("http://icons.iconarchive.com/icons/papirus-team/papirus-apps/256/maps-icon.png" , 20 , 20)
direction!.setTooltip("Open the location in Google Maps")
menu!.addItem(direction!)

namepedia! = new BBjGridContextMenuItem(6001,"Search Firstname in Namepedia")
namepedia!.setIcon("http://icons.iconarchive.com/icons/papirus-team/papirus-apps/256/godot-icon.png" , 20 , 20)
namepedia!.setTooltip("Search First Name in Namepedia")
menu!.addItem(namepedia!)

copy! = new BBjGridContextMenuItem(6002,"Copy Functions")
submenu! = new BBjGridContextMenu()
submenu!.addItem(BBjGridContextMenuPredefinedMenuitem.COPY())
submenu!.addItem(BBjGridContextMenuPredefinedMenuitem.COPY_WITH_HEADERS())
item!.setSubMenu(submenu!)
menu!.addItem(item!)

grid!.setContextMenu(menu!)
grid!.setData(rs!)
submenu!.addItem(BBjGridContextMenuItem.COPY())
submenu!.addItem(BBjGridContextMenuItem.COPY_WITH_HEADERS())
copy!.setSubMenu(submenu!)
menu!.addItem(copy!)

rem /**
rem * init the grid and attache the menu items callbacks
rem */
grid! = new BBjGridExWidget(wnd!,100,0,0,800,600)
grid!.setContextMenu(menu!)
grid!.setData(rs!)
grid!.setCallback(6000,"onShowDirection")
grid!.setCallback(6001,"onShowFirstName")
return

onShowDirection:

ev! = BBjAPI().getLastEvent()
ev! = ev!.getObject()

row! = ev!.getRow().asDataRow()
url$ = "https://www.google.com/maps/search/?api=1&query=" + java.net.URLEncoder.encode(row!.getFieldAsString("BILL_ADDR1").trim() + "," + row!.getFieldAsString("COUNTRY").trim())
BBjAPI().getThinClient().browse(url$)
ev! = BBjAPI().getLastEvent()
ev! = ev!.getObject()
row! = ev!.getRow().asDataRow()
url$ = "https://www.google.com/maps/search/?api=1&query=" + java.net.URLEncoder.encode(row!.getFieldAsString("BILL_ADDR1").trim() + "," + row!.getFieldAsString("COUNTRY").trim())
BBjAPI().getThinClient().browse(url$)
return


onShowFirstName:
ev! = BBjAPI().getLastEvent()
ev! = ev!.getObject()

row! = ev!.getRow().asDataRow()
url$ = "http://www.namepedia.org/en/firstname/?q="+java.net.URLEncoder.encode(row!.getFieldAsString("FIRST_NAME").trim())
BBjAPI().getThinClient().browse(url$)
ev! = BBjAPI().getLastEvent()
ev! = ev!.getObject()
row! = ev!.getRow().asDataRow()
url$ = "http://www.namepedia.org/en/firstname/?q="+java.net.URLEncoder.encode(row!.getFieldAsString("FIRST_NAME").trim())
BBjAPI().getThinClient().browse(url$)
return

byebye:
bye

rem /**
rem * Listen to the BBjTopLevelWindow resize events and
rem * resize the grid to fill the available space.
rem */
resize:
ev! = BBjAPI().getLastEvent()
grid!.setSize(ev!.getWidth(),ev!.getHeight())
ev! = BBjAPI().getLastEvent()
w=ev!.getWidth()
h=ev!.getHeight()
grid!.setSize(w,h)
return

rem /**
rem * Close the demo
rem */
byebye:
bye

0 comments on commit 2614d51

Please sign in to comment.