/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.workbench.screens.guided.dtable.client.widget.table.popovers; import com.ait.lienzo.client.core.event.NodeMouseMoveEvent; import com.ait.lienzo.client.core.event.NodeMouseMoveHandler; import com.ait.lienzo.client.core.shape.Group; import com.ait.lienzo.client.core.types.Point2D; import org.drools.workbench.screens.guided.dtable.client.widget.table.GuidedDecisionTableModellerView; import org.drools.workbench.screens.guided.dtable.client.widget.table.GuidedDecisionTableView; import org.uberfire.ext.wires.core.grids.client.model.GridData; import org.uberfire.ext.wires.core.grids.client.util.CoordinateUtilities; import org.uberfire.ext.wires.core.grids.client.widget.grid.GridWidget; import org.uberfire.ext.wires.core.grids.client.widget.grid.renderers.grids.GridRenderer; public class ColumnHeaderPopOverHandler implements NodeMouseMoveHandler { private final GuidedDecisionTableModellerView.Presenter modellerPresenter; private final ColumnHeaderPopOver columnPopOverPresenter; public ColumnHeaderPopOverHandler( final GuidedDecisionTableModellerView.Presenter modellerPresenter, final ColumnHeaderPopOver columnPopOverPresenter ) { this.modellerPresenter = modellerPresenter; this.columnPopOverPresenter = columnPopOverPresenter; } @Override public void onNodeMouseMove( final NodeMouseMoveEvent event ) { columnPopOverPresenter.hide(); for ( GuidedDecisionTableView.Presenter dtPresenter : modellerPresenter.getAvailableDecisionTables() ) { final GuidedDecisionTableView dtView = dtPresenter.getView(); if ( !dtView.isVisible() ) { continue; } final Point2D ap = CoordinateUtilities.convertDOMToGridCoordinate( dtView, new Point2D( event.getX(), event.getY() ) ); if ( !isMouseOverTableHeader( dtView, ap.getY() ) ) { continue; } final Integer uiColumnIndex = getUiColumn( dtView, ap.getX() ); if ( uiColumnIndex == null ) { continue; } columnPopOverPresenter.show( modellerPresenter.getView(), dtPresenter, uiColumnIndex ); } } private boolean isMouseOverTableHeader( final GridWidget gridWidget, final double cy ) { final Group header = gridWidget.getHeader(); final GridRenderer renderer = gridWidget.getRenderer(); final double headerHeight = renderer.getHeaderHeight(); final double headerRowsYOffset = getHeaderRowsYOffset( gridWidget ); final double headerMinY = ( header == null ? headerRowsYOffset : header.getY() + headerRowsYOffset ); final double headerMaxY = ( header == null ? headerHeight : headerHeight + header.getY() ); return headerMinY < cy && cy < headerMaxY; } private double getHeaderRowsYOffset( final GridWidget gridWidget ) { final GridData model = gridWidget.getModel(); final int headerRowCount = model.getHeaderRowCount(); final GridRenderer renderer = gridWidget.getRenderer(); final double headerHeight = renderer.getHeaderHeight(); final double headerRowHeight = renderer.getHeaderRowHeight(); final double headerRowsHeight = headerRowHeight * headerRowCount; final double headerRowsYOffset = headerHeight - headerRowsHeight; return headerRowsYOffset; } private Integer getUiColumn( final GridWidget gridWidget, final double cx ) { final Integer uiColumnIndex = CoordinateUtilities.getUiColumnIndex( gridWidget, cx ); return uiColumnIndex; } }