diff --git a/src/com/avast/android/butterknifezelezny/InjectAction.java b/src/com/avast/android/butterknifezelezny/InjectAction.java index 1396621..f3eba23 100644 --- a/src/com/avast/android/butterknifezelezny/InjectAction.java +++ b/src/com/avast/android/butterknifezelezny/InjectAction.java @@ -7,6 +7,7 @@ import com.avast.android.butterknifezelezny.form.EntryList; import com.avast.android.butterknifezelezny.iface.ICancelListener; import com.avast.android.butterknifezelezny.iface.IConfirmListener; +import com.avast.android.butterknifezelezny.iface.IRefreshListener; import com.avast.android.butterknifezelezny.model.Element; import com.intellij.codeInsight.CodeInsightActionHandler; import com.intellij.codeInsight.generation.actions.BaseGenerateAction; @@ -21,11 +22,13 @@ import javax.swing.*; import java.util.ArrayList; -public class InjectAction extends BaseGenerateAction implements IConfirmListener, ICancelListener { +public class InjectAction extends BaseGenerateAction implements IConfirmListener, ICancelListener,IRefreshListener { protected JFrame mDialog; protected static final Logger log = Logger.getInstance(InjectAction.class); - + Project mProject; + Editor mEditor; + boolean mIsOriginName=true; @SuppressWarnings("unused") public InjectAction() { super(null); @@ -52,10 +55,10 @@ public boolean isValidForFile(Project project, Editor editor, PsiFile file) { @Override public void actionPerformed(AnActionEvent event) { - Project project = event.getData(PlatformDataKeys.PROJECT); - Editor editor = event.getData(PlatformDataKeys.EDITOR); + mProject = event.getData(PlatformDataKeys.PROJECT); + mEditor = event.getData(PlatformDataKeys.EDITOR); - actionPerformedImpl(project, editor); + actionPerformedImpl(mProject, mEditor); } @Override @@ -70,7 +73,7 @@ public void actionPerformedImpl(Project project, Editor editor) { log.info("Layout file: " + layout.getVirtualFile()); - ArrayList elements = Utils.getIDsFromLayout(layout); + ArrayList elements = Utils.getIDsFromLayout(layout,mIsOriginName); if (!elements.isEmpty()) { showDialog(project, editor, elements); } else { @@ -140,7 +143,7 @@ protected void showDialog(Project project, Editor editor, ArrayList ele } } - EntryList panel = new EntryList(project, editor, elements, ids, createHolder, this, this); + EntryList panel = new EntryList(project, editor, elements, ids, createHolder,mIsOriginName, this, this,this); mDialog = new JFrame(); mDialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); @@ -159,4 +162,11 @@ protected void closeDialog() { mDialog.setVisible(false); mDialog.dispose(); } + + @Override + public void onRefresh(boolean isOriginName) { + mIsOriginName = !isOriginName; + mDialog.dispose(); + actionPerformedImpl(mProject,mEditor); + } } diff --git a/src/com/avast/android/butterknifezelezny/common/Utils.java b/src/com/avast/android/butterknifezelezny/common/Utils.java index 5920d0f..74afd93 100644 --- a/src/com/avast/android/butterknifezelezny/common/Utils.java +++ b/src/com/avast/android/butterknifezelezny/common/Utils.java @@ -148,10 +148,10 @@ public static PsiFile findLayoutResource(PsiFile file, Project project, String f * @param file * @return */ - public static ArrayList getIDsFromLayout(final PsiFile file) { + public static ArrayList getIDsFromLayout(final PsiFile file,boolean isOriginName) { final ArrayList elements = new ArrayList(); - return getIDsFromLayout(file, elements); + return getIDsFromLayout(file, elements,isOriginName); } /** @@ -160,7 +160,7 @@ public static ArrayList getIDsFromLayout(final PsiFile file) { * @param file * @return */ - public static ArrayList getIDsFromLayout(final PsiFile file, final ArrayList elements) { + public static ArrayList getIDsFromLayout(final PsiFile file, final ArrayList elements, final boolean isOriginName) { file.accept(new XmlRecursiveElementVisitor() { @Override @@ -178,7 +178,7 @@ public void visitElement(final PsiElement element) { PsiFile include = findLayoutResource(file, project, getLayoutName(layout.getValue())); if (include != null) { - getIDsFromLayout(include, elements); + getIDsFromLayout(include, elements,isOriginName); return; } @@ -203,7 +203,7 @@ public void visitElement(final PsiElement element) { } try { - elements.add(new Element(name, value)); + elements.add(new Element(name, value,isOriginName)); } catch (IllegalArgumentException e) { // TODO log } diff --git a/src/com/avast/android/butterknifezelezny/form/EntryList.java b/src/com/avast/android/butterknifezelezny/form/EntryList.java index 064d135..d0139f3 100644 --- a/src/com/avast/android/butterknifezelezny/form/EntryList.java +++ b/src/com/avast/android/butterknifezelezny/form/EntryList.java @@ -2,6 +2,7 @@ import com.avast.android.butterknifezelezny.iface.ICancelListener; import com.avast.android.butterknifezelezny.iface.IConfirmListener; +import com.avast.android.butterknifezelezny.iface.IRefreshListener; import com.avast.android.butterknifezelezny.iface.OnCheckBoxStateChangedListener; import com.avast.android.butterknifezelezny.model.Element; import com.intellij.openapi.editor.Editor; @@ -23,14 +24,18 @@ public class EntryList extends JPanel { protected ArrayList mGeneratedIDs = new ArrayList(); protected ArrayList mEntries = new ArrayList(); protected boolean mCreateHolder = false; + protected boolean mOriginalName = true; protected String mPrefix = null; protected IConfirmListener mConfirmListener; protected ICancelListener mCancelListener; + protected IRefreshListener mRefreshListener; protected JCheckBox mPrefixCheck; protected JTextField mPrefixValue; protected JLabel mPrefixLabel; protected JCheckBox mHolderCheck; + protected JCheckBox mHolderCheck2; protected JLabel mHolderLabel; + protected JLabel mHolderLabel2; protected JButton mConfirm; protected JButton mCancel; protected EntryHeader mEntryHeader; @@ -60,12 +65,14 @@ public void changeState(boolean checked) { } }; - public EntryList(Project project, Editor editor, ArrayList elements, ArrayList ids, boolean createHolder, IConfirmListener confirmListener, ICancelListener cancelListener) { + public EntryList(Project project, Editor editor, ArrayList elements, ArrayList ids, boolean createHolder, boolean originalName, IConfirmListener confirmListener, ICancelListener cancelListener, IRefreshListener refreshListener) { mProject = project; mEditor = editor; mCreateHolder = createHolder; + mOriginalName = originalName; mConfirmListener = confirmListener; mCancelListener = cancelListener; + mRefreshListener = refreshListener; if (elements != null) { mElements.addAll(elements); } @@ -147,9 +154,11 @@ protected void addButtons() { mHolderCheck.setSelected(mCreateHolder); mHolderCheck.addChangeListener(new CheckHolderListener()); + mHolderLabel = new JLabel(); mHolderLabel.setText("Create ViewHolder"); + JPanel holderPanel = new JPanel(); holderPanel.setLayout(new BoxLayout(holderPanel, BoxLayout.LINE_AXIS)); holderPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10)); @@ -158,6 +167,26 @@ protected void addButtons() { holderPanel.add(Box.createHorizontalGlue()); add(holderPanel, BorderLayout.PAGE_END); + + mHolderCheck2 = new JCheckBox(); + mHolderCheck2.setPreferredSize(new Dimension(32, 26)); + mHolderCheck2.setSelected(mOriginalName); + mHolderCheck2.addChangeListener(new CheckOriginListener()); + + + mHolderLabel2 = new JLabel(); + mHolderLabel2.setText("Original Name"); + + + JPanel holderPanel2 = new JPanel(); + holderPanel2.setLayout(new BoxLayout(holderPanel2, BoxLayout.LINE_AXIS)); + holderPanel2.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10)); + holderPanel2.add(mHolderCheck2); + holderPanel2.add(mHolderLabel2); + holderPanel2.add(Box.createHorizontalGlue()); + add(holderPanel2, BorderLayout.PAGE_END); + + mCancel = new JButton(); mCancel.setAction(new CancelAction()); mCancel.setPreferredSize(new Dimension(120, 26)); @@ -214,6 +243,14 @@ public void stateChanged(ChangeEvent event) { mCreateHolder = mHolderCheck.isSelected(); } } + public class CheckOriginListener implements ChangeListener { + + @Override + public void stateChanged(ChangeEvent event) { + mOriginalName = mHolderCheck2.isSelected(); + mRefreshListener.onRefresh(mOriginalName); + } + } public class CheckPrefixListener implements ChangeListener { diff --git a/src/com/avast/android/butterknifezelezny/iface/IRefreshListener.java b/src/com/avast/android/butterknifezelezny/iface/IRefreshListener.java new file mode 100644 index 0000000..6d1ce28 --- /dev/null +++ b/src/com/avast/android/butterknifezelezny/iface/IRefreshListener.java @@ -0,0 +1,6 @@ +package com.avast.android.butterknifezelezny.iface; + +public interface IRefreshListener { + + public void onRefresh(boolean isOriginName); +} diff --git a/src/com/avast/android/butterknifezelezny/model/Element.java b/src/com/avast/android/butterknifezelezny/model/Element.java index 590fe4b..639d1ac 100644 --- a/src/com/avast/android/butterknifezelezny/model/Element.java +++ b/src/com/avast/android/butterknifezelezny/model/Element.java @@ -20,7 +20,7 @@ public class Element { public boolean used = true; public boolean isClick = true; - public Element(String name, String id) { + public Element(String name, String id, boolean isOriginName) { // id final Matcher matcher = sIdPattern.matcher(id); if (matcher.find() && matcher.groupCount() > 0) { @@ -39,8 +39,7 @@ public Element(String name, String id) { this.nameFull = null; this.name = name; } - - this.fieldName = getFieldName(); + this.fieldName = getFieldName(isOriginName); } /** @@ -69,22 +68,25 @@ public String getFullID() { * * @return */ - private String getFieldName() { - String[] words = this.id.split("_"); - StringBuilder sb = new StringBuilder(); - sb.append(Utils.getPrefix()); - - for (int i = 0; i < words.length; i++) { - String[] idTokens = words[i].split("\\."); - char[] chars = idTokens[idTokens.length - 1].toCharArray(); - if (i > 0 || !Utils.isEmptyString(Utils.getPrefix())) { - chars[0] = Character.toUpperCase(chars[0]); + private String getFieldName(boolean isOriginName) { + if (isOriginName) { + return this.id; + } else { + String[] words = this.id.split("_"); + StringBuilder sb = new StringBuilder(); + sb.append(Utils.getPrefix()); + + for (int i = 0; i < words.length; i++) { + String[] idTokens = words[i].split("\\."); + char[] chars = idTokens[idTokens.length - 1].toCharArray(); + if (i > 0 || !Utils.isEmptyString(Utils.getPrefix())) { + chars[0] = Character.toUpperCase(chars[0]); + } + + sb.append(chars); } - - sb.append(chars); + return sb.toString(); } - - return sb.toString(); } /**