/** * Initializes graphical user interface. Layout of this panel is set to <code>null</code> (no * <code>LayoutManager</code>) so that <code>ReceiverView</code> items can be positioned * absolutely. * * @see ReceiverView * @see LayoutManager */ private void initializeGui() { logger = Utilities.initializeLogger(this.getClass().getName()); setSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); setBackground(new Color(GRAY_COLOUR, GRAY_COLOUR, GRAY_COLOUR)); setLayout(null); // in order to position ReceiverViews absolutely refreshPreviewImage(); // register all receiver views to the ComponentMover componentMover = new ComponentMover(); // add zero coordinate marker views addCoordinateZeroMarkerViewsToMap(); for (Receiver receiver : map.getReceivers()) { ReceiverView receiverView = new ReceiverView(receiver, this); receiverViews.add(receiverView); this.add(receiverView); // TODO: location should be calculated with offsets for scaling // the image and pixel/meter scaling double receiverPositionInMetersX = receiver.getXPos(); double receiverPositionInMetersY = receiver.getYPos(); double mapRatioWidth = map.getRatioWidth(); double mapRatioHeight = map.getRatioHeight(); int lowerLeftMarkerOffsetXInPixels = map.getLowerLeftMarkerOffsetXInPixels(); int lowerLeftMarkerOffsetYInPixels = map.getLowerLeftMarkerOffsetYInPixels(); int receiverPositionInPixelsX = calculateReceiverPositionInPixelsX( receiverPositionInMetersX, lowerLeftMarkerOffsetXInPixels, mapRatioWidth); int receiverPositionInPixelsY = calculateReceiverPositionInPixelsY( receiverPositionInMetersY, lowerLeftMarkerOffsetYInPixels, mapRatioHeight); receiverView.setLocation(receiverPositionInPixelsX, receiverPositionInPixelsY); componentMover.registerComponent(receiverView); } }
/** * Removes the <code>ReceiverView</code> object from <code>RoomMap</code>. * * @param receiver <code>Receiver</code> object */ public void removeReceiverViewFromMap(Receiver receiver) { for (ReceiverView receiverView : receiverViews) { if (receiverView.getReceiver().getID() == receiver.getID()) { // remove receiver from map and receiverViews list this.remove(receiverView); receiverViews.remove(receiverView); componentMover.deregisterComponent(receiverView); repaint(); // set receivers coordinates to 0,0 for (Receiver receiverItem : map.getReceivers()) { if (receiverItem.getID() == receiver.getID()) { receiverItem.setOnMap(false); receiverItem.setxPos(0.0); receiverItem.setyPos(0.0); } } return; } } }
/** * Getter for <code>RoomMap</code> object with all its properties, including <code>Receiver</code> * s and <code>CoordinateZeroMarkerView</code>s . * * @return the map * @see Receiver * @see ReceiverView * @see CoordinateZeroMarkerView */ public RoomMap getMap() { // set zero coordinate marker positions int lowerLeftMarkerOffsetXInPixels = (int) (lowerLeftMarker.getLocation().getX() / scalingRatioToFitContainer); int lowerLeftMarkerOffsetYInPixels = (int) (lowerLeftMarker.getLocation().getY() / scalingRatioToFitContainer) + (CoordinateZeroMarkerView.ZERO_COORDINATE_MARKER_VIEW_HEIGHT); map.setLowerLeftMarkerOffsetXInPixels(lowerLeftMarkerOffsetXInPixels); map.setLowerLeftMarkerOffsetYInPixels(lowerLeftMarkerOffsetYInPixels); int upperRightMarkerOffsetXInPixels = (int) (upperRightMarker.getLocation().getX() / scalingRatioToFitContainer) + (CoordinateZeroMarkerView.ZERO_COORDINATE_MARKER_VIEW_WIDTH); int upperRightMarkerOffsetYInPixels = (int) (upperRightMarker.getLocation().getY() / scalingRatioToFitContainer); map.setUpperRightMarkerOffsetXInPixels(upperRightMarkerOffsetXInPixels); map.setUpperRightMarkerOffsetYInPixels(upperRightMarkerOffsetYInPixels); // set room width and height in meters double roomWidthInMeters = parent.getRoomWidthInMeters(); double roomHeightInMeters = parent.getRoomHeightInMeters(); map.setWidthInMeters(roomWidthInMeters); map.setHeightInMeters(roomHeightInMeters); // set width and height ratios int mapWidthInPixels = upperRightMarkerOffsetXInPixels - lowerLeftMarkerOffsetXInPixels; int mapHeightInPixels = lowerLeftMarkerOffsetYInPixels - upperRightMarkerOffsetYInPixels; double mapWidthRatio = (mapWidthInPixels) / roomWidthInMeters; double mapHeightRatio = (mapHeightInPixels) / roomHeightInMeters; map.setRatioWidth(mapWidthRatio); map.setRatioHeight(mapHeightRatio); // set receiver positions in meters map.getReceivers().clear(); // first we remove all present receivers for (ReceiverView receiverView : receiverViews) { int receiverViewXInPixels = ((int) (receiverView.getLocation().getX() / scalingRatioToFitContainer)) + (ReceiverView.RECEIVER_ITEM_WIDTH / 2); int receiverViewYInPixels = ((int) (receiverView.getLocation().getY() / scalingRatioToFitContainer)) + (ReceiverView.RECEIVER_ITEM_HEIGHT / 2); double receiverPositionInMetersX = calculateReceiverPositionInMetersX( lowerLeftMarkerOffsetXInPixels, receiverViewXInPixels, mapWidthRatio); double receiverPositionInMetersY = calculateReceiverPositionInMetersY( lowerLeftMarkerOffsetYInPixels, receiverViewYInPixels, mapHeightRatio); receiverView.getReceiver().setxPos(receiverPositionInMetersX); receiverView.getReceiver().setyPos(receiverPositionInMetersY); map.addReceiver(receiverView.getReceiver()); } // set map title String titleFromInput = parent.getRoomTitle(); map.setTitle(titleFromInput.equals("") ? "Unkown" : titleFromInput); // set map xFrom, xTo, yFrom and yTo values map.setxFrom(0); map.setxTo(map.getWidthInMeters()); map.setyFrom(0); map.setyTo(map.getHeightInMeters()); Application.getApplication().setRoomMap(map); return map; }