private void checkHighlightVisible() { jp.repaint(); if (highlight == null) return; if (!isVisible(highlight)) v.getViewport() .setViewPosition( new Point( 0, Math.max( 0, Math.min( jp.getHeight() - v.getViewport().getHeight(), highlight.getPanel().getY() - 5)))); }
private void scrollView() { Point t = v.getViewport().getViewPosition(); t.setLocation( t.x, Math.max(0, Math.min(jp.getHeight() - v.getViewport().getHeight(), t.y + speed))); v.getViewport().setViewPosition(t); DayLabel p; if (speed < 0) p = getFirstVisibleDay(); else p = getLastVisibleDay(); if (range && ref != null) { if (p.before(ref)) setSelection(p, ref); else setSelection(ref, p); } setHighlight(p); }
private DayLabel getFirstVisibleDay() { Rectangle view = v.getViewport().getViewRect(); for (int i = 0; i < 12; i++) for (int d = 1; d <= month[i].getDays(); d++) if (isVisible(month[i].getDay(d), view)) return month[i].getDay(d); return null; }
private DayLabel getLastVisibleDay() { Rectangle view = v.getViewport().getViewRect(); for (int i = 11; i >= 0; i--) for (int d = month[i].getDays(); d > 0; d--) if (isVisible(month[i].getDay(d), view)) return month[i].getDay(d); return null; }
private void setPreferredPanelSize() { Dimension ps = v.getViewport().getMinimumSize(); jp.setPreferredSize( new Dimension( columns * (ps.width - 5) + 5, ((jp.getComponentCount() - 1) / columns + 1) * (ps.height - 5) + 5)); }
private void ensureProperViewSize() { Dimension ps = v.getViewport().getMinimumSize(); Dimension rs = v.getViewport().getSize(); int nw = Math.min(4, Math.max(((rs.width - 5 + ps.width / 2) / (ps.width - 5)), 1)); int nh = Math.min(5, Math.max(((rs.height - 5 + ps.height / 2) / (ps.height - 5)), 1)); if (nh > (jp.getComponentCount() - 1) / nw + 1) nh = (jp.getComponentCount() - 1) / nw + 1; Dimension ns = new Dimension(nw * (ps.width - 5) + 5, nh * (ps.height - 5) + 5); if (ns.equals(rs)) return; columns = nw; setPreferredPanelSize(); v.getViewport().setPreferredSize(ns); main.pack(); v.getViewport().setViewPosition(new Point(0, jp.getPreferredSize().height)); checkHighlightVisible(); }
private void mouseDrag(MouseEvent e) { Rectangle view = v.getViewport().getViewRect(); if (!view.contains(e.getPoint())) { if (!scroll) { scroll = true; scroller.restart(); } if (e.getY() < view.y) speed = (e.getY() - view.y) / 2 - 1; else if (e.getY() > view.y + view.height) speed = (e.getY() - view.y - view.height) / 2 + 1; else speed = 0; return; } if (scroll) { scroll = false; scroller.stop(); } if (!range) { mousePress(e); } else if (ref != null || highlight != null) { // System.out.print("drag "); DayLabel p = null; Component c = findComponent(e.getPoint()); if (c instanceof DayLabel) { p = (DayLabel) c; if (!p.isDate()) { if (p.getDay() == 0) p = p.getPanel().getDay(1); else p = p.getPanel().getDay(p.getLastDay()); } } if (p != null) { if (ref == null) { if (highlight.equals(p)) return; ref = highlight; } if (p.before(ref)) setSelection(p, ref); else setSelection(ref, p); setHighlight(p); } } }
private boolean isVisible(DayLabel d) { return isVisible(d, v.getViewport().getViewRect()); }
private void jbInit() throws Exception { int dw = Aut.getAut().getNumber(frmParam.getParam("sisfun", "datumHoriz")); int dh = Aut.getAut().getNumber(frmParam.getParam("sisfun", "datumVert")); br = new Rectangle(); jp = new JPanel(); month = new MonthPanel[12]; setYear(-1); columns = Math.max(1, Math.min(4, dw)); dh = Math.max(1, Math.min(4, dh)); if (columns == 4 && dh == 4) dh = 3; jp.setPreferredSize( new Dimension( month[0].getPreferredSize().width + 10, (month[0].getPreferredSize().height + 5) * jp.getComponentCount() + 5)); v = new JraScrollPane( JraScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JraScrollPane.HORIZONTAL_SCROLLBAR_NEVER); v.getViewport() .setMinimumSize( new Dimension( month[0].getPreferredSize().width + 10, month[0].getPreferredSize().height + 10)); v.getViewport().setPreferredSize(v.getViewport().getMinimumSize()); v.setViewportView(jp); Dimension ps = v.getViewport().getMinimumSize(); Dimension ns = new Dimension(columns * (ps.width - 5) + 5, dh * (ps.height - 5) + 5); setPreferredPanelSize(); v.getViewport().setPreferredSize(ns); v.addComponentListener( new ComponentAdapter() { public void componentResized(ComponentEvent e) { ensureProperViewSize(); } }); jp.addMouseListener( new MouseAdapter() { public void mouseClicked(MouseEvent e) { // System.out.println("mouseclick "+e); if ((e.getModifiers() & e.BUTTON1_MASK) != 0) mouseClick(e); } public void mousePressed(MouseEvent e) { // System.out.println("mousepress "+e); if ((e.getModifiers() & e.BUTTON1_MASK) != 0) mousePress(e); if (e.getModifiers() == e.BUTTON3_MASK) { if (scroll) { scroll = false; scroller.stop(); } setSelection(null, null); jp.repaint(); } } public void mouseReleased(MouseEvent e) { if ((e.getModifiers() & e.BUTTON1_MASK) != 0) { if (scroll) { scroll = false; scroller.stop(); } if (first != null && last != null) setResultRange(); } } }); jp.addMouseMotionListener( new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { if ((e.getModifiers() & e.BUTTON1_MASK) != 0) mouseDrag(e); } }); scroller = new javax.swing.Timer( 30, new ActionListener() { public void actionPerformed(ActionEvent e) { if (scroll && speed != 0) scrollView(); } }); }