/*
* MediathekView
* Copyright (C) 2008 W. Xaver
* W.Xaver[at]googlemail.com
* http://zdfmediathk.sourceforge.net/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package mediathek.tool;
import com.jidesoft.utils.SystemInfo;
import mSearch.tool.Functions.OperatingSystemType;
import mSearch.tool.Log;
import mediathek.MediathekGui;
import mediathek.config.Konstanten;
import mediathek.config.MVConfig;
import mediathek.config.MVConfig.Configs;
import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.io.File;
import java.lang.reflect.Field;
import static mSearch.tool.Functions.getOs;
public class GuiFunktionen extends MVFunctionSys {
public static void updateGui(MediathekGui mediathekGui) {
try {
SwingUtilities.updateComponentTreeUI(mediathekGui);
for (Frame f : Frame.getFrames()) {
SwingUtilities.updateComponentTreeUI(f);
for (Window w : f.getOwnedWindows()) {
SwingUtilities.updateComponentTreeUI(w);
}
}
} catch (Exception ignored) {
}
}
public static void copyToClipboard(String s) {
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(s), null);
}
/**
* Center a component (e.g. Dialog) on screen
*
* @param c The reference component
* @param absolute if true, use absolute position, otherwise relative
*/
public static void centerOnScreen(final Component c, final boolean absolute) {
final int width = c.getWidth();
final int height = c.getHeight();
final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int x = (screenSize.width / 2) - (width / 2);
int y = (screenSize.height / 2) - (height / 2);
if (!absolute) {
x /= 2;
y /= 2;
}
c.setLocation(x, y);
}
public static void getSize(Configs nr, JFrame jFrame) {
if (jFrame != null) {
MVConfig.add(nr, jFrame.getSize().width + ":"
+ jFrame.getSize().height + ':'
+ jFrame.getLocation().x + ':'
+ jFrame.getLocation().y);
}
}
public static void getSize(Configs nr, JDialog jDialog) {
if (jDialog != null) {
MVConfig.add(nr, jDialog.getSize().width + ":"
+ jDialog.getSize().height + ':'
+ jDialog.getLocation().x + ':'
+ jDialog.getLocation().y);
}
}
public static void setSize(Configs nr, JFrame jFrame, JFrame relativFrame) {
int breite, hoehe, posX, posY;
breite = 0;
hoehe = 0;
posX = 0;
posY = 0;
String[] arr = MVConfig.get(nr).split(":");
try {
if (arr.length == 4) {
breite = Integer.parseInt(arr[0]);
hoehe = Integer.parseInt(arr[1]);
posX = Integer.parseInt(arr[2]);
posY = Integer.parseInt(arr[3]);
}
} catch (Exception ex) {
breite = 0;
hoehe = 0;
posX = 0;
posY = 0;
}
if (breite > 0 && hoehe > 0) {
jFrame.setSize(new Dimension(breite, hoehe));
}
if (posX > 0 && posY > 0) {
jFrame.setLocation(posX, posY);
} else if (relativFrame != null) {
jFrame.setLocationRelativeTo(relativFrame);
}
}
public static boolean setSize(Configs nr, JDialog jDialog, JFrame relativFrame) {
boolean ret = false;
int breite, hoehe, posX, posY;
breite = 0;
hoehe = 0;
posX = 0;
posY = 0;
String[] arr = MVConfig.get(nr).split(":");
try {
if (arr.length == 4) {
breite = Integer.parseInt(arr[0]);
hoehe = Integer.parseInt(arr[1]);
posX = Integer.parseInt(arr[2]);
posY = Integer.parseInt(arr[3]);
}
} catch (Exception ex) {
breite = 0;
hoehe = 0;
posX = 0;
posY = 0;
}
if (breite > 0 && hoehe > 0) {
jDialog.setSize(new Dimension(breite, hoehe));
ret = true;
}
if (posX > 0 && posY > 0) {
jDialog.setLocation(posX, posY);
} else if (relativFrame != null) {
jDialog.setLocationRelativeTo(relativFrame);
}
return ret;
}
public static String addsPfad(String pfad1, String pfad2) {
String ret = concatPaths(pfad1, pfad2);
if (ret.isEmpty()) {
Log.errorLog(283946015, pfad1 + " - " + pfad2);
}
return ret;
}
public static String concatPaths(String pfad1, String pfad2) {
String ret;
if (pfad1 == null || pfad2 == null) {
return "";
}
if (pfad1.isEmpty() || pfad2.isEmpty()) {
return pfad1 + pfad2;
}
if (pfad1.endsWith(File.separator)) {
ret = pfad1.substring(0, pfad1.length() - 1);
} else {
ret = pfad1;
}
if (pfad2.charAt(0) == File.separatorChar) {
ret += pfad2;
} else {
ret += File.separator + pfad2;
}
return ret;
}
private final static int WIN_MAX_PATH_LENGTH = 250;
private final static int X_MAX_NAME_LENGTH = 255;
public static String[] checkLengthPath(String[] pathName) {
if (SystemInfo.isWindows()) {
// in Win dürfen die Pfade nicht länger als 260 Zeichen haben (für die Infodatei kommen noch ".txt" dazu)
if ((pathName[0].length() + 10) > WIN_MAX_PATH_LENGTH) {
// es sollen für den Dateinamen mind. 10 Zeichen bleiben
Log.errorLog(102036598, "Pfad zu lang: " + pathName[0]);
pathName[0] = GuiFunktionen.getHomePath();
}
if ((pathName[0].length() + pathName[1].length()) > WIN_MAX_PATH_LENGTH) {
Log.errorLog(902367369, "Name zu lang: " + pathName[0]);
int maxNameL = WIN_MAX_PATH_LENGTH - pathName[0].length();
pathName[1] = cutName(pathName[1], maxNameL);
}
} else // für X-Systeme
if ((pathName[1].length()) > X_MAX_NAME_LENGTH) {
Log.errorLog(823012012, "Name zu lang: " + pathName[1]);
pathName[1] = cutName(pathName[1], X_MAX_NAME_LENGTH);
}
return pathName;
}
public static String cutName(String name, int length) {
if (name.length() > length) {
name = name.substring(0, length - 4) + name.substring(name.length() - 4);
}
return name;
}
public static boolean istUrl(String dateiUrl) {
//return dateiUrl.startsWith("http") ? true : false || dateiUrl.startsWith("www") ? true : false;
return dateiUrl.startsWith("http") || dateiUrl.startsWith("www");
}
public static String getDateiName(String pfad) {
//Dateinamen einer URL extrahieren
String ret = "";
if (pfad != null) {
if (!pfad.isEmpty()) {
ret = pfad.substring(pfad.lastIndexOf('/') + 1);
}
}
if (ret.contains("?")) {
ret = ret.substring(0, ret.indexOf('?'));
}
if (ret.contains("&")) {
ret = ret.substring(0, ret.indexOf('&'));
}
if (ret.isEmpty()) {
Log.errorLog(395019631, pfad);
}
return ret;
}
public static String getHash(String pfad) {
//Hash eines Dateinamens zB. 1433245578
int h = pfad.hashCode(); // kann auch negativ sein
h = Math.abs(h);
String hh = h + "";
while (hh.length() < 10) {
hh = '0' + hh;
}
return hh;
}
public static String getSuffixFromUrl(String pfad) {
// Suffix einer URL extrahieren
// "http://ios-ondemand.swr.de/i/swr-fernsehen/bw-extra/20130202/601676.,m,s,l,.mp4.csmil/index_2_av.m3u8?e=b471643725c47acd"
String ret = "";
if (pfad != null) {
if (!pfad.isEmpty() && pfad.contains(".")) {
ret = pfad.substring(pfad.lastIndexOf('.') + 1);
}
}
if (ret.isEmpty()) {
Log.errorLog(969871236, pfad);
}
if (ret.contains("?")) {
ret = ret.substring(0, ret.indexOf('?'));
}
if (ret.length() > 5) {
// dann ist was faul
ret = "---";
Log.errorLog(821397046, pfad);
}
return ret;
}
public static String getFileNameWithoutSuffix(String pfad) {
// Suffix einer URL extrahieren
// "http://ios-ondemand.swr.de/i/swr-fernsehen/bw-extra/20130202/601676.,m,s,l,.mp4.csmil/index_2_av.m3u8?e=b471643725c47acd"
// FILENAME.SUFF
String ret = "";
if (pfad != null) {
if (!pfad.isEmpty() && pfad.contains(".")) {
ret = pfad.substring(0, pfad.lastIndexOf('.'));
}
}
if (ret.isEmpty()) {
ret = pfad;
Log.errorLog(945123647, pfad);
}
return ret;
}
public static String getFileNameSuffix(String pfad) {
// Suffix einer Pfad/Dateinamen extrahieren
// FILENAME.SUFF
String ret = "";
if (pfad != null) {
if (!pfad.isEmpty() && pfad.contains(".")) {
ret = pfad.substring(pfad.lastIndexOf('.') + 1);
}
}
if (ret.isEmpty()) {
ret = pfad;
Log.errorLog(802103647, pfad);
}
return ret;
}
/**
* Return the path to the user´s home directory.
*
* @return String to the user´s home directory.
*/
public static String getHomePath() {
return System.getProperty("user.home");
}
/**
* Liefert den Standardpfad für Downloads.
*
* @return Standardpfad zu den Downloads.
*/
public static String getStandardDownloadPath() {
if (getOs() == OperatingSystemType.MAC) {
return addsPfad(getHomePath(), "Downloads");
} else {
return addsPfad(getHomePath(), Konstanten.VERZEICHNIS_DOWNLOADS);
}
}
public static String[] addLeerListe(String[] str) {
//ein Leerzeichen der Liste voranstellen
int len = str.length + 1;
String[] liste = new String[len];
liste[0] = "";
System.arraycopy(str, 0, liste, 1, len - 1);
return liste;
}
public static int getImportArtFilme() {
int ret;
try {
ret = Integer.parseInt(MVConfig.get(MVConfig.Configs.SYSTEM_IMPORT_ART_FILME));
} catch (Exception ex) {
MVConfig.add(MVConfig.Configs.SYSTEM_IMPORT_ART_FILME, String.valueOf(Konstanten.UPDATE_FILME_AUTO));
ret = Konstanten.UPDATE_FILME_AUTO;
}
return ret;
}
public static void setParent(Dialog dialog, Container aParent) {
try {
dialog.dispose();
Field declaredField = Component.class.getDeclaredField("parent");
declaredField.setAccessible(true);
declaredField.set(dialog, aParent);
dialog.setVisible(true);
} catch (Throwable t) {
t.printStackTrace();
}
}
public static void setDialogDecorated(Dialog dialog, JComponent panel, boolean set) {
boolean vis = dialog.isVisible();
dialog.dispose();
if (set) {
dialog.setUndecorated(false);
panel.setBorder(null);
} else {
dialog.setUndecorated(true);
panel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(102, 102, 102), 2));
}
dialog.setVisible(vis);
}
public static void enableComponents(Container container, boolean enable) {
Component[] components = container.getComponents();
for (Component component : components) {
component.setEnabled(enable);
if (component instanceof Container) {
enableComponents((Container) component, enable);
}
}
}
}