package com.floreantpos.ui.ticket; import java.awt.Color; import java.awt.Rectangle; import javax.swing.DefaultListSelectionModel; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import com.floreantpos.model.Ticket; import com.floreantpos.model.TicketItem; import com.floreantpos.model.TicketItemModifier; public class TicketViewerTable extends JTable { private TicketTableModel model; private DefaultListSelectionModel selectionModel; private TicketTableCellRenderer cellRenderer; public TicketViewerTable() { this(null); } public TicketViewerTable(Ticket ticket) { model = new TicketTableModel(); model.setTable(this); setModel(model); selectionModel = new DefaultListSelectionModel(); selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); cellRenderer = new TicketTableCellRenderer(); setGridColor(Color.LIGHT_GRAY); setTableHeader(null); setSelectionModel(selectionModel); setAutoscrolls(true); setShowGrid(true); setBorder(null); setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); TableColumnModel columnModel = getColumnModel(); TableColumn column = null; column = columnModel.getColumn(0); column.setPreferredWidth(35); column.setMaxWidth(35); column.setMinWidth(35); column = columnModel.getColumn(1); column.setPreferredWidth(160); column.setMaxWidth(160); column.setMinWidth(160); setTicket(ticket); } @Override public TableCellRenderer getCellRenderer(int row, int column) { return cellRenderer; } public TicketTableCellRenderer getRenderer() { return cellRenderer; } private boolean isTicketNull() { Ticket ticket = getTicket(); if (ticket == null) { return true; } if (ticket.getTicketItems() == null) { return true; } return false; } public void scrollUp() { if (isTicketNull()) return; int selectedRow = getSelectedRow(); int rowCount = model.getItemCount(); if (selectedRow <= 0) { selectedRow = rowCount - 1; } else if (selectedRow > (rowCount - 1)) { selectedRow = rowCount - 1; } else { --selectedRow; } selectionModel.addSelectionInterval(selectedRow, selectedRow); Rectangle cellRect = getCellRect(selectedRow, 0, false); scrollRectToVisible(cellRect); } public void scrollDown() { if (isTicketNull()) return; int selectedRow = getSelectedRow(); if (selectedRow < 0) { selectedRow = 0; } else if (selectedRow >= model.getItemCount() - 1) { selectedRow = 0; } else { ++selectedRow; } selectionModel.addSelectionInterval(selectedRow, selectedRow); Rectangle cellRect = getCellRect(selectedRow, 0, false); scrollRectToVisible(cellRect); } public void increaseItemAmount(TicketItem ticketItem) { int itemCount = ticketItem.getItemCount(); ticketItem.setItemCount(++itemCount); repaint(); } public boolean increaseItemAmount() { int selectedRow = getSelectedRow(); if (selectedRow < 0) { return false; } else if (selectedRow >= model.getItemCount()) { return false; } Object object = model.get(selectedRow); if (object instanceof TicketItem) { TicketItem ticketItem = (TicketItem) object; int itemCount = ticketItem.getItemCount(); ticketItem.setItemCount(++itemCount); repaint(); return true; } else if (object instanceof TicketItemModifier) { TicketItemModifier modifier = (TicketItemModifier) object; int itemCount = modifier.getItemCount(); modifier.setItemCount(++itemCount); repaint(); return true; } return false; } public boolean decreaseItemAmount() { int selectedRow = getSelectedRow(); if (selectedRow < 0) { return false; } else if (selectedRow >= model.getItemCount()) { return false; } Object object = model.get(selectedRow); if (object instanceof TicketItem) { TicketItem ticketItem = (TicketItem) object; int itemCount = ticketItem.getItemCount(); if (itemCount == 1) return false; ticketItem.setItemCount(--itemCount); repaint(); return true; } else if (object instanceof TicketItemModifier) { TicketItemModifier modifier = (TicketItemModifier) object; int itemCount = modifier.getItemCount(); if (itemCount == 1) return false; modifier.setItemCount(--itemCount); repaint(); return true; } return false; } public void setTicket(Ticket ticket) { model.setTicket(ticket); } public Ticket getTicket() { return model.getTicket(); } public void addTicketItem(TicketItem ticketItem) { ticketItem.setTicket(getTicket()); model.addTicketItem(ticketItem); int actualRowCount = getActualRowCount() - 1; selectionModel.addSelectionInterval(actualRowCount, actualRowCount); Rectangle cellRect = getCellRect(actualRowCount, 0, false); scrollRectToVisible(cellRect); } public Object deleteSelectedItem() { int selectedRow = getSelectedRow(); return model.delete(selectedRow); } public boolean containsTicketItem(TicketItem ticketItem) { return model.containsTicketItem(ticketItem); } public void delete(int index) { model.delete(index); } public Object get(int index) { return model.get(index); } public Object getSelected() { int index = getSelectedRow(); return model.get(index); } public void addAllTicketItem(TicketItem ticketItem) { model.addAllTicketItem(ticketItem); } public void removeModifier(TicketItem parent, TicketItemModifier modifier) { model.removeModifier(parent, modifier); } public void updateView() { model.update(); } public int getActualRowCount() { return model.getActualRowCount(); } public void selectLast() { int actualRowCount = getActualRowCount() - 1; selectionModel.addSelectionInterval(actualRowCount, actualRowCount); Rectangle cellRect = getCellRect(actualRowCount, 0, false); scrollRectToVisible(cellRect); } public void selectRow(int index) { if(index < 0 || index >= getActualRowCount()) { index = 0; } selectionModel.addSelectionInterval(index, index); Rectangle cellRect = getCellRect(index, 0, false); scrollRectToVisible(cellRect); } }