logiledus/src/main/java/logiledus/Controllers/KeysLedsController.java

239 lines
9.2 KiB
Java

package logiledus.Controllers;
import javafx.collections.ListChangeListener;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import logiledus.Controllers.Model.LoRule;
import logiledus.Controllers.Model.RuleBox;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.ResourceBundle;
public class KeysLedsController implements Initializable {
@FXML
private Button
k_esc, k_f1, k_f2, k_f3, k_f4, k_f5, k_f6, k_f7, k_f8, k_f9, k_f10, k_f11, k_f12,
k_1, k_2, k_3, k_4, k_5, k_6, k_7, k_8, k_9, k_0, k_dash, k_equal, k_backspace,
k_tab, k_q, k_w, k_e, k_r, k_t, k_y, k_u, k_i, k_o, k_p, k_bracket_open, k_bracket_close, k_backslash,
k_caps, k_a, k_s, k_d, k_f, k_g, k_h, k_j, k_k, k_l, k_semicolon, k_quotation, k_enter,
k_l_shift, k_z, k_x, k_c, k_v, k_b, k_n, k_m, k_comma, k_dot, k_shash, k_r_shift,
k_l_ctrl, k_win, k_l_alt, k_space, k_r_alt, k_fn, k_menu, k_r_ctrl,
k_prtscr, k_scrl, k_pause, k_tilde, k_ins, k_home, k_pg_up, k_del, k_pg_dn,
k_arr_up, k_arr_down, k_arr_left, k_arr_right, k_end,
k_num, k_num_slash, k_num_asterisk, k_num_minus, k_num_9, k_num_8, k_num_7, k_num_6, k_num_5, k_num_4, k_num_3, k_num_2, k_num_1, k_num_0, k_num_period, k_num_enter, k_num_plus,
l_game, l_caps;
private HashMap<String, Button> kbrdMap;
@FXML
private Button addRuleBtn, remRuleBtn;
@FXML
private VBox rulesVBox;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
kbrdMap = new HashMap<>();
kbrdMap.put("k_esc", k_esc);
kbrdMap.put("k_f1", k_f1);
kbrdMap.put("k_f2", k_f2);
kbrdMap.put("k_f3", k_f3);
kbrdMap.put("k_f4", k_f4);
kbrdMap.put("k_f5", k_f5);
kbrdMap.put("k_f6", k_f6);
kbrdMap.put("k_f7", k_f7);
kbrdMap.put("k_f8", k_f8);
kbrdMap.put("k_f9", k_f9);
kbrdMap.put("k_f10", k_f10);
kbrdMap.put("k_f11", k_f11);
kbrdMap.put("k_f12", k_f12);
kbrdMap.put("k_1", k_1);
kbrdMap.put("k_2", k_2);
kbrdMap.put("k_3", k_3);
kbrdMap.put("k_4", k_4);
kbrdMap.put("k_5", k_5);
kbrdMap.put("k_6", k_6);
kbrdMap.put("k_7", k_7);
kbrdMap.put("k_8", k_8);
kbrdMap.put("k_9", k_9);
kbrdMap.put("k_0", k_0);
kbrdMap.put("k_dash", k_dash);
kbrdMap.put("k_equal", k_equal);
kbrdMap.put("k_backspace", k_backspace);
kbrdMap.put("k_tab", k_tab);
kbrdMap.put("k_q", k_q);
kbrdMap.put("k_w", k_w);
kbrdMap.put("k_e", k_e);
kbrdMap.put("k_r", k_r);
kbrdMap.put("k_t", k_t);
kbrdMap.put("k_y", k_y);
kbrdMap.put("k_u", k_u);
kbrdMap.put("k_i", k_i);
kbrdMap.put("k_o", k_o);
kbrdMap.put("k_p", k_p);
kbrdMap.put("k_bracket_open", k_bracket_open);
kbrdMap.put("k_bracket_close", k_bracket_close);
kbrdMap.put("k_backslash", k_backslash);
kbrdMap.put("k_caps", k_caps);
kbrdMap.put("k_a", k_a);
kbrdMap.put("k_s", k_s);
kbrdMap.put("k_d", k_d);
kbrdMap.put("k_f", k_f);
kbrdMap.put("k_g", k_g);
kbrdMap.put("k_h", k_h);
kbrdMap.put("k_j", k_j);
kbrdMap.put("k_k", k_k);
kbrdMap.put("k_l", k_l);
kbrdMap.put("k_semicolon", k_semicolon);
kbrdMap.put("k_quotation", k_quotation);
kbrdMap.put("k_enter", k_enter);
kbrdMap.put("k_l_shift", k_l_shift);
kbrdMap.put("k_z", k_z);
kbrdMap.put("k_x", k_x);
kbrdMap.put("k_c", k_c);
kbrdMap.put("k_v", k_v);
kbrdMap.put("k_b", k_b);
kbrdMap.put("k_n", k_n);
kbrdMap.put("k_m", k_m);
kbrdMap.put("k_comma", k_comma);
kbrdMap.put("k_dot", k_dot);
kbrdMap.put("k_shash", k_shash);
kbrdMap.put("k_r_shift", k_r_shift);
kbrdMap.put("k_l_ctrl", k_l_ctrl);
kbrdMap.put("k_win", k_win);
kbrdMap.put("k_l_alt", k_l_alt);
kbrdMap.put("k_space", k_space);
kbrdMap.put("k_r_alt", k_r_alt);
kbrdMap.put("k_fn", k_fn);
kbrdMap.put("k_menu", k_menu);
kbrdMap.put("k_r_ctrl", k_r_ctrl);
kbrdMap.put("k_prtscr", k_prtscr);
kbrdMap.put("k_scrl", k_scrl);
kbrdMap.put("k_pause", k_pause);
kbrdMap.put("k_tilde", k_tilde);
kbrdMap.put("k_ins", k_ins);
kbrdMap.put("k_home", k_home);
kbrdMap.put("k_pg_up", k_pg_up);
kbrdMap.put("k_del", k_del);
kbrdMap.put("k_pg_dn", k_pg_dn);
kbrdMap.put("k_arr_up", k_arr_up);
kbrdMap.put("k_arr_down", k_arr_down);
kbrdMap.put("k_arr_left", k_arr_left);
kbrdMap.put("k_arr_right", k_arr_right);
kbrdMap.put("k_end", k_end);
kbrdMap.put("k_num", k_num);
kbrdMap.put("k_num_slash", k_num_slash);
kbrdMap.put("k_num_asterisk", k_num_asterisk);
kbrdMap.put("k_num_minus", k_num_minus);
kbrdMap.put("k_num_9", k_num_9);
kbrdMap.put("k_num_8", k_num_8);
kbrdMap.put("k_num_7", k_num_7);
kbrdMap.put("k_num_6", k_num_6);
kbrdMap.put("k_num_5", k_num_5);
kbrdMap.put("k_num_4", k_num_4);
kbrdMap.put("k_num_3", k_num_3);
kbrdMap.put("k_num_2", k_num_2);
kbrdMap.put("k_num_1", k_num_1);
kbrdMap.put("k_num_0", k_num_0);
kbrdMap.put("k_num_period", k_num_period);
kbrdMap.put("k_num_enter", k_num_enter);
kbrdMap.put("k_num_plus", k_num_plus);
kbrdMap.put("l_game", l_game);
kbrdMap.put("l_caps", l_caps);
rulesVBox.getChildren().addListener((ListChangeListener<Node>) change -> {
change.next(); // Get changes
if (change.wasAdded()){ // If something added, turn on ability to remove such rule
remRuleBtn.setDisable(false);
return;
} // Otherwise, check if we have anything inside the pane
if (rulesVBox.getChildren().isEmpty()) // If so, select latest available 'box'
remRuleBtn.setDisable(true);
else // If the pane is empty, disable 'Remove' button.
RuleBox.select((RuleBox) rulesVBox.getChildren().get(rulesVBox.getChildren().size()-1));
});
addRuleBtn.setOnAction(ActionEvent -> rulesVBox.getChildren().add(new RuleBox()));
remRuleBtn.setDisable(true);
remRuleBtn.setOnAction(ActionEvent -> {
if (rulesVBox.getChildren().isEmpty())
return;
RuleBox box;
if ((box = RuleBox.getSelected()) != null)
box.wipe(); // Reset buttons used for rule
rulesVBox.getChildren().remove(RuleBox.getSelected()); // Remove from pane
});
}
@FXML
private void anyKeyAction(ActionEvent event){
if (rulesVBox.getChildren().isEmpty()) // if we have rule, then we have selected rule (app architecture)
return;
Button btn = (Button) event.getSource();
RuleBox box;
if ((box = RuleBox.getSelected()) != null)
box.addKey(btn);
}
public HashMap<String, List<byte[][]>> getRules(){
final HashMap<String, List<byte[][]>> set = new HashMap<>();
final List<byte[][]> keySet = new ArrayList<>();
final List<byte[][]> ledSet = new ArrayList<>();
byte[][] keySingleRuleSet;
byte[][] ledSingleRuleSet;
for (Node box : rulesVBox.getChildren()){
keySingleRuleSet = ((RuleBox) box).getKeyCodes();
if (keySingleRuleSet != null)
keySet.add(keySingleRuleSet);
ledSingleRuleSet = ((RuleBox) box).getLedCodes();
if (ledSingleRuleSet != null)
ledSet.add(ledSingleRuleSet);
}
if (keySet.size() == 0 && ledSet.size() == 0)
return null;
set.put("Key", keySet);
set.put("Led", ledSet);
return set;
}
public List<LoRule> getInternalRules(){
List<LoRule> allRulesList = new ArrayList<>();
LoRule rule;
for (Node box : rulesVBox.getChildren()){
rule = ((RuleBox) box).getLoRule();
if (rule != null)
allRulesList.add(rule);
}
return allRulesList;
}
/**
* Restore from config file.
* */
public void setConfig(List<LoRule> rules){
if (rulesVBox.getChildren().size() > 0){
for (Node box : rulesVBox.getChildren())
((RuleBox) box).wipe();
rulesVBox.getChildren().clear();
}
List<Button> keyList;
for (LoRule rule : rules){
keyList = new ArrayList<>();
for (String keyId : rule.getKeyLedCode())
keyList.add(kbrdMap.get(keyId));
RuleBox box = new RuleBox(rule.getRed(), rule.getGreen(), rule.getBlue(), keyList);
rulesVBox.getChildren().add(box);
}
}
}