Skip to content

Commit

Permalink
fix #107: Quickly switch between servers
Browse files Browse the repository at this point in the history
  • Loading branch information
Yanpas committed Oct 6, 2021
1 parent b950dc4 commit 83fd603
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 22 deletions.
Binary file added images/go-next.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/go-previous.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 2 additions & 3 deletions src/studio/ui/ServerList.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import studio.kdb.Config;
import studio.kdb.K;
import studio.kdb.Server;
import studio.kdb.ServerTreeNode;

Expand Down Expand Up @@ -108,7 +107,7 @@ private void setRoot(ServerTreeNode newRoot) {
root = new ServerTreeNode();
} else if (isListView()) {
root = new ServerTreeNode();
for (Enumeration e = newRoot.depthFirstEnumeration(); e.hasMoreElements(); ) {
for (Enumeration<TreeNode> e = newRoot.depthFirstEnumeration(); e.hasMoreElements(); ) {
ServerTreeNode node = (ServerTreeNode) e.nextElement();
if (node.isFolder()) continue;
root.add(node.getServer());
Expand Down Expand Up @@ -317,7 +316,7 @@ public void changedUpdate(DocumentEvent e) {
toolbar.add(filter);
filter.requestFocus();

serverHistoryList = new JList();
serverHistoryList = new JList<String>();
serverHistoryList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
serverHistoryList.addMouseListener(new MouseAdapter() {
@Override
Expand Down
117 changes: 98 additions & 19 deletions src/studio/ui/StudioPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import java.io.*;
import java.util.*;
import java.util.List;
import java.util.stream.Stream;
import javax.swing.*;
import static javax.swing.JSplitPane.VERTICAL_SPLIT;
import static studio.ui.EscapeDialog.DialogResult.ACCEPTED;
Expand Down Expand Up @@ -85,7 +84,61 @@ public class StudioPanel extends JPanel implements Observer,WindowListener {

private static boolean loading = false;

private static class NavigationHistory<T> {
private List<T> history = new ArrayList<>();
private int index = 0;
private T selectedItem = null;

public void addSelectedItem(T item) {
if (item.equals(getSelectedItem()))
return;
while (history.size() > index + 1) {
history.remove(history.size() - 1);
}
history.add(item);
index = history.size() - 1;
setSelectedItem();
}

public void removeSelectedItem() {
if (!history.isEmpty()) {
history.remove(index);
}
}

private void setSelectedItem() {
selectedItem = history.get(index);
}

public T getSelectedItem() {
return selectedItem;
}

public boolean hasPreviousItem() {
return index != 0;
}

public void setPreviousItem() {
if (!hasPreviousItem())
return;
index--;
setSelectedItem();
}

public boolean hasNextItem() {
return index + 1 < history.size();
}

public void setNextItem() {
if (!hasNextItem())
return;
index++;
setSelectedItem();
}
}

private JComboBox<String> comboServer;
private NavigationHistory<Server> serverNavigateHistory = new NavigationHistory<>();
private JTextField txtServer;
private String exportFilename;
private String lastQuery = null;
Expand All @@ -102,6 +155,8 @@ public class StudioPanel extends JPanel implements Observer,WindowListener {
private UserAction openFileAction;
private UserAction openInExcel;
private UserAction codeKxComAction;
private UserAction prevServerAction;
private UserAction nextServerAction;
private UserAction serverListAction;
private UserAction serverHistoryAction;
private UserAction newWindowAction;
Expand Down Expand Up @@ -561,7 +616,7 @@ private void addToMruFiles(String filename) {
if (filename == null)
return;

Vector v = new Vector();
List<String> v = new ArrayList<>();
v.add(filename);
String[] mru = Config.getInstance().getMRUFiles();
for (int i = 0;i < mru.length;i++)
Expand Down Expand Up @@ -741,8 +796,14 @@ else if ((row == 1) && ((noWins % 3) > 1))
}
}

private void setServer(Server server) {
if (server == null) return;
private void setServer(Server server, boolean addToNavigateHistory) {
if (server == null)
return;

if (addToNavigateHistory)
serverNavigateHistory.addSelectedItem(server);
prevServerAction.setEnabled(serverNavigateHistory.hasPreviousItem());
nextServerAction.setEnabled(serverNavigateHistory.hasNextItem());
editor.setServer(server);

if (!loading) {
Expand Down Expand Up @@ -786,8 +847,20 @@ private void initActions() {
e -> addTab(editor.getServer(), null));

serverListAction = UserAction.create(I18n.getString("ServerList"), Util.TEXT_TREE_ICON, "Show server list",
KeyEvent.VK_L, KeyStroke.getKeyStroke(KeyEvent.VK_L, menuShortcutKeyMask | InputEvent.SHIFT_MASK),
e -> showServerList(false));
prevServerAction = UserAction.create("Previous server", Util.BACK_ICON, "Previous server", 0,
e -> {
serverNavigateHistory.setPreviousItem();
comboServer.setSelectedItem(serverNavigateHistory.getSelectedItem());
setServer(serverNavigateHistory.getSelectedItem(), false);
});
prevServerAction.setEnabled(false);
nextServerAction = UserAction.create("Next server", Util.FORWARD_ICON, "Next server", 0,
e -> {
serverNavigateHistory.setNextItem();
comboServer.setSelectedItem(serverNavigateHistory.getSelectedItem());
setServer(serverNavigateHistory.getSelectedItem(), false);
});
nextServerAction.setEnabled(false);

serverHistoryAction = UserAction.create("Server History", null, "Recent selected servers", KeyEvent.VK_R,
KeyStroke.getKeyStroke(KeyEvent.VK_R, menuShortcutKeyMask | InputEvent.SHIFT_MASK),
Expand All @@ -811,7 +884,7 @@ private void initActions() {

s = f.getServer();
Config.getInstance().addServer(s);
setServer(s);
setServer(s, false);
rebuildAll();
}
});
Expand All @@ -825,7 +898,7 @@ private void initActions() {
Server s = f.getServer();
Config.getInstance().addServer(s);
ConnectionPool.getInstance().purge(s); //?
setServer(s);
setServer(s, true);
rebuildAll();
}
});
Expand All @@ -843,11 +916,14 @@ private void initActions() {

if (choice == 0) {
Config.getInstance().removeServer(editor.getServer());
serverNavigateHistory.removeSelectedItem();

Server[] servers = Config.getInstance().getServers();

if (servers.length > 0)
setServer(servers[0]);

if (servers.length > 0) {
setServer(servers[0], true);
}

rebuildAll();
}
Expand Down Expand Up @@ -1205,7 +1281,7 @@ public void actionPerformed(ActionEvent e) {
clone = f.getServer();
Config.getInstance().addServer(clone);
//ebuildToolbar();
setServer(clone);
setServer(clone, true);
ConnectionPool.getInstance().purge(clone); //?
rebuildAll();
}
Expand Down Expand Up @@ -1292,7 +1368,7 @@ private void ensureDeiconified(JFrame f) {
int state = f.getExtendedState();
state = state & ~Frame.ICONIFIED;
f.setExtendedState(state);
f.show();
f.setVisible(true);
}

private void selectConnectionString() {
Expand All @@ -1302,7 +1378,7 @@ private void selectConnectionString() {
if (server != null && server.getConnectionString().equals(connection)) return;

try {
setServer(Config.getInstance().getServerByConnectionString(connection));
setServer(Config.getInstance().getServerByConnectionString(connection), true);

rebuildToolbar();
toolbar.validate();
Expand All @@ -1327,16 +1403,17 @@ private void showServerList(boolean selectHistory) {
Server selectedServer = serverList.getSelectedServer();
if (selectedServer == null || selectedServer.equals(editor.getServer())) return;

setServer(selectedServer);
setServer(selectedServer, true);
rebuildToolbar();
}


private void selectServerName() {
String selection = comboServer.getSelectedItem().toString();
if(! Config.getInstance().getServerNames().contains(selection)) return;
if (!Config.getInstance().getServerNames().contains(selection))
return;

setServer(Config.getInstance().getServer(selection));
setServer(Config.getInstance().getServer(selection), true);
rebuildToolbar();
toolbar.validate();
toolbar.repaint();
Expand Down Expand Up @@ -1386,6 +1463,8 @@ public void focusLost(FocusEvent e) {

toolbar.add(new JLabel(I18n.getString("Server")));
toolbar.add(comboServer);
toolbar.add(prevServerAction);
toolbar.add(nextServerAction);
toolbar.add(txtServer);
toolbar.add(serverListAction);
toolbar.addSeparator();
Expand Down Expand Up @@ -1551,7 +1630,7 @@ public EditorTab addTab(Server server, String filename) {
component.putClientProperty(EditorTab.class, editor);
tabbedEditors.add(component);
tabbedEditors.setSelectedIndex(tabbedEditors.getTabCount()-1);
setServer(server);
setServer(server, loading);

if (filename != null) {
loadFile(filename);
Expand All @@ -1569,7 +1648,7 @@ private void refreshEditor() {
if ( tabbedEditors.getSelectedIndex() == -1) return;
editor = getEditor(tabbedEditors.getSelectedIndex());
editor.setPanel(this);
setServer(editor.getServer());
setServer(editor.getServer(), false);
lastQuery = null;
refreshTitle();
refreshActionState();
Expand Down Expand Up @@ -1927,7 +2006,7 @@ public static Workspace getWorkspace() {
String filename = editor.getFilename();
boolean modified = editor.isModified();
if (modified && Config.getInstance().getBoolean(Config.AUTO_SAVE)) {
panel.saveFileOnDisk(editor);
StudioPanel.saveFileOnDisk(editor);
}

String content = editor.getTextArea().getText();
Expand Down
3 changes: 3 additions & 0 deletions src/studio/ui/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ public class Util {
public final static ImageIcon COMMA_ICON = getImage("/comma.png");
public final static ImageIcon COMMA_CROSSED_ICON = getImage("/comma_crossed.png");

public final static ImageIcon BACK_ICON = getImage("/go-previous.png");
public final static ImageIcon FORWARD_ICON = getImage("/go-next.png");

public final static ImageIcon UPLOAD_ICON = getImage("/upload.png");

public final static ImageIcon ASC_ICON = getImage("/asc.png");
Expand Down

0 comments on commit 83fd603

Please sign in to comment.