/* (non-Javadoc) * @see j2meunit.framework.TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); question = new QuestionDef(); for (int i = 0; i < 4; i++) { question.addSelectChoice(new SelectChoice("", "Selection" + i, "Selection " + i, false)); } one = new Selection("Selection 1"); one.attachChoice(question); two = new Selection("Selection 2"); two.attachChoice(question); three = new Selection("Selection 3"); three.attachChoice(question); firstTwo = new Vector(); firstTwo.addElement(one); firstTwo.addElement(two); lastTwo = new Vector(); lastTwo.addElement(two); lastTwo.addElement(three); invalid = new Vector(); invalid.addElement(three); invalid.addElement(new Integer(12)); invalid.addElement(one); }
private void attachControlsToInstanceData(TreeElement node) { for (int i = 0; i < node.getNumChildren(); i++) { attachControlsToInstanceData(node.getChildAt(i)); } IAnswerData val = node.getValue(); Vector selections = null; if (val instanceof SelectOneData) { selections = new Vector(); selections.addElement(val.getValue()); } else if (val instanceof SelectMultiData) { selections = (Vector) val.getValue(); } if (selections != null) { QuestionDef q = findQuestionByRef(node.getRef(), this); if (q == null) { throw new RuntimeException( "FormDef.attachControlsToInstanceData: can't find question to link"); } if (q.getDynamicChoices() != null) { // droos: i think we should do something like initializing the itemset here, so that default // answers // can be linked to the selectchoices. however, there are complications. for example, the // itemset might // not be ready to be evaluated at form initialization; it may require certain questions to // be answered // first. e.g., if we evaluate an itemset and it has no choices, the xform engine will throw // an error // itemset TODO } for (int i = 0; i < selections.size(); i++) { Selection s = (Selection) selections.elementAt(i); s.attachChoice(q); } } }
@SuppressWarnings("unchecked") public GridMultiWidget(Context context, FormEntryPrompt prompt, int numColumns) { super(context, prompt); mItems = prompt.getSelectChoices(); mPrompt = prompt; selected = new boolean[mItems.size()]; choices = new String[mItems.size()]; gridview = new GridView(context); imageViews = new ImageView[mItems.size()]; maxColumnWidth = -1; this.numColumns = numColumns; for (int i = 0; i < mItems.size(); i++) { imageViews[i] = new ImageView(getContext()); } // Build view for (int i = 0; i < mItems.size(); i++) { SelectChoice sc = mItems.get(i); // Read the image sizes and set maxColumnWidth. This allows us to make sure all of our // columns are going to fit String imageURI = prompt.getSpecialFormSelectChoiceText(sc, FormEntryCaption.TEXT_FORM_IMAGE); if (imageURI != null) { choices[i] = imageURI; String imageFilename; try { imageFilename = ReferenceManager._().DeriveReference(imageURI).getLocalURI(); final File imageFile = new File(imageFilename); if (imageFile.exists()) { Display display = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)) .getDefaultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeight(); Bitmap b = FileUtils .getBitmapScaledToDisplay(imageFile, screenHeight, screenWidth); if (b != null) { if (b.getWidth() > maxColumnWidth) { maxColumnWidth = b.getWidth(); } } } } catch (InvalidReferenceException e) { Log.e("GridWidget", "image invalid reference exception"); e.printStackTrace(); } } else { choices[i] = prompt.getSelectChoiceText(sc); } } // Use the custom image adapter and initialize the grid view ImageAdapter ia = new ImageAdapter(getContext(), choices); gridview.setAdapter(ia); gridview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { if (selected[position]) { selected[position] = false; imageViews[position].setBackgroundColor(Color.WHITE); Collect.getInstance().getActivityLogger().logInstanceAction(this, "onItemClick.deselect", mItems.get(position).getValue(), mPrompt.getIndex()); } else { selected[position] = true; imageViews[position].setBackgroundColor(Color.rgb(orangeRedVal, orangeGreenVal, orangeBlueVal)); Collect.getInstance().getActivityLogger().logInstanceAction(this, "onItemClick.select", mItems.get(position).getValue(), mPrompt.getIndex()); } } }); // Read the screen dimensions and fit the grid view to them. It is important that the grid // view // knows how far out it can stretch. Display display = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)) .getDefaultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeight(); GridView.LayoutParams params = new GridView.LayoutParams(screenWidth - 5, screenHeight - 5); gridview.setLayoutParams(params); // Use the user's choice for num columns, otherwise automatically decide. if (numColumns > 0) { gridview.setNumColumns(numColumns); } else { gridview.setNumColumns(GridView.AUTO_FIT); } gridview.setColumnWidth(maxColumnWidth); gridview.setHorizontalSpacing(2); gridview.setVerticalSpacing(2); gridview.setGravity(Gravity.LEFT); gridview.setStretchMode(GridView.NO_STRETCH); // Fill in answer IAnswerData answer = prompt.getAnswerValue(); Vector<Selection> ve; if ((answer == null) || (answer.getValue() == null)) { ve = new Vector<Selection>(); } else { ve = (Vector<Selection>) answer.getValue(); } for (int i = 0; i < choices.length; ++i) { String value = mItems.get(i).getValue(); boolean found = false; for (Selection s : ve) { if (value.equals(s.getValue())) { found = true; break; } } selected[i] = found; if (selected[i]) { imageViews[i].setBackgroundColor(Color.rgb(orangeRedVal, orangeGreenVal, orangeBlueVal)); } else { imageViews[i].setBackgroundColor(Color.WHITE); } } addView(gridview); }