blob: fb1c5c1adf398e768838cff485d2a2530848e659 (
plain) (
tree)
|
|
package org.openslx.dozmod.gui.window;
import java.awt.Color;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JTable;
import javax.swing.RowFilter;
import javax.swing.UIManager;
import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.helper.TextChangeListener;
import org.openslx.dozmod.gui.helper.UiFeedback;
import org.openslx.dozmod.gui.window.layout.UserListWindowLayout;
import org.openslx.dozmod.thrift.cache.UserCache;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;
@SuppressWarnings("serial")
public class UserListWindow extends UserListWindowLayout implements UiFeedback {
private final static Logger LOGGER = Logger.getLogger(UserListWindow.class);
private final UserListWindow me = this;
private String ownerId = null;
public interface UserAddedCallback {
public void userAdded(UserInfo user, UserListWindow window);
}
public UserListWindow(final Window modalParent, final UserAddedCallback callback, String buttonCaption) {
super(modalParent, buttonCaption);
addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
// load the user cache async
QuickTimer.scheduleOnce(new Task() {
@Override
public void fire() {
final List<UserInfo> cacheList = UserCache.getAll();
final List<UserInfo> userList = new ArrayList<>(cacheList.size() - 1);
for (UserInfo user : cacheList) {
if (ownerId != null && user.getUserId().equals(ownerId))
continue;
userList.add(user);
}
Gui.asyncExec(new Runnable() {
@Override
public void run() {
userTable.setData(userList, true);
// Scale the window after getting the list of users.
int calcHeight = 150 + userList.size() * 20;
calcHeight = calcHeight > 350 ? calcHeight : 350;
me.setPreferredSize(Gui.getScaledDimension(450,
(calcHeight < 600) ? calcHeight : 600));
me.pack();
userTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
}
});
}
});
}
});
// filter the objects in the table depending on the search field
txtSearch.getDocument().addDocumentListener(new TextChangeListener() {
@Override
public void changed() {
try {
userTable.getRowSorter().setRowFilter(
RowFilter.regexFilter("(?i)" + txtSearch.getText()));
txtSearch.setForeground(UIManager.getColor("TextField.foreground"));
} catch (IllegalArgumentException ex) {
txtSearch.setForeground(Color.RED);
}
}
});
btnConfirm.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
final UserInfo user = userTable.getSelectedItem();
if (user == null)
return;
callback.userAdded(user, me);
}
});
btnCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
getRootPane().setDefaultButton(btnConfirm);
userTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
btnConfirm.doClick();
}
}
});
Gui.centerShellOverShell(modalParent, this);
// this.setLocationRelativeTo(SwingUtilities.getWindowAncestor(modalParent));
}
/**
* Open a new UserListWindow
*
* @param modalParent
* @param callback
* @param buttonCaption
* @param ownerId The Id of the owner of an image or lecture. Should not be
* shown in the list. Can be null
*/
public static void open(Window modalParent, UserAddedCallback callback, String buttonCaption,
String ownerId) {
UserListWindow win = new UserListWindow(modalParent, callback, buttonCaption);
win.ownerId = ownerId;
win.setVisible(true);
}
@Override
public boolean wantConfirmQuit() {
return false;
}
@Override
public void escapePressed() {
dispose();
}
}
|