mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 10:40:06 -08:00
GUI, menu: reworked switch panels from main menu - fixed random positions, now it group buttons by related tables and sort by creating date;
This commit is contained in:
parent
7916af0e52
commit
7811bcf4c1
3 changed files with 77 additions and 16 deletions
|
|
@ -617,17 +617,51 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
|
||||||
private void createAndShowSwitchPanelsMenu(final JComponent component, final AbstractButton windowButton) {
|
private void createAndShowSwitchPanelsMenu(final JComponent component, final AbstractButton windowButton) {
|
||||||
JPopupMenu menu = new JPopupMenu();
|
JPopupMenu menu = new JPopupMenu();
|
||||||
Component[] windows = desktopPane.getComponentsInLayer(javax.swing.JLayeredPane.DEFAULT_LAYER);
|
Component[] windows = desktopPane.getComponentsInLayer(javax.swing.JLayeredPane.DEFAULT_LAYER);
|
||||||
MagePaneMenuItem menuItem;
|
|
||||||
|
|
||||||
// TODO: sort menu by games, not current component order
|
List<MagePane> panels = Arrays.stream(windows)
|
||||||
// lobby -> table 1 tourny, table 1 draft, table 1 game, table 2...
|
.filter(Component::isVisible)
|
||||||
for (int i = 0; i < windows.length; i++) {
|
.filter(p -> p instanceof MagePane)
|
||||||
if (windows[i] instanceof MagePane) {
|
.map(p -> (MagePane) p)
|
||||||
MagePane window = (MagePane) windows[i];
|
.collect(Collectors.toList());
|
||||||
if (window.isVisible()) {
|
MagePane activePanel = panels.stream().findFirst().orElse(null);
|
||||||
menuItem = new MagePaneMenuItem(window);
|
|
||||||
|
panels.sort((p1, p2) -> {
|
||||||
|
// logic order:
|
||||||
|
// - non-game panels (sort by create order except lobby)
|
||||||
|
// - game panels (group by table, sort by create order)
|
||||||
|
|
||||||
|
// non-game first
|
||||||
|
int ng1 = p1.getSortTableId() == null ? 0 : 1;
|
||||||
|
int ng2 = p2.getSortTableId() == null ? 0 : 1;
|
||||||
|
if (ng1 != ng2) {
|
||||||
|
return Integer.compare(ng1, ng2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// group by table
|
||||||
|
if (p1.getSortTableId() != null && !p1.getSortTableId().equals(p2.getSortTableId())) {
|
||||||
|
return p1.getSortTableId().compareTo(p2.getSortTableId());
|
||||||
|
}
|
||||||
|
|
||||||
|
// sort inside group
|
||||||
|
return Integer.compare(p1.getSortOrder(), p2.getSortOrder());
|
||||||
|
});
|
||||||
|
|
||||||
|
UUID lastTableId = null;
|
||||||
|
for (MagePane panel : panels) {
|
||||||
|
|
||||||
|
// group by tables
|
||||||
|
if (!Objects.equals(panel.getSortTableId(), lastTableId)) {
|
||||||
|
lastTableId = panel.getSortTableId();
|
||||||
|
if (menu.getComponentCount() > 0) {
|
||||||
|
menu.addSeparator();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MagePaneMenuItem menuItem = new MagePaneMenuItem(panel);
|
||||||
|
if (activePanel == panel) {
|
||||||
|
menuItem.setState(true);
|
||||||
|
}
|
||||||
menuItem.setFont(GUISizeHelper.dialogFont);
|
menuItem.setFont(GUISizeHelper.dialogFont);
|
||||||
menuItem.setState(i == 0);
|
|
||||||
menuItem.addActionListener(ae -> {
|
menuItem.addActionListener(ae -> {
|
||||||
MagePane frame = ((MagePaneMenuItem) ae.getSource()).getFrame();
|
MagePane frame = ((MagePaneMenuItem) ae.getSource()).getFrame();
|
||||||
setActive(frame);
|
setActive(frame);
|
||||||
|
|
@ -635,8 +669,6 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
|
||||||
//menuItem.setIcon(window.getFrameIcon());
|
//menuItem.setIcon(window.getFrameIcon());
|
||||||
menu.add(menuItem);
|
menu.add(menuItem);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
menu.addPopupMenuListener(new PopupMenuListener() {
|
menu.addPopupMenuListener(new PopupMenuListener() {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
package mage.client;
|
package mage.client;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GUI: basic class for all full screen frames/tabs (example: game pane, deck editor pane, card viewer, etc)
|
* GUI: basic class for all full screen frames/tabs (example: game pane, deck editor pane, card viewer, etc)
|
||||||
|
|
@ -10,8 +12,12 @@
|
||||||
public abstract class MagePane extends javax.swing.JLayeredPane {
|
public abstract class MagePane extends javax.swing.JLayeredPane {
|
||||||
|
|
||||||
private String title = "no title set";
|
private String title = "no title set";
|
||||||
|
protected final int createdOrder;
|
||||||
|
|
||||||
|
private static final AtomicInteger createdOrderGenerator = new AtomicInteger();
|
||||||
|
|
||||||
public MagePane() {
|
public MagePane() {
|
||||||
|
this.createdOrder = createdOrderGenerator.incrementAndGet();
|
||||||
initComponents();
|
initComponents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -49,6 +55,18 @@
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GUI components sorting, e.g. in main menu switch panels
|
||||||
|
*/
|
||||||
|
public int getSortOrder() {
|
||||||
|
return this.createdOrder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For game panels only: return assigned table id
|
||||||
|
*/
|
||||||
|
abstract public UUID getSortTableId();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Active table: game pane, deck editor in sideboarding mode, etc
|
* Active table: game pane, deck editor in sideboarding mode, etc
|
||||||
* Non active table: client side panes like card viewer, deck viewer, etc
|
* Non active table: client side panes like card viewer, deck viewer, etc
|
||||||
|
|
|
||||||
|
|
@ -123,4 +123,15 @@ public class TablesPane extends MagePane {
|
||||||
tablesPanel.setTableFilter();
|
tablesPanel.setTableFilter();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UUID getSortTableId() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSortOrder() {
|
||||||
|
// lobby must be first all the time
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue