Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -205,8 +205,7 @@ public void mouseMoved(MouseEvent e) {

@Override
public void mousePressed(MouseEvent e) {
int tabCount = controller.getTabModel().size();
if( pTable.onMouseEvent(e) && tabCount == 1 ) {
if( pTable.onMouseEvent(e) ) {
hideCurrentPopup();
}
e.consume();
Expand All @@ -230,8 +229,8 @@ public void mouseClicked(MouseEvent e) {
p = SwingUtilities.convertPoint((Component) e.getSource(), p, pTable);
if (pTable.contains(p)) {
if( !pTable.onMouseEvent(e) ) {
final SwitcherTableItem item = pTable.getSelectedItem();
if (item != null) {
final DocumentSwitcherTable.Item item = pTable.getSelectedItem();
if (item != null && !item.isSeparator()) {
hideCurrentPopup();
item.activate();
}
Expand Down Expand Up @@ -343,7 +342,7 @@ private boolean changeSelection( KeyEvent event ) {
break;
case KeyEvent.VK_DELETE: {
final Item item = ( Item ) pTable.getSelectedItem();
if (item != null && TabDataRenderer.isClosable( item.getTabData() )) {
if (item != null) {
TabData tab = item.getTabData();
int tabIndex = controller.getTabModel().indexOf( tab );
if( tabIndex >= 0 ) {
Expand All @@ -355,6 +354,10 @@ private boolean changeSelection( KeyEvent event ) {
selRow = Math.min( pTable.getModel().getRowCount()-1, selRow );
selCol = Math.min( pTable.getModel().getColumnCount()-1, selCol );
switched = true;
} else if ( item.isSeparator() ){
if( pTable.closeSelectedDocumentList() ) {
SwingUtilities.invokeLater(this::hideCurrentPopup);
}
}
}
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.DefaultButtonModel;
import javax.swing.Icon;
Expand Down Expand Up @@ -77,10 +79,8 @@ public DocumentSwitcherTable( Controller controller, SwitcherTableItem[] items,
}

@Override
public SwitcherTableItem getSelectedItem() {
public Item getSelectedItem() {
Item res = ( Item ) getValueAt(getSelectedRow(), getSelectedColumn());
if( null != res && res.isSeparator )
return null; //don't hide the popup when a project separator is selected
return res;
}

Expand All @@ -90,7 +90,7 @@ public Component prepareRenderer( TableCellRenderer renderer, int row, int colum

boolean selected = row == getSelectedRow() &&
column == getSelectedColumn() && item != null;
boolean separator = null != item && item.isSeparator;
boolean separator = null != item && item.isSeparator();

ITEM_BORDER.color = null;
Component renComponent = super.prepareRenderer( renderer, row, column );
Expand All @@ -105,10 +105,10 @@ public Component prepareRenderer( TableCellRenderer renderer, int row, int colum
lbl.setBorder( ITEM_BORDER );
}
}
if( selected && !separator ) {
if( selected ) {
JPanel res = new JPanel( new BorderLayout(5, 0) );
res.add( renComponent, BorderLayout.CENTER );
if( TabDataRenderer.isClosable( item.getTabData() ) ) {
if( separator || TabDataRenderer.isClosable( item.getTabData() )) {
res.add( btnClose, BorderLayout.EAST );
}
res.setBackground( renComponent.getBackground() );
Expand All @@ -127,31 +127,39 @@ public Component prepareRenderer( TableCellRenderer renderer, int row, int colum
private int lastCol = -1;
private boolean inCloseButtonRect = false;

/**
*
* @return True if popup window should be closed. (e.g. when no more
* tabs are left opened)
*/
boolean onMouseEvent( MouseEvent e ) {
Point p = e.getPoint();
p = SwingUtilities.convertPoint((Component) e.getSource(), p, this);
int selRow = getSelectedRow();
int selCol = getSelectedColumn();
if( selRow < 0 || selCol < 0 )
if ( selRow < 0 || selCol < 0 )
return false;
Rectangle rect = getCellRect( selRow, selCol, false );
if( rect.contains( p ) ) {
if ( rect.contains( p ) ) {
Dimension size = btnClose.getPreferredSize();
int x = rect.x+rect.width-size.width;
int y = rect.y + (rect.height-size.height)/2;
Rectangle btnRect = new Rectangle( x, y, size.width, size.height);
boolean inButton = btnRect.contains( p );
boolean mustRepaint = inCloseButtonRect != inButton;
inCloseButtonRect = inButton;
if( inButton ) {
if( e.getID() == MouseEvent.MOUSE_PRESSED ) {
if ( inButton ) {
if ( e.getID() == MouseEvent.MOUSE_PRESSED ) {
Item item = ( Item ) getModel().getValueAt( selRow, selCol );
TabData tab = item.getTabData();
int tabSize = controller.getTabModel().size();
int tabIndex = controller.getTabModel().indexOf( tab );
if( tabIndex >= 0 ) {
TabActionEvent tae = new TabActionEvent( this, TabbedContainer.COMMAND_CLOSE, tabIndex );
controller.postActionEvent( tae );
return true;
return tabSize == 1;
} else if ( item.isSeparator() ) {
return closeSelectedDocumentList();
}
}
}
Expand All @@ -174,7 +182,30 @@ public String getToolTipText( MouseEvent event ) {
}
return null;
}

/**
* Method closes tabs in selected document list
*
* @return True if there are no more tabs left opened in other projects
*/
boolean closeSelectedDocumentList() {
List<TabData> tabs = new ArrayList<>(controller.getTabModel().getTabs());
Item item = ( Item ) getModel().getValueAt( getSelectedRow(), getSelectedColumn());
ProjectProxy project = item.getProject();
ProjectSupport projectSupport = ProjectSupport.getDefault();
int numOfOtherTabs = 0;
for ( TabData tab : tabs ) {
ProjectProxy projectForTab = projectSupport.getProjectForTab( tab );
if (( project == null && projectForTab == null ) || ( projectForTab != null && projectForTab.equals( project ))) {
int tabIndex = controller.getTabModel().indexOf( tab );
TabActionEvent tae = new TabActionEvent( this, TabbedContainer.COMMAND_CLOSE, tabIndex );
controller.postActionEvent( tae );
} else {
numOfOtherTabs++;
}
}
return numOfOtherTabs == 0;
}

private JButton createCloseButton() {
JButton res = CloseButtonFactory.createBigCloseButton();
res.setModel( new DefaultButtonModel() {
Expand Down Expand Up @@ -223,6 +254,10 @@ private Item( String name, String htmlName, String tooltip, ProjectProxy project
public TabData getTabData() {
return tabData;
}

public boolean isSeparator() {
return isSeparator;
}

@Override
public int compareTo( Object o ) {
Expand Down