]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - eclipse/org.argeo.cms.swt/src/org/argeo/cms/swt/CmsSwtUtils.java
Refactor to use ACR instead of JCR.
[lgpl/argeo-commons.git] / eclipse / org.argeo.cms.swt / src / org / argeo / cms / swt / CmsSwtUtils.java
index 701de2827f1f68f064220b6d2decc486c7d1e956..784d03173bce51ec53285c39f1a1c87defc9490f 100644 (file)
@@ -1,7 +1,10 @@
 package org.argeo.cms.swt;
 
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.StringTokenizer;
 
 import org.argeo.api.cms.CmsStyle;
 import org.argeo.api.cms.CmsTheme;
@@ -11,6 +14,7 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.FormAttachment;
 import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.layout.RowData;
@@ -19,6 +23,7 @@ import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Layout;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.Widget;
@@ -99,6 +104,23 @@ public class CmsSwtUtils {
                sendEventOnSelect(control, topic, properties);
        }
 
+       /*
+        * LAYOUT INDEPENDENT
+        */
+       /** Takes the most space possible, depending on parent layout. */
+       public static void fill(Control control) {
+               Layout parentLayout = control.getParent().getLayout();
+               if (parentLayout == null)
+                       throw new IllegalStateException("Parent layout is not set");
+               if (parentLayout instanceof GridLayout) {
+                       control.setLayoutData(fillAll());
+               } else if (parentLayout instanceof FormLayout) {
+                       control.setLayoutData(coverAll());
+               } else {
+                       throw new IllegalArgumentException("Unsupported parent layout  " + parentLayout.getClass().getName());
+               }
+       }
+
        /*
         * GRID LAYOUT
         */
@@ -253,4 +275,18 @@ public class CmsSwtUtils {
                for (Control child : composite.getChildren())
                        child.dispose();
        }
+
+       /** Clean reserved URL characters for use in HTTP links. */
+       public static String cleanPathForUrl(String path) {
+               StringTokenizer st = new StringTokenizer(path, "/");
+               StringBuilder sb = new StringBuilder();
+               while (st.hasMoreElements()) {
+                       sb.append('/');
+                       String encoded = URLEncoder.encode(st.nextToken(), StandardCharsets.UTF_8);
+                       encoded = encoded.replace("+", "%20");
+                       sb.append(encoded);
+       
+               }
+               return sb.toString();
+       }
 }