Credential saving should work, progressed on choices
This commit is contained in:
parent
2b70c3a283
commit
94ab336ddb
121
src/main/java/xyz/thastertyn/Login/LocalCredentials.java
Normal file
121
src/main/java/xyz/thastertyn/Login/LocalCredentials.java
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
package xyz.thastertyn.Login;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class LocalCredentials {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks for already saved credentials, at least if its file exists
|
||||||
|
* @return <ul>
|
||||||
|
* <li> {@code true} a file exists </li>
|
||||||
|
* <li> {@code false} doesn't exist </li>
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
|
||||||
|
private String path;
|
||||||
|
|
||||||
|
private File credentialsFile;
|
||||||
|
private File credentialsPath;
|
||||||
|
|
||||||
|
public boolean checkForExistingCredentials()
|
||||||
|
{
|
||||||
|
if(System.getProperty("os.name").equals("Linux"))
|
||||||
|
{
|
||||||
|
// /home/user/.local/share/jecnak/...
|
||||||
|
path = System.getProperty("user.home") + "/.local/share/jecnak/";
|
||||||
|
}else if(System.getProperty("os.name").contains("Windows"))
|
||||||
|
{
|
||||||
|
// C:\Users\\user\AppData\Roaming\...
|
||||||
|
path = System.getenv("APPDATA") + "\\jecnak\\";
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
credentialsPath = new File(path);
|
||||||
|
credentialsFile = new File(credentialsPath, "credentials.txt");
|
||||||
|
|
||||||
|
if(!credentialsFile.exists())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCredentialsFile()
|
||||||
|
{
|
||||||
|
String[] result = new String[2];
|
||||||
|
if(credentialsFile == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
BufferedReader reader = new BufferedReader(new FileReader(credentialsFile));
|
||||||
|
|
||||||
|
String line = "";
|
||||||
|
while((line = reader.readLine()) != null)
|
||||||
|
{
|
||||||
|
String[] currentValue = line.split("=");
|
||||||
|
|
||||||
|
if(currentValue[0].equals("user"))
|
||||||
|
{
|
||||||
|
result[0] = currentValue[1];
|
||||||
|
}else if(currentValue[0].equals("pass"))
|
||||||
|
{
|
||||||
|
result[1] = currentValue[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reader.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(result[0] == null || result[1] == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean saveCredentials(String[] credentials)
|
||||||
|
{
|
||||||
|
if(credentialsFile == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!credentialsFile.exists())
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
credentialsPath.mkdirs();
|
||||||
|
credentialsFile.createNewFile();
|
||||||
|
}catch(IOException e)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
BufferedWriter writer = new BufferedWriter(new FileWriter(credentialsFile));
|
||||||
|
writer.append("user=" + credentials[0]);
|
||||||
|
writer.append("\n");
|
||||||
|
writer.append("pass=" + credentials[1]);
|
||||||
|
|
||||||
|
writer.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,12 +1,9 @@
|
|||||||
package xyz.thastertyn.Login;
|
package xyz.thastertyn.Login;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.BufferedWriter;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileReader;
|
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
|
import java.util.Properties;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
|
|
||||||
import javax.security.auth.login.CredentialException;
|
import javax.security.auth.login.CredentialException;
|
||||||
@ -21,6 +18,7 @@ public class LoginController {
|
|||||||
|
|
||||||
private WindowBasedTextGUI textGUI;
|
private WindowBasedTextGUI textGUI;
|
||||||
private xyz.thastertyn.Login.CredentialsInput dialog;
|
private xyz.thastertyn.Login.CredentialsInput dialog;
|
||||||
|
private LocalCredentials localCredentials = new LocalCredentials();
|
||||||
private xyz.thastertyn.Login.Login login = new xyz.thastertyn.Login.Login();
|
private xyz.thastertyn.Login.Login login = new xyz.thastertyn.Login.Login();
|
||||||
|
|
||||||
public LoginController(WindowBasedTextGUI textGUI)
|
public LoginController(WindowBasedTextGUI textGUI)
|
||||||
@ -30,26 +28,36 @@ public class LoginController {
|
|||||||
|
|
||||||
public void login()
|
public void login()
|
||||||
{
|
{
|
||||||
dialog = new CredentialsInput();
|
String[] credentials;
|
||||||
if(checkForCredentials()) // Credentials exist
|
|
||||||
|
if(localCredentials.checkForExistingCredentials()) // Credentials exist
|
||||||
{
|
{
|
||||||
if(loginUsingCredentials()) // They are accessible and can read them
|
credentials = localCredentials.getCredentialsFile();
|
||||||
|
}else{
|
||||||
|
dialog = new CredentialsInput();
|
||||||
|
Triplet<String, String, Boolean> data = dialog.showDialog(textGUI); // Failed to get credentials to log in, get them from user
|
||||||
|
credentials = new String[] {data.getValue0(), data.getValue1()};
|
||||||
|
|
||||||
|
if(data.getValue2())
|
||||||
{
|
{
|
||||||
return;
|
localCredentials.saveCredentials(credentials);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Triplet<String, String, Boolean> data = dialog.showDialog(textGUI); // Failed to get credentials to log in, get them from user
|
loginUsingCredentials(credentials);
|
||||||
try
|
}
|
||||||
{
|
|
||||||
login.loginJecna(data.getValue0(), data.getValue1());
|
private void loginUsingCredentials(String[] credentials)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
login.loginJecna(credentials[0], credentials[1]);
|
||||||
}catch (TimeoutException e)
|
}catch (TimeoutException e)
|
||||||
{
|
{
|
||||||
MessageDialog.showMessageDialog(textGUI, "Timeout", "The attempt to connect took too long.", MessageDialogButton.Retry,
|
MessageDialog.showMessageDialog(textGUI, "Timeout", "The attempt to connect took too long.", MessageDialogButton.Retry,
|
||||||
MessageDialogButton.Abort);
|
MessageDialogButton.Abort);
|
||||||
} catch (UnknownHostException e) {
|
} catch (UnknownHostException e) {
|
||||||
MessageDialog.showMessageDialog(textGUI, "No Internet connection",
|
MessageDialog.showMessageDialog(textGUI, "No Internet connection",
|
||||||
"There seems to be no internet connection, reverting to cached data",
|
"There seems to be a problem with your internet connection",
|
||||||
MessageDialogButton.OK);
|
MessageDialogButton.OK);
|
||||||
login();
|
login();
|
||||||
} catch (CredentialException e)
|
} catch (CredentialException e)
|
||||||
@ -66,127 +74,4 @@ public class LoginController {
|
|||||||
login();
|
login();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Zkontroluje zda jiz neexistuji ulozene udaje na systemu
|
|
||||||
* @return <ul>
|
|
||||||
* <li> {@code true} soubor existuje a neni prazdny </li>
|
|
||||||
* <li> {@code false} neexistuje, nebo je prazdny </li>
|
|
||||||
* </ul>
|
|
||||||
*/
|
|
||||||
private boolean checkForCredentials()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
//File credentials = null;
|
|
||||||
|
|
||||||
//if(System.getProperty("os.name").equals("Linux"))
|
|
||||||
//{
|
|
||||||
// credentials = new File("~/.local/share/jecnak/credentials.json");
|
|
||||||
|
|
||||||
//}else if(System.getProperty("os.name").contains("Windows"))
|
|
||||||
//{
|
|
||||||
// credentials = new File(System.getenv("APPDATA\\jecnak\\"));
|
|
||||||
//}
|
|
||||||
|
|
||||||
//if(!credentials.exists() || credentials.length() == 0)
|
|
||||||
//{
|
|
||||||
// return false;
|
|
||||||
//}
|
|
||||||
//return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean saveCredentials(String user, String pass)
|
|
||||||
{
|
|
||||||
File credentials;
|
|
||||||
|
|
||||||
if(System.getProperty("os.name").equals("Linux"))
|
|
||||||
{
|
|
||||||
credentials = new File("~/.local/share/jecnak/credentials.json");
|
|
||||||
|
|
||||||
}else if(System.getProperty("os.name").contains("Windows"))
|
|
||||||
{
|
|
||||||
credentials = new File(System.getenv("APPDATA\\jecnak\\"));
|
|
||||||
}else{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
BufferedWriter writer = new BufferedWriter(new FileWriter(credentials));
|
|
||||||
writer.append("username=" + user);
|
|
||||||
writer.append("password=" + pass);
|
|
||||||
|
|
||||||
writer.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean loginUsingCredentials()
|
|
||||||
{
|
|
||||||
File credentials;
|
|
||||||
|
|
||||||
if(System.getProperty("os.name").equals("Linux"))
|
|
||||||
{
|
|
||||||
credentials = new File("~/.local/share/jecnak/credentials.json");
|
|
||||||
|
|
||||||
}else if(System.getProperty("os.name").contains("Windows"))
|
|
||||||
{
|
|
||||||
credentials = new File(System.getenv("APPDATA\\jecnak\\"));
|
|
||||||
}else{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!credentials.exists() || credentials.length() == 0)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
String user = "";
|
|
||||||
String pass = "";
|
|
||||||
|
|
||||||
try {
|
|
||||||
BufferedReader reader = new BufferedReader(new FileReader(credentials));
|
|
||||||
|
|
||||||
String line = "";
|
|
||||||
while((line = reader.readLine()) != null)
|
|
||||||
{
|
|
||||||
if(line.matches("^[a-z]\\=.*$"))
|
|
||||||
{
|
|
||||||
String key = line.split("=")[0];
|
|
||||||
String value = line.split("=")[1];
|
|
||||||
|
|
||||||
switch(key)
|
|
||||||
{
|
|
||||||
case "username":
|
|
||||||
user = value;
|
|
||||||
break;
|
|
||||||
case "password":
|
|
||||||
pass = value;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
reader.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
login.loginJecna(user, pass);
|
|
||||||
} catch (CredentialException | IOException | TimeoutException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
10
src/main/java/xyz/thastertyn/Scrape/JecnaScrape.java
Normal file
10
src/main/java/xyz/thastertyn/Scrape/JecnaScrape.java
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package xyz.thastertyn.Scrape;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.SocketTimeoutException;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
|
||||||
|
public abstract class JecnaScrape {
|
||||||
|
|
||||||
|
public abstract void download() throws SocketTimeoutException, UnknownHostException, IOException;
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package xyz.thastertyn.Scrape;
|
package xyz.thastertyn.Scrape;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.SocketTimeoutException;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
@ -9,7 +10,6 @@ import org.jsoup.nodes.Document;
|
|||||||
import org.jsoup.nodes.Element;
|
import org.jsoup.nodes.Element;
|
||||||
import org.jsoup.select.Elements;
|
import org.jsoup.select.Elements;
|
||||||
|
|
||||||
import xyz.thastertyn.Tuples.Pair;
|
|
||||||
import xyz.thastertyn.Types.Choice;
|
import xyz.thastertyn.Types.Choice;
|
||||||
import xyz.thastertyn.Types.Option;
|
import xyz.thastertyn.Types.Option;
|
||||||
import xyz.thastertyn.Types.Options;
|
import xyz.thastertyn.Types.Options;
|
||||||
@ -32,7 +32,7 @@ public class Znamky {
|
|||||||
download("https://www.spsejecna.cz/score/student");
|
download("https://www.spsejecna.cz/score/student");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void downloadZnamky(Choice choice) throws UnknownHostException, IOException
|
public void downloadZnamky(Choice choice) throws SocketTimeoutException, UnknownHostException, IOException
|
||||||
{
|
{
|
||||||
download(String.format(
|
download(String.format(
|
||||||
"https://www.spsejecna.cz/score/student?schoolYearId=%s&schoolYearHalfId=%s",
|
"https://www.spsejecna.cz/score/student?schoolYearId=%s&schoolYearHalfId=%s",
|
||||||
@ -67,7 +67,13 @@ public class Znamky {
|
|||||||
.map(m -> m.group(1))
|
.map(m -> m.group(1))
|
||||||
.orElse(plnyNazevPredmetu);
|
.orElse(plnyNazevPredmetu);
|
||||||
|
|
||||||
predmety.add(new Predmet(jmenoPredmetu));
|
if(radkyPredmetuHTML[i].get(2).childrenSize() == 0) // Predmet jeste nema vyslednou znamku
|
||||||
|
{
|
||||||
|
predmety.add(new Predmet(jmenoPredmetu));
|
||||||
|
}else{
|
||||||
|
String vyslednaZnamka = radkyPredmetuHTML[i].get(2).select("a.scoreFinal").text();
|
||||||
|
predmety.add(new Predmet(jmenoPredmetu, Integer.parseInt(vyslednaZnamka)));
|
||||||
|
}
|
||||||
|
|
||||||
for(Element znamkaElement : radkyPredmetuHTML[i].get(1).select("a.score"))
|
for(Element znamkaElement : radkyPredmetuHTML[i].get(1).select("a.score"))
|
||||||
{
|
{
|
||||||
@ -77,7 +83,8 @@ public class Znamky {
|
|||||||
String textZnamky = znamkaElement.select("span.value").text();
|
String textZnamky = znamkaElement.select("span.value").text();
|
||||||
|
|
||||||
znamka = textZnamky.matches("\\d") ?
|
znamka = textZnamky.matches("\\d") ?
|
||||||
Integer.parseInt(textZnamky) :
|
Integer.parseInt(textZnamky)
|
||||||
|
:
|
||||||
-1; // Nejspis se jedna o N (Nehodnocen)
|
-1; // Nejspis se jedna o N (Nehodnocen)
|
||||||
|
|
||||||
// Mala znamka se bude pocitat jako polovicni vaha
|
// Mala znamka se bude pocitat jako polovicni vaha
|
||||||
@ -112,9 +119,9 @@ public class Znamky {
|
|||||||
return predmety;
|
return predmety;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Pair<Options, Options> getOptions()
|
public Options[] getOptions()
|
||||||
{
|
{
|
||||||
return new Pair<Options, Options>(schoolYearOptions, schoolHalfYearOptions);
|
return new Options[] {schoolYearOptions, schoolHalfYearOptions};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -22,6 +22,6 @@ public class Option {
|
|||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return value;
|
return text;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ import xyz.thastertyn.UserInterface.UpdateListener;
|
|||||||
public abstract class JecnaContent {
|
public abstract class JecnaContent {
|
||||||
|
|
||||||
protected Panel mainPanel;
|
protected Panel mainPanel;
|
||||||
protected Boolean hasStarted;
|
protected boolean hasStarted = false;
|
||||||
protected Label borderLabel;
|
protected Label borderLabel;
|
||||||
protected UpdateListener listener;
|
protected UpdateListener listener;
|
||||||
|
|
||||||
@ -32,7 +32,7 @@ public abstract class JecnaContent {
|
|||||||
|
|
||||||
public boolean hasStarted()
|
public boolean hasStarted()
|
||||||
{
|
{
|
||||||
return hasStarted.booleanValue();
|
return hasStarted;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Label getLabel()
|
public Label getLabel()
|
||||||
|
@ -48,13 +48,10 @@ public class Znamky extends JecnaContent {
|
|||||||
private xyz.thastertyn.Scrape.Znamky znamky;
|
private xyz.thastertyn.Scrape.Znamky znamky;
|
||||||
|
|
||||||
private UpdateListener listener;
|
private UpdateListener listener;
|
||||||
|
|
||||||
private Boolean hasStarted = Boolean.valueOf(false);
|
|
||||||
|
|
||||||
public Znamky(UpdateListener listener)
|
public Znamky(UpdateListener listener)
|
||||||
{
|
{
|
||||||
super.mainPanel = this.mainPanel;
|
super.mainPanel = this.mainPanel;
|
||||||
super.hasStarted = this.hasStarted;
|
|
||||||
super.borderLabel = this.borderLabel;
|
super.borderLabel = this.borderLabel;
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
}
|
}
|
||||||
@ -79,7 +76,7 @@ public class Znamky extends JecnaContent {
|
|||||||
setGUI();
|
setGUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
hasStarted = true;
|
super.hasStarted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -134,17 +131,16 @@ public class Znamky extends JecnaContent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
double prumer = predmet.getVyslednaZnamka();
|
double prumer = predmet.getVyslednaZnamka();
|
||||||
String pr;
|
String prumerAsString;
|
||||||
|
|
||||||
if(predmet.isFinal())
|
if(predmet.isFinal())
|
||||||
{
|
{
|
||||||
int i = (int) prumer;
|
prumerAsString = ((int) prumer) + "";
|
||||||
pr = i + "";
|
|
||||||
}else{
|
}else{
|
||||||
pr = String.format("%.2f", prumer);
|
prumerAsString = String.format("%.2f", prumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
Label vysl = new Label(pr);
|
Label vysl = new Label(prumerAsString);
|
||||||
|
|
||||||
vysl.setTheme(colors.get((int) Math.round(prumer)));
|
vysl.setTheme(colors.get((int) Math.round(prumer)));
|
||||||
|
|
||||||
@ -155,7 +151,7 @@ public class Znamky extends JecnaContent {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showOptions(WindowBasedTextGUI textGUI) throws IOException {
|
public void showOptions(WindowBasedTextGUI textGUI) throws IOException {
|
||||||
OptionsDialog d = new OptionsDialog(znamky.getOptions().getValue0(), znamky.getOptions().getValue1());
|
OptionsDialog d = new OptionsDialog(znamky.getOptions());
|
||||||
|
|
||||||
Choice c = d.showDialog(textGUI);
|
Choice c = d.showDialog(textGUI);
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ public class OptionsDialog extends DialogWindow {
|
|||||||
|
|
||||||
private boolean useData = false;
|
private boolean useData = false;
|
||||||
|
|
||||||
public OptionsDialog(Options... options)
|
public OptionsDialog(Options[] options)
|
||||||
{
|
{
|
||||||
super("Choose from below");
|
super("Choose from below");
|
||||||
|
|
||||||
|
@ -52,15 +52,14 @@ public class MainWindow {
|
|||||||
|
|
||||||
window.setComponent(mainPanel);
|
window.setComponent(mainPanel);
|
||||||
|
|
||||||
String title = "Jecnak";
|
|
||||||
|
|
||||||
Panel content = new Panel();
|
Panel content = new Panel();
|
||||||
mainPanel.addComponent(content.withBorder(Borders.singleLine(title)));
|
mainPanel.addComponent(content.withBorder(Borders.singleLine("Jecnak")));
|
||||||
|
|
||||||
LoginController controller = new LoginController(textGUI);
|
LoginController controller = new LoginController(textGUI);
|
||||||
controller.login();
|
controller.login();
|
||||||
|
|
||||||
window.addWindowListener(new WindowSwitchListener(content, title, textGUI));
|
window.addWindowListener(new WindowSwitchListener(content, textGUI));
|
||||||
|
|
||||||
textGUI.addWindowAndWait(window);
|
textGUI.addWindowAndWait(window);
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package xyz.thastertyn.UserInterface;
|
package xyz.thastertyn.UserInterface;
|
||||||
|
|
||||||
public interface UpdateListener {
|
public interface UpdateListener {
|
||||||
|
/**
|
||||||
|
* Redraw the screen when panel changes due to Choice being used
|
||||||
|
*/
|
||||||
public void updatePanel();
|
public void updatePanel();
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ public class WindowSwitchListener implements WindowListener, UpdateListener {
|
|||||||
|
|
||||||
int current = contents.length - 1;
|
int current = contents.length - 1;
|
||||||
|
|
||||||
public WindowSwitchListener(Panel holder, String title, WindowBasedTextGUI textGUI)
|
public WindowSwitchListener(Panel holder, WindowBasedTextGUI textGUI)
|
||||||
{
|
{
|
||||||
this.textGUI = textGUI;
|
this.textGUI = textGUI;
|
||||||
holder.addComponent(tabsPanel);
|
holder.addComponent(tabsPanel);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user