package org.geogebra.desktop.main;
import java.awt.Font;
import java.util.Locale;
import javax.swing.SwingUtilities;
import org.geogebra.common.GeoGebraConstants.Versions;
import org.geogebra.common.awt.GFont;
import org.geogebra.common.awt.MyImage;
import org.geogebra.common.euclidian.DrawEquation;
import org.geogebra.common.euclidian.EuclidianController;
import org.geogebra.common.euclidian.EuclidianView;
import org.geogebra.common.euclidian3D.EuclidianView3DInterface;
import org.geogebra.common.factories.AwtFactory;
import org.geogebra.common.factories.CASFactory;
import org.geogebra.common.factories.Factory;
import org.geogebra.common.factories.FormatFactory;
import org.geogebra.common.factories.LaTeXFactory;
import org.geogebra.common.factories.UtilFactory;
import org.geogebra.common.geogebra3D.kernel3D.GeoFactory3D;
import org.geogebra.common.geogebra3D.kernel3D.Kernel3D;
//import org.geogebra.common.geogebra3D.kernel3D.Kernel3D;
import org.geogebra.common.gui.Layout;
import org.geogebra.common.gui.view.algebra.AlgebraView;
import org.geogebra.common.io.MyXMLio;
import org.geogebra.common.jre.factory.FormatFactoryJre;
import org.geogebra.common.jre.plugin.GgbAPIJre;
import org.geogebra.common.kernel.Construction;
import org.geogebra.common.kernel.Kernel;
import org.geogebra.common.kernel.UndoManager;
import org.geogebra.common.kernel.commands.CommandDispatcher;
import org.geogebra.common.kernel.geos.GeoElement;
import org.geogebra.common.kernel.geos.GeoElementGraphicsAdapter;
import org.geogebra.common.main.AlgoCubicSwitchInterface;
import org.geogebra.common.main.AlgoCubicSwitchParams;
import org.geogebra.common.main.AlgoKimberlingWeightsInterface;
import org.geogebra.common.main.AlgoKimberlingWeightsParams;
import org.geogebra.common.main.App;
import org.geogebra.common.main.AppCompanion;
import org.geogebra.common.main.DialogManager;
import org.geogebra.common.main.FontManager;
import org.geogebra.common.main.GlobalKeyDispatcher;
import org.geogebra.common.main.GuiManagerInterface;
import org.geogebra.common.main.Localization;
import org.geogebra.common.main.MyError;
import org.geogebra.common.main.SpreadsheetTableModel;
import org.geogebra.common.plugin.GgbAPI;
import org.geogebra.common.plugin.ScriptManager;
import org.geogebra.common.plugin.SensorLogger;
import org.geogebra.common.sound.SoundManager;
import org.geogebra.common.util.GTimer;
import org.geogebra.common.util.GTimerListener;
import org.geogebra.common.util.ImageManager;
import org.geogebra.common.util.NormalizerMinimal;
import org.geogebra.common.util.StringUtil;
import org.geogebra.common.util.debug.Log;
import org.geogebra.desktop.awt.GFontD;
import org.geogebra.desktop.euclidian.DrawEquationD;
import org.geogebra.desktop.factories.AwtFactoryD;
import org.geogebra.desktop.factories.CASFactoryD;
import org.geogebra.desktop.factories.LaTeXFactoryD;
import org.geogebra.desktop.factories.UtilFactoryD;
import org.geogebra.desktop.geogebra3D.App3DCompanionD;
import org.geogebra.desktop.io.MyXMLioD;
import org.geogebra.desktop.kernel.UndoManagerD;
import org.geogebra.desktop.kernel.geos.GeoElementGraphicsAdapterD;
import org.geogebra.desktop.move.ggtapi.models.LoginOperationD;
import org.geogebra.desktop.plugin.ScriptManagerD;
import org.geogebra.desktop.plugin.UDPLoggerD;
import org.geogebra.desktop.util.GTimerD;
import org.geogebra.desktop.util.LoggerD;
import org.geogebra.desktop.util.Normalizer;
import org.geogebra.desktop.util.StringUtilD;
/**
* App for testing: does not use Swing
*
* @author Zbynek
*
*/
public class AppDNoGui extends App {
private GgbAPI ggbapi;
private LocalizationD loc;
private SpreadsheetTableModelD tableModel;
private DrawEquationD drawEquation;
/**
* @param loc
* localization
* @param silent
* whether to mute logging
*/
public AppDNoGui(LocalizationD loc, boolean silent) {
super(Versions.DESKTOP);
if (!silent) {
Log.setLogger(new LoggerD());
}
prerelease = true;
initFactories();
this.kernel = new Kernel3D(this, new GeoFactory3D());
settings = companion.newSettings();
this.loc = loc;
loc.setLocale(Locale.US);
loc.setApp(this);
Layout.initializeDefaultPerspectives(this, 0.2);
initEuclidianViews();
loginOperation = new LoginOperationD();
kernel.attach(euclidianView);
}
@Override
protected AppCompanion newAppCompanion() {
return new App3DCompanionD(this);
}
/**
* init factories
*/
protected void initFactories() {
if (AwtFactory.getPrototype() == null) {
AwtFactory.setPrototypeIfNull(new AwtFactoryD());
}
if (FormatFactory.getPrototype() == null) {
FormatFactory.setPrototypeIfNull(new FormatFactoryJre());
}
if (LaTeXFactory.getPrototype() == null) {
LaTeXFactory.setPrototypeIfNull(new LaTeXFactoryD());
}
if (UtilFactory.getPrototype() == null) {
UtilFactory.setPrototypeIfNull(new UtilFactoryD());
}
if (StringUtil.getPrototype() == null) {
StringUtil.setPrototypeIfNull(new StringUtilD());
}
}
@Override
public boolean isApplet() {
return false;
}
@Override
public void storeUndoInfo() {
// TODO Auto-generated method stub
}
@Override
public void storeUndoInfoAndStateForModeStarting() {
// TODO Auto-generated method stub
}
@Override
public boolean isUsingFullGui() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean showView(int view) {
// TODO Auto-generated method stub
return false;
}
@Override
public void showError(String s) {
// TODO Auto-generated method stub
}
@Override
protected void showErrorDialog(String s) {
// TODO Auto-generated method stub
}
@Override
protected ScriptManager newScriptManager() {
return new ScriptManagerD(this);
}
@Override
public boolean freeMemoryIsCritical() {
// TODO Auto-generated method stub
return false;
}
@Override
public long freeMemory() {
// TODO Auto-generated method stub
return 0;
}
@Override
public AlgebraView getAlgebraView() {
// TODO Auto-generated method stub
return null;
}
@Override
public EuclidianView getActiveEuclidianView() {
return euclidianView;
}
@Override
public boolean hasEuclidianView2EitherShowingOrNot(int idx) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isShowingEuclidianView2(int idx) {
// TODO Auto-generated method stub
return false;
}
@Override
public ImageManager getImageManager() {
// TODO Auto-generated method stub
return null;
}
@Override
public GuiManagerInterface getGuiManager() {
// TODO Auto-generated method stub
return null;
}
@Override
public DialogManager getDialogManager() {
// TODO Auto-generated method stub
return null;
}
@Override
protected void initGuiManager() {
// TODO Auto-generated method stub
}
@Override
public void evalJavaScript(App app, String script, String arg)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public EuclidianView createEuclidianView() {
// TODO Auto-generated method stub
return null;
}
@Override
public MyImage getExternalImageAdapter(String filename, int width,
int height) {
// TODO Auto-generated method stub
return null;
}
@Override
public void setActiveView(int evID) {
// TODO Auto-generated method stub
}
@Override
public void showError(String string, String str) {
// TODO Auto-generated method stub
}
@Override
public void resetUniqueId() {
// TODO Auto-generated method stub
}
@Override
public DrawEquation getDrawEquation() {
if (drawEquation == null) {
drawEquation = new DrawEquationD();
}
return drawEquation;
}
@Override
public double getWidth() {
// TODO Auto-generated method stub
return 0;
}
@Override
public double getHeight() {
// TODO Auto-generated method stub
return 0;
}
@Override
public GFont getPlainFontCommon() {
return new GFontD(new Font("sans", Font.PLAIN, 12));
}
@Override
protected EuclidianView newEuclidianView(boolean[] showAxes1,
boolean showGrid1) {
return new EuclidianViewNoGui(getEuclidianController(), 1,
this.getSettings().getEuclidian(1));
}
@Override
public EuclidianController newEuclidianController(Kernel kernel1) {
return new EuclidianControllerNoGui(this, kernel1);
}
@Override
public UndoManager getUndoManager(Construction cons) {
return new UndoManagerD(cons);
}
@Override
public GeoElementGraphicsAdapter newGeoElementGraphicsAdapter() {
return new GeoElementGraphicsAdapterD(this);
}
@Override
public void setWaitCursor() {
// TODO Auto-generated method stub
}
@Override
public void updateStyleBars() {
// TODO Auto-generated method stub
}
@Override
public void updateDynamicStyleBars() {
// not implemented here
}
@Override
public void set1rstMode() {
// TODO Auto-generated method stub
}
@Override
public SpreadsheetTableModel getSpreadsheetTableModel() {
if (tableModel == null) {
tableModel = new SpreadsheetTableModelD(this, SPREADSHEET_INI_ROWS,
SPREADSHEET_INI_COLS);
}
return tableModel;
}
@Override
public void setXML(String xml, boolean clearAll) {
if (xml == null) {
return;
}
if (clearAll) {
setCurrentFile(null);
}
try {
// make sure objects are displayed in the correct View
setActiveView(App.VIEW_EUCLIDIAN);
getXMLio().processXMLString(xml, clearAll, false);
} catch (MyError err) {
err.printStackTrace();
showError(err);
} catch (Exception e) {
e.printStackTrace();
showError("LoadFileFailed");
}
}
@Override
public GgbAPI getGgbApi() {
if (ggbapi == null) {
ggbapi = new GgbAPIJre(this) {
@Override
public byte[] getGGBfile() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setErrorDialogsActive(boolean flag) {
// TODO Auto-generated method stub
}
@Override
public void refreshViews() {
// TODO Auto-generated method stub
}
@Override
public void openFile(String strURL) {
// TODO Auto-generated method stub
}
@Override
public boolean writePNGtoFile(String filename,
double exportScale, boolean transparent, double DPI) {
// TODO Auto-generated method stub
return false;
}
@Override
protected void exportPNGClipboard(boolean transparent, int DPI,
double exportScale, EuclidianView ev) {
// TODO Auto-generated method stub
}
@Override
protected void exportPNGClipboardDPIisNaN(boolean transparent,
double exportScale, EuclidianView ev) {
// TODO Auto-generated method stub
}
@Override
protected String base64encodePNG(boolean transparent,
double DPI, double exportScale, EuclidianView ev) {
// TODO Auto-generated method stub
return null;
}
};
}
return ggbapi;
}
@Override
public SoundManager getSoundManager() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean showAlgebraInput() {
// TODO Auto-generated method stub
return false;
}
@Override
public GlobalKeyDispatcher getGlobalKeyDispatcher() {
// TODO Auto-generated method stub
return null;
}
@Override
public void callAppletJavaScript(String string, Object[] args) {
// TODO Auto-generated method stub
}
@Override
public void updateMenubar() {
// TODO Auto-generated method stub
}
@Override
public void updateUI() {
// TODO Auto-generated method stub
}
@Override
protected FontManager getFontManager() {
// TODO Auto-generated method stub
return new FontManagerNoGui();
}
@Override
protected int getWindowWidth() {
return 800;
}
@Override
protected int getWindowHeight() {
return 600;
}
@Override
protected void getLayoutXML(StringBuilder sb, boolean asPreference) {
// TODO Auto-generated method stub
}
@Override
public void reset() {
// TODO Auto-generated method stub
}
@Override
public boolean isHTML5Applet() {
// TODO Auto-generated method stub
return false;
}
@Override
public void showURLinBrowser(String string) {
// TODO Auto-generated method stub
}
@Override
public void uploadToGeoGebraTube() {
// TODO Auto-generated method stub
}
@Override
public void updateApplicationLayout() {
// TODO Auto-generated method stub
}
@Override
public boolean clearConstruction() {
// TODO Auto-generated method stub
return false;
}
@Override
public void fileNew() {
// TODO Auto-generated method stub
}
@Override
public boolean loadXML(String xml) throws Exception {
// TODO Auto-generated method stub
return false;
}
@Override
public void copyGraphicsViewToClipboard() {
// TODO Auto-generated method stub
}
@Override
public void copyBase64ToClipboard() {
// TODO Auto-generated method stub
}
@Override
public void copyFullHTML5ExportToClipboard() {
// TODO Auto-generated method stub
}
@Override
public void exitAll() {
// TODO Auto-generated method stub
}
@Override
public NormalizerMinimal getNormalizer() {
return Normalizer.getInstance();
}
@Override
public void runScripts(GeoElement geo1, String string) {
// TODO Auto-generated method stub
}
@Override
public CASFactory getCASFactory() {
return new CASFactoryD();
}
@Override
public Factory getFactory() {
// TODO Auto-generated method stub
return null;
}
@Override
public MyXMLio createXMLio(Construction cons) {
return new MyXMLioD(cons.getKernel(), cons);
}
@Override
public Localization getLocalization() {
return loc;
}
@Override
public double getMillisecondTime() {
// TODO Auto-generated method stub
return 0;
}
@Override
public AlgoKimberlingWeightsInterface getAlgoKimberlingWeights() {
// TODO Auto-generated method stub
return null;
}
@Override
public double kimberlingWeight(AlgoKimberlingWeightsParams kw) {
// TODO Auto-generated method stub
return 0;
}
@Override
public AlgoCubicSwitchInterface getAlgoCubicSwitch() {
// TODO Auto-generated method stub
return null;
}
@Override
public String cubicSwitch(AlgoCubicSwitchParams kw) {
// TODO Auto-generated method stub
return null;
}
@Override
public CommandDispatcher getCommandDispatcher(Kernel k) {
return new CommandDispatcher(k) {
// abstract for some reason ...
};
}
@Override
public void showCustomizeToolbarGUI() {
// TODO Auto-generated method stub
}
@Override
public boolean isSelectionRectangleAllowed() {
// TODO Auto-generated method stub
return false;
}
@Override
public void closePopups() {
// TODO Auto-generated method stub
}
@Override
public GTimer newTimer(GTimerListener listener, int delay) {
return new GTimerD(listener, delay);
}
@Override
public void setCurrentFile(Object file) {
// TODO Auto-generated method stub
}
/**
* @param locale
* locale
*/
public void setLanguage(Locale locale) {
if ((locale == null)
|| loc.getLocale().toString().equals(locale.toString())) {
return;
}
if (!initing) {
setMoveMode();
}
// load resource files
setLocale(locale);
// update right angle style in euclidian view (different for German)
// if (euclidianView != null)
// euclidianView.updateRightAngleStyle(locale);
// make sure digits are updated in all numbers
getKernel().updateConstruction();
setUnsaved();
// setLabels(); // update display
// setOrientation();
}
// public static char unicodeThousandsSeparator = ','; // \u066c for Arabic
private SensorLogger udpLogger;
/**
* @param locale
* locale
*/
public void setLocale(Locale locale) {
if (locale == loc.getLocale()) {
return;
}
// Locale oldLocale = loc.getLocale();
// only allow special locales due to some weird server
// problems with the naming of the property files
loc.setLocale(locale);
// update font for new language (needed for e.g. chinese)
// try {
// fontManager.setLanguage(loc.getLocale());
// } catch (Exception e) {
// e.printStackTrace();
// showError(e.getMessage());
//
// // go back to previous locale
// loc.setLocale(oldLocale);
// }
getLocalization().updateLanguageFlags(locale.getLanguage());
}
@Override
public SensorLogger getSensorLogger() {
if (udpLogger == null) {
udpLogger = new UDPLoggerD(getKernel());
}
return udpLogger;
}
@Override
public EuclidianView3DInterface getEuclidianView3D() {
return new EuclidianView3DNoGui(
new EuclidianController3DNoGui(this, kernel),
this.getSettings().getEuclidian(3));
}
@Override
public void invokeLater(Runnable runnable) {
SwingUtilities.invokeLater(runnable);
}
public boolean is3D() {
return true;
}
}