import com.itmill.toolkit.terminal.URIHandler;
import com.itmill.toolkit.terminal.Paintable.RepaintRequestEvent;
import com.itmill.toolkit.terminal.web.ThemeSource.ThemeException;
+import com.itmill.toolkit.terminal.Terminal;
+import com.itmill.toolkit.terminal.web.WebBrowser;
import com.itmill.toolkit.ui.Window;
/**
// Check/handle client side feature checks
WebBrowserProbe
.handleProbeRequest(request, unhandledParameters);
+
+ // If rendering mode is not defined try to detect it
+ WebBrowser wb = WebBrowserProbe.getTerminalType(request.getSession());
+ if(wb.getRenderingMode() == WebBrowser.RENDERING_MODE_UNDEFINED) {
+ String themeName = application.getTheme();
+ if (unhandledParameters.get("theme") != null) {
+ themeName = (String) ((Object[]) unhandledParameters
+ .get("theme"))[0];
+ }
+ Theme theme = themeSource.getThemeByName(themeName);
+
+ String renderingMode = theme.getPreferredMode(wb,
+ themeSource);
+ if (unhandledParameters.get("renderingMode") != null)
+ renderingMode = (String) ((Object[]) unhandledParameters
+ .get("renderingMode"))[0];
+ if (Theme.MODE_AJAX.equals(renderingMode)) {
+ wb.setRenderingMode(WebBrowser.RENDERING_MODE_AJAX);
+ } else {
+ wb.setRenderingMode(WebBrowser.RENDERING_MODE_HTML);
+ }
+ }
// Handle the URI if the application is still running
if (application.isRunning())
// Set terminal type for the window, if not already set
if (terminalType == null) {
- terminalType = WebBrowserProbe.getTerminalType(request
- .getSession());
- window.setTerminal(terminalType);
+ window.setTerminal(terminalType = wb);
}
// Find theme
throw new ServletException("Theme (named '"
+ themeName + "') can not be found");
- // If ajax rendering mode is preferred, a page for it is
- // rendered
- String renderingMode = theme.getPreferredMode(terminalType,
- themeSource);
- if (unhandledParameters.get("renderingMode") != null)
- renderingMode = (String) ((Object[]) unhandledParameters
- .get("renderingMode"))[0];
- if (Theme.MODE_AJAX.equals(renderingMode)
- && !(window instanceof DebugWindow)) {
+ // If in ajax rendering mode, print an html page for it
+ if(terminalType.getRenderingMode() == WebBrowser.RENDERING_MODE_AJAX) {
writeAjaxPage(request, response, out, unhandledParameters, window, terminalType, theme);
return;
}
+
+ String renderingMode = theme.getPreferredMode(terminalType,
+ themeSource);
// If other than html or ajax mode is requested
if (!Theme.MODE_HTML.equals(renderingMode)
// Create and open new debug window for application if requested
Window debugWindow = application.getWindow(DebugWindow.WINDOW_NAME);
if (debugWindow == null) {
- if (isDebugMode(params) && !request.getPathInfo().startsWith(AJAX_UIDL_URI))
+ if (isDebugMode(params) &&
+ WebBrowserProbe.getTerminalType(request.getSession()).getRenderingMode()
+ != WebBrowser.RENDERING_MODE_AJAX ) {
try {
debugWindow = new DebugWindow(application, request
.getSession(false), this);
throw new ServletException(
"Failed to create debug window for application", e);
}
+ }
} else if (window != debugWindow) {
if (isDebugMode(params))
debugWindow.requestRepaint();
/** Pixel height of the terminal screen */
private int screenHeight = -1;
+
+ private RenderingMode renderingMode = RENDERING_MODE_UNDEFINED;
/** Constuctor with some autorecognition capabilities
* Retrieves all capability information reported in http request headers:
JSCRIPT_5_6,
JSCRIPT_5_7,
ECMA_262 };
+
+ /*
+ * Consts defining the rendering mode
+ * @author IT Mill Ltd.
+ * @version @VERSION@
+ * @since 4.0
+ */
+ public class RenderingMode {
+ RenderingMode() {
+
+ }
+ }
+ public static final RenderingMode RENDERING_MODE_UNDEFINED = DEFAULT.new RenderingMode();
+ public static final RenderingMode RENDERING_MODE_HTML = DEFAULT.new RenderingMode();
+ public static final RenderingMode RENDERING_MODE_AJAX = DEFAULT.new RenderingMode();
+
+ /**
+ * Gets current rendering mode
+ * @return current rendering mode
+ */
+ public RenderingMode getRenderingMode() {
+ return renderingMode;
+ }
+
+ /**
+ * Sets current rendering mode
+ * @param renderingMode
+ */
+ public void setRenderingMode(RenderingMode renderingMode) {
+ this.renderingMode = renderingMode;
+ }
+
+
}