diff --git a/designer-base/src/main/java/com/fr/design/DesignModelAdapter.java b/designer-base/src/main/java/com/fr/design/DesignModelAdapter.java index e5930ee91..7a237ffb5 100644 --- a/designer-base/src/main/java/com/fr/design/DesignModelAdapter.java +++ b/designer-base/src/main/java/com/fr/design/DesignModelAdapter.java @@ -21,6 +21,8 @@ import com.fr.stable.StringUtils; import com.fr.stable.js.WidgetName; import com.fr.util.ParameterApplyHelper; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -281,6 +283,12 @@ public abstract class DesignModelAdapter map, Filter filter) { + + // 处理初始化添加 + if (tableDataParametersMap.isEmpty()) { + addTableDataParameters(map, filter); + return; + } ParameterProvider[] providers = null; @@ -303,13 +311,13 @@ public abstract class DesignModelAdapter map, ParameterProvider[] parameterProviders, Filter filter) { + if (filter != null) { + ParameterApplyHelper.addPara2Map(map, parameterProviders, filter); + } else { + ParameterApplyHelper.addPara2Map(map, parameterProviders); + } + } + + public void removeTableDataParameters(String tdName) { + ParameterProvider[] tableDataParameters = tableDataParametersMap.remove(tdName); + List allParameterList = new ArrayList<>(Arrays.asList(parameters)); + List tableDataParameterList = new ArrayList<>(); + for (ParameterProvider parameterProvider : tableDataParameters) { + tableDataParameterList.add((Parameter) parameterProvider); + } + allParameterList.removeAll(tableDataParameterList); + parameters = allParameterList.toArray(new Parameter[0]); + } + + + public void updateAllParameters() { + parameters = getLatestParameters(); + } + protected void addGlobalParameters(Map map) { // 添加全局参数 Parameter[] glbParas = ParameterConfig.getInstance().getGlobalParameters(); diff --git a/designer-base/src/main/java/com/fr/design/actions/TableDataSourceAction.java b/designer-base/src/main/java/com/fr/design/actions/TableDataSourceAction.java index 2903b12a1..8a6e7a7df 100644 --- a/designer-base/src/main/java/com/fr/design/actions/TableDataSourceAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/TableDataSourceAction.java @@ -60,6 +60,7 @@ public class TableDataSourceAction extends TemplateComponentAction> actionClasses = new LinkedHashSet<>(); - private static LinkedHashSet> floatActionClasses = new LinkedHashSet<>(); + private static Set> actionClasses = new CopyOnWriteArraySet<>(); + private static Set> floatActionClasses = new CopyOnWriteArraySet<>(); private static Class chartCollectionClass = null; /** * 无需每次实例化的悬浮元素编辑器 @@ -256,14 +258,14 @@ public class ActionFactory { */ public static void registerCellInsertActionClass(Class[] cls) { if (cls != null) { - Collections.addAll(actionClasses, cls); + actionClasses.addAll(Arrays.asList(cls)); } } public static void referCellInsertActionClass(Class[] cls) { if (cls != null) { actionClasses.clear(); - Collections.addAll(actionClasses, cls); + actionClasses.addAll(Arrays.asList(cls)); } } @@ -321,14 +323,14 @@ public class ActionFactory { */ public static void registerFloatInsertActionClass(Class[] cls) { if (cls != null) { - Collections.addAll(floatActionClasses, cls); + floatActionClasses.addAll(Arrays.asList(cls)); } } public static void referFloatInsertActionClass(Class[] cls) { if (cls != null) { floatActionClasses.clear(); - Collections.addAll(floatActionClasses, cls); + floatActionClasses.addAll(Arrays.asList(cls)); } } diff --git a/designer-base/src/main/java/com/fr/design/actions/file/WebPreviewUtils.java b/designer-base/src/main/java/com/fr/design/actions/file/WebPreviewUtils.java index 8d1e5828d..9f87943e1 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/WebPreviewUtils.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/WebPreviewUtils.java @@ -86,6 +86,8 @@ public final class WebPreviewUtils { if (!jt.saveAsTemplate()) { return; } + } else { + return; } currentTemplate = jt.getEditingFILE(); } diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java index 2356de6d4..230bf8a47 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java @@ -288,6 +288,7 @@ public class TableDataTreePane extends BasicTableDataTreePane { fireDSChanged(); checkButtonEnabled(); DesignTableDataManager.removeSelectedColumnNames(selectedNO.getName()); + DesignModelAdapter.getCurrentModelAdapter().removeTableDataParameters(selectedNO.getName()); } } } diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java index 4bf6bf190..94a612b66 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java @@ -99,6 +99,8 @@ public class JDBCDefPane extends JPanel { private IntegerEditor DBCP_NUMTESTSPEREVICTIONRUN = new IntegerEditor(); private IntegerEditor DBCP_MINEVICTABLEIDLETIMEMILLIS = new IntegerEditor(); + private JDBCDatabaseConnection jdbcDatabase; + public JDBCDefPane() { this.setBorder(UITitledBorder.createBorderWithTitle("JDBC" + ":")); this.setLayout(FRGUIPaneFactory.createLabelFlowLayout()); @@ -202,6 +204,8 @@ public class JDBCDefPane extends JPanel { if (jdbcDatabase == null) { jdbcDatabase = new JDBCDatabaseConnection(); } + this.jdbcDatabase = jdbcDatabase; + this.dbtypeComboBox.removeActionListener(dbtypeActionListener); if (ComparatorUtils.equals(jdbcDatabase.getDriver(), "sun.jdbc.odbc.JdbcOdbcDriver") && jdbcDatabase.getURL().startsWith("jdbc:odbc:Driver={Microsoft")) { this.dbtypeComboBox.setSelectedItem("Access"); @@ -226,6 +230,7 @@ public class JDBCDefPane extends JPanel { this.dbtypeComboBox.setSelectedItem(OTHER_DB); } } + this.dbtypeComboBox.addActionListener(dbtypeActionListener); this.driverComboBox.setSelectedItem(jdbcDatabase.getDriver()); this.urlTextField.setText(jdbcDatabase.getURL()); this.userNameTextField.setText(jdbcDatabase.getUser()); @@ -235,6 +240,7 @@ public class JDBCDefPane extends JPanel { if (dbcpAttr == null) { dbcpAttr = new DBCPConnectionPoolAttr(); jdbcDatabase.setDbcpAttr(dbcpAttr); + this.jdbcDatabase.setDbcpAttr(dbcpAttr); } this.DBCP_INITIAL_SIZE.setValue(dbcpAttr.getInitialSize()); this.DBCP_MAX_ACTIVE.setValue(dbcpAttr.getMaxActive()); @@ -251,7 +257,9 @@ public class JDBCDefPane extends JPanel { } public JDBCDatabaseConnection update() { - JDBCDatabaseConnection jdbcDatabase = new JDBCDatabaseConnection(); + if (jdbcDatabase == null) { + jdbcDatabase = new JDBCDatabaseConnection(); + } Object driveItem = this.driverComboBox.getSelectedItem(); jdbcDatabase.setDriver(driveItem == null ? null : driveItem.toString()); jdbcDatabase.setURL(this.urlTextField.getText().trim()); @@ -297,6 +305,8 @@ public class JDBCDefPane extends JPanel { urlTextField.setText(dus[i].getURL()); } } + // 更改数据库类型后 数据库名称置空和之前逻辑保持一致 + jdbcDatabase.setDatabase(StringUtils.EMPTY); } }; diff --git a/designer-base/src/main/java/com/fr/design/gui/autocomplete/DefaultCompletionProvider.java b/designer-base/src/main/java/com/fr/design/gui/autocomplete/DefaultCompletionProvider.java index 4a002cf01..df36add40 100644 --- a/designer-base/src/main/java/com/fr/design/gui/autocomplete/DefaultCompletionProvider.java +++ b/designer-base/src/main/java/com/fr/design/gui/autocomplete/DefaultCompletionProvider.java @@ -2,7 +2,7 @@ * 12/21/2008 * * DefaultCompletionProvider.java - A basic completion provider implementation. - * + * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ @@ -24,7 +24,11 @@ import javax.swing.text.Segment; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; + +import com.fr.log.FineLoggerFactory; import org.xml.sax.SAXException; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; /** @@ -38,337 +42,345 @@ import org.xml.sax.SAXException; */ public class DefaultCompletionProvider extends AbstractCompletionProvider { - protected Segment seg; - - /** - * Used to speed up {@link #getCompletionsAt(JTextComponent, Point)}. - */ - private String lastCompletionsAtText; - - /** - * Used to speed up {@link #getCompletionsAt(JTextComponent, Point)}, - * since this may be called multiple times in succession (this is usually - * called by JTextComponent.getToolTipText(), and if the user - * wiggles the mouse while a tool tip is displayed, this method gets - * repeatedly called. It can be costly so we try to speed it up a tad). - */ - private List lastParameterizedCompletionsAt; - - /** - * Constructor. The returned provider will not be aware of any completions. - * - * @see #addCompletion(Completion) - */ - public DefaultCompletionProvider() { - init(); - } - - - /** - * Creates a completion provider that provides completion for a simple - * list of words. - * - * @param words The words to offer as completion suggestions. If this is - * null, no completions will be known. - * @see BasicCompletion - */ - public DefaultCompletionProvider(String[] words) { - init(); - addWordCompletions(words); - } - - - /** - * Returns the text just before the current caret position that could be - * the start of something auto-completable.

- * - * This method returns all characters before the caret that are matched - * by {@link #isValidChar(char)}. - * - * {@inheritDoc} - */ - public String getAlreadyEnteredText(JTextComponent comp) { - - Document doc = comp.getDocument(); - - int dot = comp.getCaretPosition(); - Element root = doc.getDefaultRootElement(); - int index = root.getElementIndex(dot); - Element elem = root.getElement(index); - int start = elem.getStartOffset(); - int len = dot-start; - try { - doc.getText(start, len, seg); - } catch (BadLocationException ble) { - - return EMPTY_STRING; - } - - int segEnd = seg.offset + len; - start = segEnd - 1; - while (start>=seg.offset && isValidChar(seg.array[start])) { - start--; - } - start++; - - len = segEnd - start; - return len==0 ? EMPTY_STRING : new String(seg.array, start, len); - - } - - - /** - * {@inheritDoc} - */ - public List getCompletionsAt(JTextComponent tc, Point p) { - - int offset = tc.viewToModel(p); - if (offset<0 || offset>=tc.getDocument().getLength()) { - lastCompletionsAtText = null; - return lastParameterizedCompletionsAt = null; - } - - Segment s = new Segment(); - Document doc = tc.getDocument(); - Element root = doc.getDefaultRootElement(); - int line = root.getElementIndex(offset); - Element elem = root.getElement(line); - int start = elem.getStartOffset(); - int end = elem.getEndOffset() - 1; - - try { - - doc.getText(start, end-start, s); - - // Get the valid chars before the specified offset. - int startOffs = s.offset + (offset-start) - 1; - while (startOffs>=s.offset && isValidChar(s.array[startOffs])) { - startOffs--; - } - - // Get the valid chars at and after the specified offset. - int endOffs = s.offset + (offset-start); - while (endOffs list = getCompletionByInputText(text); - lastCompletionsAtText = text; - return lastParameterizedCompletionsAt = list; - - } catch (BadLocationException ble) { - // Never happens - } - - lastCompletionsAtText = null; - return lastParameterizedCompletionsAt = null; - - } - - - /** - * {@inheritDoc} - */ - public List getParameterizedCompletions( - JTextComponent tc) { - - List list = null; - - // If this provider doesn't support parameterized completions, - // bail out now. - char paramListStart = getParameterListStart(); - if (paramListStart==0) { - return list; // null - } - - int dot = tc.getCaretPosition(); - Segment s = new Segment(); - Document doc = tc.getDocument(); - Element root = doc.getDefaultRootElement(); - int line = root.getElementIndex(dot); - Element elem = root.getElement(line); - int offs = elem.getStartOffset(); - int len = dot - offs - 1/*paramListStart.length()*/; - if (len<=0) { // Not enough chars on line for a method. - return list; // null - } - - try { - - doc.getText(offs, len, s); - - // Get the identifier preceding the '(', ignoring any whitespace - // between them. - offs = s.offset + len - 1; - while (offs>=s.offset && Character.isWhitespace(s.array[offs])) { - offs--; - } - int end = offs; - while (offs>=s.offset && isValidChar(s.array[offs])) { - offs--; - } - - String text = new String(s.array, offs+1, end-offs); - - // Get a list of all Completions matching the text, but then - // narrow it down to just the ParameterizedCompletions. - List l = getCompletionByInputText(text); - if (l!=null && !l.isEmpty()) { - for (int i=0; i(1); - } - list.add((ParameterizedCompletion)o); - } - } - } - - } catch (BadLocationException ble) { - // Never happens - } - - return list; - - } - - - /** - * Initializes this completion provider. - */ - protected void init() { - completions = new ArrayList(); - seg = new Segment(); - } - - - /** - * Returns whether the specified character is valid in an auto-completion. - * The default implementation is equivalent to - * "Character.isLetterOrDigit(ch) || ch=='_'". Subclasses - * can override this method to change what characters are matched. - * - * @param ch The character. - * @return Whether the character is valid. - */ - protected boolean isValidChar(char ch) { - return Character.isLetterOrDigit(ch) || ch=='_'; - } - - - /** - * Loads completions from an XML file. The XML should validate against - * CompletionXml.dtd. - * - * @param file An XML file to load from. - * @throws IOException If an IO error occurs. - */ - public void loadFromXML(File file) throws IOException { - BufferedInputStream bin = new BufferedInputStream( - new FileInputStream(file)); - try { - loadFromXML(bin); - } finally { - bin.close(); - } - } - - - /** - * Loads completions from an XML input stream. The XML should validate - * against CompletionXml.dtd. - * - * @param in The input stream to read from. - * @throws IOException If an IO error occurs. - */ - public void loadFromXML(InputStream in) throws IOException { - loadFromXML(in, null); - } - - - /** - * Loads completions from an XML input stream. The XML should validate - * against CompletionXml.dtd. - * - * @param in The input stream to read from. - * @param cl The class loader to use when loading any extra classes defined - * in the XML, such as custom {@link FunctionCompletion}s. This - * may be null if the default is to be used, or if no - * custom completions are defined in the XML. - * @throws IOException If an IO error occurs. - */ - public void loadFromXML(InputStream in, ClassLoader cl) throws IOException { - - //long start = System.currentTimeMillis(); - - SAXParserFactory factory = SAXParserFactory.newInstance(); - factory.setValidating(true); - CompletionXMLParser handler = new CompletionXMLParser(this, cl); - BufferedInputStream bin = new BufferedInputStream(in); - try { - SAXParser saxParser = factory.newSAXParser(); - saxParser.parse(bin, handler); - List completions = handler.getCompletions(); - addCompletions(completions); - char startChar = handler.getParamStartChar(); - if (startChar!=0) { - char endChar = handler.getParamEndChar(); - String sep = handler.getParamSeparator(); - if (endChar!=0 && sep!=null && sep.length()>0) { // Sanity - setParameterizedCompletionParams(startChar, sep, endChar); - } - } - } catch (SAXException se) { - throw new IOException(se.toString()); - } catch (ParserConfigurationException pce) { - throw new IOException(pce.toString()); - } finally { - //long time = System.currentTimeMillis() - start; - //System.out.println("XML loaded in: " + time + "ms"); - bin.close(); - } - - } - - - /** - * Loads completions from an XML file. The XML should validate against - * CompletionXml.dtd. - * - * @param resource A resource the current ClassLoader can get to. - * @throws IOException If an IO error occurs. - */ - public void loadFromXML(String resource) throws IOException { - ClassLoader cl = getClass().getClassLoader(); - InputStream in = cl.getResourceAsStream(resource); - if (in==null) { - File file = new File(resource); - if (file.isFile()) { - in = new FileInputStream(file); - } - else { - throw new IOException("No such resource: " + resource); - } - } - BufferedInputStream bin = new BufferedInputStream(in); - try { - loadFromXML(bin); - } finally { - bin.close(); - } - } + protected Segment seg; + + /** + * Used to speed up {@link #getCompletionsAt(JTextComponent, Point)}. + */ + private String lastCompletionsAtText; + + /** + * Used to speed up {@link #getCompletionsAt(JTextComponent, Point)}, + * since this may be called multiple times in succession (this is usually + * called by JTextComponent.getToolTipText(), and if the user + * wiggles the mouse while a tool tip is displayed, this method gets + * repeatedly called. It can be costly so we try to speed it up a tad). + */ + private List lastParameterizedCompletionsAt; + + /** + * Constructor. The returned provider will not be aware of any completions. + * + * @see #addCompletion(Completion) + */ + public DefaultCompletionProvider() { + init(); + } + + + /** + * Creates a completion provider that provides completion for a simple + * list of words. + * + * @param words The words to offer as completion suggestions. If this is + * null, no completions will be known. + * @see BasicCompletion + */ + public DefaultCompletionProvider(String[] words) { + init(); + addWordCompletions(words); + } + + + /** + * Returns the text just before the current caret position that could be + * the start of something auto-completable.

+ *

+ * This method returns all characters before the caret that are matched + * by {@link #isValidChar(char)}. + *

+ * {@inheritDoc} + */ + public String getAlreadyEnteredText(JTextComponent comp) { + + Document doc = comp.getDocument(); + + int dot = comp.getCaretPosition(); + Element root = doc.getDefaultRootElement(); + int index = root.getElementIndex(dot); + Element elem = root.getElement(index); + int start = elem.getStartOffset(); + int len = dot - start; + try { + doc.getText(start, len, seg); + } catch (BadLocationException ble) { + + return EMPTY_STRING; + } + + int segEnd = seg.offset + len; + start = segEnd - 1; + while (start >= seg.offset && isValidChar(seg.array[start])) { + start--; + } + start++; + + len = segEnd - start; + return len == 0 ? EMPTY_STRING : new String(seg.array, start, len); + + } + + + /** + * {@inheritDoc} + */ + public List getCompletionsAt(JTextComponent tc, Point p) { + + int offset = tc.viewToModel(p); + if (offset < 0 || offset >= tc.getDocument().getLength()) { + lastCompletionsAtText = null; + return lastParameterizedCompletionsAt = null; + } + + Segment s = new Segment(); + Document doc = tc.getDocument(); + Element root = doc.getDefaultRootElement(); + int line = root.getElementIndex(offset); + Element elem = root.getElement(line); + int start = elem.getStartOffset(); + int end = elem.getEndOffset() - 1; + + try { + + doc.getText(start, end - start, s); + + // Get the valid chars before the specified offset. + int startOffs = s.offset + (offset - start) - 1; + while (startOffs >= s.offset && isValidChar(s.array[startOffs])) { + startOffs--; + } + + // Get the valid chars at and after the specified offset. + int endOffs = s.offset + (offset - start); + while (endOffs < s.offset + s.count && isValidChar(s.array[endOffs])) { + endOffs++; + } + + int len = endOffs - startOffs - 1; + if (len <= 0) { + return lastParameterizedCompletionsAt = null; + } + String text = new String(s.array, startOffs + 1, len); + + if (text.equals(lastCompletionsAtText)) { + return lastParameterizedCompletionsAt; + } + + // Get a list of all Completions matching the text. + List list = getCompletionByInputText(text); + lastCompletionsAtText = text; + return lastParameterizedCompletionsAt = list; + + } catch (BadLocationException ble) { + // Never happens + } + + lastCompletionsAtText = null; + return lastParameterizedCompletionsAt = null; + + } + + + /** + * {@inheritDoc} + */ + public List getParameterizedCompletions( + JTextComponent tc) { + + List list = null; + + // If this provider doesn't support parameterized completions, + // bail out now. + char paramListStart = getParameterListStart(); + if (paramListStart == 0) { + return list; // null + } + + int dot = tc.getCaretPosition(); + Segment s = new Segment(); + Document doc = tc.getDocument(); + Element root = doc.getDefaultRootElement(); + int line = root.getElementIndex(dot); + Element elem = root.getElement(line); + int offs = elem.getStartOffset(); + int len = dot - offs - 1/*paramListStart.length()*/; + if (len <= 0) { // Not enough chars on line for a method. + return list; // null + } + + try { + + doc.getText(offs, len, s); + + // Get the identifier preceding the '(', ignoring any whitespace + // between them. + offs = s.offset + len - 1; + while (offs >= s.offset && Character.isWhitespace(s.array[offs])) { + offs--; + } + int end = offs; + while (offs >= s.offset && isValidChar(s.array[offs])) { + offs--; + } + + String text = new String(s.array, offs + 1, end - offs); + + // Get a list of all Completions matching the text, but then + // narrow it down to just the ParameterizedCompletions. + List l = getCompletionByInputText(text); + if (l != null && !l.isEmpty()) { + for (int i = 0; i < l.size(); i++) { + Object o = l.get(i); + if (o instanceof ParameterizedCompletion) { + if (list == null) { + list = new ArrayList(1); + } + list.add((ParameterizedCompletion) o); + } + } + } + + } catch (BadLocationException ble) { + // Never happens + } + + return list; + + } + + + /** + * Initializes this completion provider. + */ + protected void init() { + completions = new ArrayList(); + seg = new Segment(); + } + + + /** + * Returns whether the specified character is valid in an auto-completion. + * The default implementation is equivalent to + * "Character.isLetterOrDigit(ch) || ch=='_'". Subclasses + * can override this method to change what characters are matched. + * + * @param ch The character. + * @return Whether the character is valid. + */ + protected boolean isValidChar(char ch) { + return Character.isLetterOrDigit(ch) || ch == '_'; + } + + + /** + * Loads completions from an XML file. The XML should validate against + * CompletionXml.dtd. + * + * @param file An XML file to load from. + * @throws IOException If an IO error occurs. + */ + public void loadFromXML(File file) throws IOException { + BufferedInputStream bin = new BufferedInputStream( + new FileInputStream(file)); + try { + loadFromXML(bin); + } finally { + bin.close(); + } + } + + + /** + * Loads completions from an XML input stream. The XML should validate + * against CompletionXml.dtd. + * + * @param in The input stream to read from. + * @throws IOException If an IO error occurs. + */ + public void loadFromXML(InputStream in) throws IOException { + loadFromXML(in, null); + } + + + /** + * Loads completions from an XML input stream. The XML should validate + * against CompletionXml.dtd. + * + * @param in The input stream to read from. + * @param cl The class loader to use when loading any extra classes defined + * in the XML, such as custom {@link FunctionCompletion}s. This + * may be null if the default is to be used, or if no + * custom completions are defined in the XML. + * @throws IOException If an IO error occurs. + */ + public void loadFromXML(InputStream in, ClassLoader cl) throws IOException { + + //long start = System.currentTimeMillis(); + + SAXParserFactory factory = SAXParserFactory.newInstance(); + try { + factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + factory.setFeature("http://xml.org/sax/features/external-general-entities", false); + factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); + factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + } catch (ParserConfigurationException | SAXNotSupportedException | SAXNotRecognizedException e) { + FineLoggerFactory.getLogger().warn(e.getMessage(), e); + } + + factory.setValidating(true); + CompletionXMLParser handler = new CompletionXMLParser(this, cl); + BufferedInputStream bin = new BufferedInputStream(in); + try { + SAXParser saxParser = factory.newSAXParser(); + saxParser.parse(bin, handler); + List completions = handler.getCompletions(); + addCompletions(completions); + char startChar = handler.getParamStartChar(); + if (startChar != 0) { + char endChar = handler.getParamEndChar(); + String sep = handler.getParamSeparator(); + if (endChar != 0 && sep != null && sep.length() > 0) { // Sanity + setParameterizedCompletionParams(startChar, sep, endChar); + } + } + } catch (SAXException se) { + throw new IOException(se.toString()); + } catch (ParserConfigurationException pce) { + throw new IOException(pce.toString()); + } finally { + //long time = System.currentTimeMillis() - start; + //System.out.println("XML loaded in: " + time + "ms"); + bin.close(); + } + + } + + + /** + * Loads completions from an XML file. The XML should validate against + * CompletionXml.dtd. + * + * @param resource A resource the current ClassLoader can get to. + * @throws IOException If an IO error occurs. + */ + public void loadFromXML(String resource) throws IOException { + ClassLoader cl = getClass().getClassLoader(); + InputStream in = cl.getResourceAsStream(resource); + if (in == null) { + File file = new File(resource); + if (file.isFile()) { + in = new FileInputStream(file); + } else { + throw new IOException("No such resource: " + resource); + } + } + BufferedInputStream bin = new BufferedInputStream(in); + try { + loadFromXML(bin); + } finally { + bin.close(); + } + } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/gui/itextfield/UINumberField.java b/designer-base/src/main/java/com/fr/design/gui/itextfield/UINumberField.java index f4437a9c4..0d1287d8c 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itextfield/UINumberField.java +++ b/designer-base/src/main/java/com/fr/design/gui/itextfield/UINumberField.java @@ -4,7 +4,6 @@ import com.fr.base.Utils; import com.fr.general.ComparatorUtils; import com.fr.stable.CoreConstants; import com.fr.stable.StringUtils; - import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; diff --git a/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java b/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java index 0dcfe4c21..9f948e7a1 100644 --- a/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/style/BorderPane.java @@ -217,18 +217,36 @@ public class BorderPane extends AbstractBasicStylePane implements GlobalNameObse int lineStyle = currentLineCombo.getSelectedLineStyle(); Color lineColor = currentLineColorPane.getSelectObject(); CellBorderStyle cellBorderStyle = new CellBorderStyle(); - cellBorderStyle.setTopColor(lineColor); + if (topToggleButton.isSelected()) { + cellBorderStyle.setTopColor(lineColor); + } cellBorderStyle.setTopStyle(topToggleButton.isSelected() ? lineStyle : Constants.LINE_NONE); - cellBorderStyle.setBottomColor(lineColor); + + if (bottomToggleButton.isSelected()) { + cellBorderStyle.setBottomColor(lineColor); + } cellBorderStyle.setBottomStyle(bottomToggleButton.isSelected() ? lineStyle : Constants.LINE_NONE); - cellBorderStyle.setLeftColor(lineColor); + + if (leftToggleButton.isSelected()) { + cellBorderStyle.setLeftColor(lineColor); + } cellBorderStyle.setLeftStyle(leftToggleButton.isSelected() ? lineStyle : Constants.LINE_NONE); - cellBorderStyle.setRightColor(lineColor); + + if (rightToggleButton.isSelected()) { + cellBorderStyle.setRightColor(lineColor); + } cellBorderStyle.setRightStyle(rightToggleButton.isSelected() ? lineStyle : Constants.LINE_NONE); - cellBorderStyle.setVerticalColor(lineColor); + + if (verticalToggleButton.isSelected()) { + cellBorderStyle.setVerticalColor(lineColor); + } cellBorderStyle.setVerticalStyle(verticalToggleButton.isSelected() ? lineStyle : Constants.LINE_NONE); - cellBorderStyle.setHorizontalColor(lineColor); + + if (horizontalToggleButton.isSelected()) { + cellBorderStyle.setHorizontalColor(lineColor); + } cellBorderStyle.setHorizontalStyle(horizontalToggleButton.isSelected() ? lineStyle : Constants.LINE_NONE); + if (leftToggleButton.isSelected() && bottomToggleButton.isSelected() && rightToggleButton.isSelected() && topToggleButton.isSelected()) { outerToggleButton.setSelected(true); } else { diff --git a/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rsyntaxtextarea/SyntaxScheme.java b/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rsyntaxtextarea/SyntaxScheme.java index dbaaf4c6f..8bbedf0be 100644 --- a/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rsyntaxtextarea/SyntaxScheme.java +++ b/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rsyntaxtextarea/SyntaxScheme.java @@ -624,6 +624,10 @@ public class SyntaxScheme implements Cloneable, TokenTypes { SyntaxSchemeLoader parser = null; try { XMLReader reader = XMLReaderFactory.createXMLReader(); + reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + reader.setFeature("http://xml.org/sax/features/external-general-entities", false); + reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); parser = new SyntaxSchemeLoader(baseFont); parser.baseFont = baseFont; reader.setContentHandler(parser); diff --git a/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rsyntaxtextarea/Theme.java b/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rsyntaxtextarea/Theme.java index 3b422f574..896a5eec4 100644 --- a/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rsyntaxtextarea/Theme.java +++ b/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rsyntaxtextarea/Theme.java @@ -22,6 +22,7 @@ import java.lang.reflect.Field; import javax.swing.UIManager; import javax.swing.plaf.ColorUIResource; import javax.swing.text.StyleContext; +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.SAXParser; @@ -493,6 +494,8 @@ public class Theme { StreamResult result = new StreamResult(new PrintWriter( new UnicodeWriter(bout, "UTF-8"))); TransformerFactory transFac = TransformerFactory.newInstance(); + transFac.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); + transFac.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); Transformer transformer = transFac.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); @@ -580,8 +583,12 @@ public class Theme { public static void load(Theme theme, InputStream in) throws IOException { SAXParserFactory spf = SAXParserFactory.newInstance(); - spf.setValidating(true); try { + spf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + spf.setFeature("http://xml.org/sax/features/external-general-entities", false); + spf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); + spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + spf.setValidating(true); SAXParser parser = spf.newSAXParser(); XMLReader reader = parser.getXMLReader(); XmlHandler handler = new XmlHandler(); diff --git a/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rtextarea/Macro.java b/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rtextarea/Macro.java index 8a0ba741c..2558eafe0 100644 --- a/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rtextarea/Macro.java +++ b/designer-base/src/main/java/com/fr/design/gui/syntax/ui/rtextarea/Macro.java @@ -14,6 +14,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import javax.xml.XMLConstants; import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.dom.*; @@ -94,6 +95,11 @@ public class Macro { DocumentBuilder db = null; Document doc = null; try { + dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); + dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); + dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + dbf.setXIncludeAware(false); db = dbf.newDocumentBuilder(); //InputSource is = new InputSource(new FileReader(file)); InputSource is = new InputSource(new UnicodeReader( @@ -374,6 +380,8 @@ public class Macro { StreamResult result = new StreamResult(new File(fileName)); DOMSource source = new DOMSource(doc); TransformerFactory transFac = TransformerFactory.newInstance(); + transFac.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); + transFac.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); Transformer transformer = transFac.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.ENCODING, FILE_ENCODING); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 39ef20658..fb8f9a2da 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -598,7 +598,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt }); // 重名提示 warnLabel = new UILabel(); - warnLabel.setPreferredSize(new Dimension(300, 30)); + warnLabel.setPreferredSize(new Dimension(300, 50)); warnLabel.setHorizontalAlignment(SwingConstants.LEFT); warnLabel.setVerticalAlignment(SwingConstants.TOP); warnLabel.setForeground(Color.RED); @@ -641,7 +641,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt new Component[]{midPanel}, new Component[]{buttonsPane} }, - new double[]{TableLayout.FILL, TableLayout.FILL, TableLayout.PREFERRED}, + new double[]{TableLayout.FILL, TableLayout.PREFERRED, TableLayout.PREFERRED}, new double[]{TableLayout.FILL} ), BorderLayout.CENTER); @@ -803,7 +803,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt }); // 重名提示 warnLabel = new UILabel(); - warnLabel.setPreferredSize(new Dimension(300, 30)); + warnLabel.setPreferredSize(new Dimension(300, 50)); warnLabel.setHorizontalAlignment(SwingConstants.LEFT); warnLabel.setVerticalAlignment(SwingConstants.TOP); warnLabel.setForeground(Color.RED); @@ -848,7 +848,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt new Component[]{midPanel}, new Component[]{bottomPanel} }, - new double[]{TableLayout.FILL, TableLayout.FILL, TableLayout.PREFERRED}, + new double[]{TableLayout.FILL, TableLayout.PREFERRED, TableLayout.PREFERRED}, new double[]{TableLayout.FILL} ), BorderLayout.CENTER); diff --git a/designer-base/src/main/java/com/fr/design/utils/gui/GUIPaintUtils.java b/designer-base/src/main/java/com/fr/design/utils/gui/GUIPaintUtils.java index c4efc0282..fb530fd92 100644 --- a/designer-base/src/main/java/com/fr/design/utils/gui/GUIPaintUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/gui/GUIPaintUtils.java @@ -4,12 +4,15 @@ import com.fr.base.vcs.DesignerMode; import com.fr.design.constants.UIConstants; import com.fr.stable.Constants; +import com.fr.stable.os.OperatingSystem; import java.awt.*; import java.awt.geom.GeneralPath; import java.awt.geom.RoundRectangle2D; public class GUIPaintUtils { + private static boolean macos = OperatingSystem.isMacos(); + public static final void drawBorder(Graphics2D g2d, int x, int y, int width, int height, boolean isRound, int rectDirection) { drawBorder(g2d, x, y, width, height, isRound, rectDirection, false); } @@ -39,10 +42,14 @@ public class GUIPaintUtils { g2d.drawLine(x, y, x, height - 1); g2d.drawLine(x, height - 1, x + 3, height - 1); } else { - double offsetX = Math.min(GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().getDefaultTransform().getScaleX() - 1, 0.5d); - double offsetY = Math.min(GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().getDefaultTransform().getScaleY() - 1, 0.5d); - Shape shape = new RoundRectangle2D.Double(x + offsetX, y + offsetY, width - 1d, height - 1d, UIConstants.ARC, UIConstants.ARC); - g2d.draw(shape); + if (macos) { + g2d.drawRoundRect(x, y, width - 1, height - 1, UIConstants.ARC, UIConstants.ARC); + } else { + double offsetX = Math.min(GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().getDefaultTransform().getScaleX() - 1, 0.5d); + double offsetY = Math.min(GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().getDefaultTransform().getScaleY() - 1, 0.5d); + Shape shape = new RoundRectangle2D.Double(x + offsetX, y + offsetY, width - 1d, height - 1d, UIConstants.ARC, UIConstants.ARC); + g2d.draw(shape); + } } g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); } else { diff --git a/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java b/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java index 36b86cb89..5fa8173d4 100644 --- a/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java +++ b/designer-base/src/main/java/com/fr/start/server/FineEmbedServerActivator.java @@ -12,6 +12,7 @@ import com.fr.third.springframework.web.context.support.AnnotationConfigWebAppli import com.fr.workspace.WorkContext; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; +import org.apache.catalina.Wrapper; import org.apache.catalina.loader.WebappLoader; import org.apache.catalina.startup.Tomcat; import org.apache.catalina.webresources.StandardRoot; @@ -73,6 +74,10 @@ public class FineEmbedServerActivator extends Activator { String contextPath = "/" + ProductConstants.getAppFolderName(); final Context context = tomcat.addContext(contextPath, docBase); context.setResources(new StandardRoot(context)); + Wrapper servlet = Tomcat.addServlet(context, "DruidStatView", "com.fr.third.alibaba.druid.support.http.StatViewServlet"); + context.addServletMappingDecoded("/druid/*", "DruidStatView"); + servlet.setLoadOnStartup(1); + servlet.setOverridable(true); Tomcat.initWebappDefaults(context); //覆盖tomcat的WebAppClassLoader context.setLoader(new FRTomcatLoader()); diff --git a/designer-base/src/main/resources/com/fr/design/images/control/edit_disable.svg b/designer-base/src/main/resources/com/fr/design/images/control/edit_disabled.svg similarity index 100% rename from designer-base/src/main/resources/com/fr/design/images/control/edit_disable.svg rename to designer-base/src/main/resources/com/fr/design/images/control/edit_disabled.svg diff --git a/designer-base/src/main/resources/com/fr/design/images/control/remove_disable.svg b/designer-base/src/main/resources/com/fr/design/images/control/remove_disabled.svg similarity index 100% rename from designer-base/src/main/resources/com/fr/design/images/control/remove_disable.svg rename to designer-base/src/main/resources/com/fr/design/images/control/remove_disabled.svg diff --git a/designer-base/src/main/resources/com/fr/design/images/m_file/preview_disable.svg b/designer-base/src/main/resources/com/fr/design/images/m_file/preview_disabled.svg similarity index 100% rename from designer-base/src/main/resources/com/fr/design/images/m_file/preview_disable.svg rename to designer-base/src/main/resources/com/fr/design/images/m_file/preview_disabled.svg diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeLabelDetailPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeLabelDetailPane.java index 86d140f1d..8c672bab6 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeLabelDetailPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/style/label/VanChartGaugeLabelDetailPane.java @@ -10,7 +10,6 @@ import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane; import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPaneWithAuto; -import com.fr.general.ComparatorUtils; import com.fr.plugin.chart.base.AttrLabelDetail; import com.fr.plugin.chart.gauge.VanChartGaugePlot; import com.fr.plugin.chart.type.FontAutoType; @@ -50,7 +49,7 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane { } public GaugeStyle getGaugeStyle() { - return ((VanChartGaugePlot)this.getPlot()).getGaugeStyle(); + return ((VanChartGaugePlot) this.getPlot()).getGaugeStyle(); } public void setGaugeStyle(GaugeStyle gaugeStyle) { @@ -127,15 +126,13 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane { protected Component[][] getLabelPaneComponents(Plot plot, double p, double[] columnSize) { if (hasLabelAlignPane()) { - return new Component[][]{ new Component[]{getDataLabelContentPane(), null}, - new Component[]{createLabelPositionPane(Toolkit.i18nText("Fine-Design_Chart_Layout_Vertical"), plot), null}, - new Component[]{createLabelAlignPane(Toolkit.i18nText("Fine-Design_Chart_Layout_Horizontal")), null}, + new Component[]{createLabelPositionPane(getVerticalTitle(), plot), null}, + new Component[]{createLabelAlignPane(), null}, new Component[]{createLabelStylePane(getLabelStyleRowSize(p), columnSize, plot), null}, }; } else { - return new Component[][]{ new Component[]{getDataLabelContentPane(), null}, new Component[]{createLabelStylePane(getLabelStyleRowSize(p), columnSize, plot), null}, @@ -143,50 +140,37 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane { } } - private JPanel createLabelAlignPane(String title) { - JPanel panel = new JPanel(new BorderLayout()); - - alignPane = new JPanel(); - checkAlignPane(title); - panel.add(alignPane, BorderLayout.CENTER); - - return panel; + private JPanel createLabelAlignPane() { + alignPane = new JPanel(new BorderLayout()); + checkAlignPane(); + return alignPane; } - protected void checkAlignPane(String title) { - if (alignPane == null && !hasLabelAlign(getPlot())) { + protected void checkAlignPane() { + if (!hasLabelAlignPane()) { return; } - if (alignPane != null && !hasLabelAlign(getPlot())) { - oldAlignValues = null; + if (!hasLabelAlign()) { alignPane.removeAll(); return; } - if (alignPane == null && hasLabelAlign(getPlot())) { - alignPane = new JPanel(); + + if (alignPane.getComponents().length > 0) { + return; } TwoTuple result = getAlignNamesAndValues(); - String[] names = result.getFirst(); Integer[] values = result.getSecond(); - if (ComparatorUtils.equals(values, oldAlignValues)) { - return; - } - - oldAlignValues = values; - - align = new UIButtonGroup(names, values); + align = new UIButtonGroup<>(names, values); Component[][] comps = new Component[2][2]; comps[0] = new Component[]{null, null}; - comps[1] = new Component[]{new UILabel(title, SwingConstants.LEFT), align}; + comps[1] = new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Layout_Horizontal"), SwingConstants.LEFT), align}; double[] row = new double[]{TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED}; double[] col = new double[]{TableLayout.FILL, TableLayout4VanChartHelper.EDIT_AREA_WIDTH}; - alignPane.removeAll(); - alignPane.setLayout(new BorderLayout()); alignPane.add(getLabelPositionPane(comps, row, col), BorderLayout.CENTER); if (getParentPane() != null) { @@ -214,12 +198,16 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane { } protected void checkPane() { - String verticalTitle = hasLabelAlign(getPlot()) - ? Toolkit.i18nText("Fine-Design_Chart_Layout_Vertical") - : Toolkit.i18nText("Fine-Design_Chart_Layout_Position"); + String verticalTitle = getVerticalTitle(); checkPositionPane(verticalTitle); - checkAlignPane(Toolkit.i18nText("Fine-Design_Chart_Layout_Horizontal")); + checkAlignPane(); + } + + private String getVerticalTitle() { + return hasLabelAlign() + ? Toolkit.i18nText("Fine-Design_Chart_Layout_Vertical") + : Toolkit.i18nText("Fine-Design_Chart_Layout_Position"); } protected void checkStyleUse() { @@ -227,8 +215,8 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane { textFontPane.setPreferredSize(new Dimension(0, TEXT_FONT_PANE_HEIGHT)); } - protected boolean hasLabelAlign(Plot plot) { - return getGaugeStyle() == GaugeStyle.THERMOMETER && !((VanChartGaugePlot) plot).getGaugeDetailStyle().isHorizontalLayout(); + protected boolean hasLabelAlign() { + return getGaugeStyle() == GaugeStyle.THERMOMETER && !((VanChartGaugePlot) getPlot()).getGaugeDetailStyle().isHorizontalLayout(); } protected boolean hasLabelAlignPane() { @@ -240,7 +228,7 @@ public class VanChartGaugeLabelDetailPane extends VanChartPlotLabelDetailPane { style.setSelectedIndex(1); textFontPane.populate(detail.getTextAttr()); - if (hasLabelAlign(this.getPlot()) && align != null) { + if (hasLabelAlign() && align != null) { align.setSelectedItem(detail.getAlign()); } diff --git a/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/GisLayerPane.java b/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/GisLayerPane.java index 406b89610..4a43d7619 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/GisLayerPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/map/designer/type/GisLayerPane.java @@ -79,6 +79,7 @@ public class GisLayerPane extends JPanel implements UIObserver { private JPanel createGISLayerPane() { gisButton = new UIButtonGroup(new String[]{Toolkit.i18nText("Fine-Design_Form_Widget_Style_Standard"), Toolkit.i18nText("Fine-Design_Chart_Custom")}); + gisButton.setSelectedIndex(0); gisGaoDeLayer = new UIComboBox(MapLayerConfigManager.getGaoDeLayerItems()); gisButton.addActionListener(event -> { refreshZoomLevel(); @@ -221,12 +222,9 @@ public class GisLayerPane extends JPanel implements UIObserver { /* mapPlot.getGisLayer().setGisLayerType(GISLayerType.AUTO); mapPlot.getGisLayer().setLayerName(GISLayerType.getLocString(GISLayerType.AUTO));*/ - GaoDeGisType gaoDeGisType= mapPlot.getDefaultGisLayerType(); - - mapPlot.getGisLayer().setGisLayerType(GISLayerType.GAO_DE_API); - mapPlot.getGisLayer().setLayerName(gaoDeGisType.getTypeName()); - mapPlot.getGisLayer().setGaoDeGisType(gaoDeGisType); - populate(mapPlot.getGisLayer()); + GisLayer defaultGisLayer = mapPlot.getDefaultGisLayer(); + mapPlot.setGisLayer(defaultGisLayer); + populate(defaultGisLayer); } public void populate(GisLayer layer) { diff --git a/designer-chart/src/main/resources/com/fr/design/editor/script/editor.js b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.js index 3786e47ef..ec4de690d 100644 --- a/designer-chart/src/main/resources/com/fr/design/editor/script/editor.js +++ b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.js @@ -74,10 +74,10 @@ }], layouts: [{ type: "bi.left", - rgap: 5 + rgap: 2 }], value: this.model.mode, - width: 125 + width: 170 }, this._getToolBar()], height: 24 }, { diff --git a/designer-chart/src/main/resources/com/fr/design/editor/script/editor.model.js b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.model.js index e1ee49645..06f7bf2bf 100644 --- a/designer-chart/src/main/resources/com/fr/design/editor/script/editor.model.js +++ b/designer-chart/src/main/resources/com/fr/design/editor/script/editor.model.js @@ -18,7 +18,7 @@ return [{ type: "bi.single_select_radio_item", text: BI.i18nText("BI-Basic_Auto"), - width: 50, + width: 70, logic: { dynamic: true }, @@ -27,7 +27,7 @@ }, { type: "bi.single_select_radio_item", text: BI.i18nText("BI-Basic_Custom"), - width: 60, + width: 80, logic: { dynamic: true }, diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java index 370677860..4bfd9fa46 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellStylePane.java @@ -3,6 +3,7 @@ package com.fr.design.mainframe.cell.settingpane; import com.fr.base.Style; import com.fr.design.constants.UIConstants; import com.fr.design.mainframe.cell.settingpane.style.StylePane; +import com.fr.design.style.BorderUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.report.cell.DefaultTemplateCellElement; @@ -67,6 +68,7 @@ public class CellStylePane extends AbstractCellAttrPane { @Override public void updateBeans() { + Object[] selectionCellBorderObjects = BorderUtils.createCellBorderObject(elementCasePane); if (stylePane.getSelectedIndex() == 1) { Style s = stylePane.updateBean(); TemplateElementCase elementCase = elementCasePane.getEditingElementCase(); @@ -110,7 +112,8 @@ public class CellStylePane extends AbstractCellAttrPane { } } } - stylePane.updateBorder();// border必须特别处理 + // border必须特别处理 + stylePane.updateBorder(selectionCellBorderObjects); } } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/CustomStylePane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/CustomStylePane.java index 2d7277239..268dbebe6 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/CustomStylePane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/CustomStylePane.java @@ -136,8 +136,8 @@ public class CustomStylePane extends MultiTabPane