1 package jp.sourceforge.gokigen.memoma;
3 import android.app.AlertDialog;
4 import android.app.Dialog;
5 import android.content.Context;
6 import android.content.DialogInterface;
7 import android.graphics.Color;
8 import android.graphics.PorterDuff.Mode;
9 import android.graphics.drawable.BitmapDrawable;
10 import android.util.Log;
11 import android.view.LayoutInflater;
12 import android.view.View;
13 import android.widget.ImageButton;
15 import jp.sourceforge.gokigen.memoma.holders.LineStyleHolder;
18 * 接続線の形状を選択するダイアログを表示する
23 public class SelectLineShapeDialog implements ImageButton.OnClickListener
25 private int lineThickness = LineStyleHolder.LINETHICKNESS_THIN;
26 private int lineStyle = LineStyleHolder.LINESTYLE_STRAIGHT_NO_ARROW;
27 private int lineShape = LineStyleHolder.LINESHAPE_NORMAL;
29 private Context context = null;
30 private IResultReceiver resultReceiver = null;
31 private LineStyleHolder lineStyleHolder = null;
33 private View dialogLayout = null;
41 public SelectLineShapeDialog(Context arg, LineStyleHolder holder)
44 lineStyleHolder = holder;
48 * ダイアログで選択した結果を受信するためのレシーバを設定する
52 public void setResultReceiver(IResultReceiver receiver)
54 resultReceiver = receiver;
61 public Dialog getDialog()
63 LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
64 final View layout = inflater.inflate(R.layout.lineselection, null);
65 dialogLayout = layout;
67 AlertDialog.Builder builder = new AlertDialog.Builder(context);
69 // ダイアログで表示するデータを設定する場所
72 lineShape = lineStyleHolder.getLineShape();
73 lineStyle = lineStyleHolder.getLineStyle();
74 lineThickness = lineStyleHolder.getLineThickness();
77 final ImageButton thin = (ImageButton) layout.findViewById(R.id.btnLineThicknessThin);
78 thin.setOnClickListener(this);
79 final ImageButton middle = (ImageButton) layout.findViewById(R.id.btnLineThicknessMiddle);
80 middle.setOnClickListener(this);
81 final ImageButton heavy = (ImageButton) layout.findViewById(R.id.btnLineThicknessHeavy);
82 heavy.setOnClickListener(this);
85 final ImageButton straight = (ImageButton) layout.findViewById(R.id.btnLineShapeStraight);
86 straight.setOnClickListener(this);
87 final ImageButton tree = (ImageButton) layout.findViewById(R.id.btnLineShapeTree);
88 tree.setOnClickListener(this);
89 final ImageButton curve = (ImageButton) layout.findViewById(R.id.btnLineShapeCurve);
90 curve.setOnClickListener(this);
91 final ImageButton straightDash = (ImageButton) layout.findViewById(R.id.btnLineShapeStraightDash);
92 straightDash.setOnClickListener(this);
93 final ImageButton treeDash = (ImageButton) layout.findViewById(R.id.btnLineShapeTreeDash);
94 treeDash.setOnClickListener(this);
95 final ImageButton curveDash = (ImageButton) layout.findViewById(R.id.btnLineShapeCurveDash);
96 curveDash.setOnClickListener(this);
97 final ImageButton straightRarrow = (ImageButton) layout.findViewById(R.id.btnLineShapeStraightRarrow);
98 straightRarrow.setOnClickListener(this);
99 final ImageButton treeRarrow = (ImageButton) layout.findViewById(R.id.btnLineShapeTreeRarrow);
100 treeRarrow.setOnClickListener(this);
101 final ImageButton curveRarrow = (ImageButton) layout.findViewById(R.id.btnLineShapeCurveRarrow);
102 curveRarrow.setOnClickListener(this);
103 final ImageButton straightRarrowDash = (ImageButton) layout.findViewById(R.id.btnLineShapeStraightRarrowDash);
104 straightRarrowDash.setOnClickListener(this);
105 final ImageButton treeRarrowDash = (ImageButton) layout.findViewById(R.id.btnLineShapeTreeRarrowDash);
106 treeRarrowDash.setOnClickListener(this);
107 final ImageButton curveRarrowDash = (ImageButton) layout.findViewById(R.id.btnLineShapeCurveRarrowDash);
108 curveRarrowDash.setOnClickListener(this);
110 builder.setView(layout);
111 builder.setTitle(context.getString(R.string.Title_SelectLineShape));
112 builder.setCancelable(false);
113 builder.setPositiveButton(context.getString(R.string.confirmYes), new DialogInterface.OnClickListener()
115 public void onClick(DialogInterface dialog, int id)
118 setLineShape(lineStyle, lineShape, lineThickness);
119 if (resultReceiver != null)
121 resultReceiver.finishSelectLineShape(lineStyle, lineShape, lineThickness);
123 updateButtonHighlightLineThickness(0);
124 updateButtonHighlightLineShape(0);
136 builder.setNegativeButton(context.getString(R.string.confirmNo), new DialogInterface.OnClickListener()
138 public void onClick(DialogInterface dialog, int id)
141 if (resultReceiver != null)
143 resultReceiver.cancelSelectLineShape();
145 updateButtonHighlightLineThickness(0);
146 updateButtonHighlightLineShape(0);
158 return (builder.create());
162 * オブジェクト入力用ダイアログの表示を準備する
163 * (ダイアログの表示をした時に呼ばれる)
165 public void prepareSelectLineShapeDialog(Dialog dialog, Integer objectKey)
168 lineShape = lineStyleHolder.getLineShape();
169 lineStyle = lineStyleHolder.getLineStyle();
170 lineThickness = lineStyleHolder.getLineThickness();
172 // 画面(ダイアログ)で、現在選択中のものをハイライトにする。
173 updateButtonHighlightLineThickness(getLineThicknessButtonId(lineThickness));
174 updateButtonHighlightLineShape(getLineShapeButtonId(lineStyle, lineShape));
181 * @param toSetLineStyle
182 * @param toSetLineShape
184 public void setLineShape(int toSetLineStyle, int toSetLineShape, int toSetLineThickness)
186 lineStyleHolder.setLineShape(toSetLineShape);
187 lineStyleHolder.setLineStyle(toSetLineStyle);
188 lineStyleHolder.setLineThickness(toSetLineThickness);
190 Log.v(Main.APP_IDENTIFIER, ":::CHANGE LINE ::: shape:" + toSetLineShape + " style:" + toSetLineStyle + " thickness:" + toSetLineThickness);
196 * @param id 更新するボタンのID
197 * @param judge 判断するボタンのID
199 private void setButtonBorder(int id, int judge)
203 ImageButton button = (ImageButton) dialogLayout.findViewById(id);
204 //GradientDrawable btnBackgroundShape = (GradientDrawable)button.getBackground();
205 BitmapDrawable btnBackgroundShape = (BitmapDrawable)button.getBackground();
208 //btnBackgroundShape.setColorFilter(Color.rgb(51, 181, 229), Mode.LIGHTEN);
209 btnBackgroundShape.setColorFilter(Color.BLUE, Mode.LIGHTEN);
213 btnBackgroundShape.setColorFilter(Color.BLACK, Mode.LIGHTEN);
219 Log.v(Main.APP_IDENTIFIER, "setButtonBorder(): " + ex.toString());
225 * イメージボタンの選択状態を更新する (接続線の太さ)
229 private void updateLineThickness(int buttonId)
233 case R.id.btnLineThicknessMiddle:
234 lineThickness = LineStyleHolder.LINETHICKNESS_MIDDLE;
236 case R.id.btnLineThicknessHeavy:
237 lineThickness = LineStyleHolder.LINETHICKNESS_HEAVY;
239 case R.id.btnLineThicknessThin:
241 lineThickness = LineStyleHolder.LINETHICKNESS_THIN;
251 private void updateLineStyle(int buttonId)
255 case R.id.btnLineShapeTree:
256 lineStyle = LineStyleHolder.LINESTYLE_TREESTYLE_NO_ARROW;
257 lineShape = LineStyleHolder.LINESHAPE_NORMAL;
260 case R.id.btnLineShapeCurve:
261 lineStyle = LineStyleHolder.LINESTYLE_CURVESTYLE_NO_ARROW;
262 lineShape = LineStyleHolder.LINESHAPE_NORMAL;
265 case R.id.btnLineShapeStraightDash:
266 lineStyle = LineStyleHolder.LINESTYLE_STRAIGHT_NO_ARROW;
267 lineShape = LineStyleHolder.LINESHAPE_DASH;
270 case R.id.btnLineShapeTreeDash:
271 lineStyle = LineStyleHolder.LINESTYLE_TREESTYLE_NO_ARROW;
272 lineShape = LineStyleHolder.LINESHAPE_DASH;
275 case R.id.btnLineShapeCurveDash:
276 lineStyle = LineStyleHolder.LINESTYLE_CURVESTYLE_NO_ARROW;
277 lineShape = LineStyleHolder.LINESHAPE_DASH;
280 case R.id.btnLineShapeStraightRarrow:
281 lineStyle = LineStyleHolder.LINESTYLE_STRAIGHT_R_ARROW;
282 lineShape = LineStyleHolder.LINESHAPE_NORMAL;
285 case R.id.btnLineShapeTreeRarrow:
286 lineStyle = LineStyleHolder.LINESTYLE_TREESTYLE_R_ARROW;
287 lineShape = LineStyleHolder.LINESHAPE_NORMAL;
290 case R.id.btnLineShapeCurveRarrow:
291 lineStyle = LineStyleHolder.LINESTYLE_CURVESTYLE_R_ARROW;
292 lineShape = LineStyleHolder.LINESHAPE_NORMAL;
295 case R.id.btnLineShapeStraightRarrowDash:
296 lineStyle = LineStyleHolder.LINESTYLE_STRAIGHT_R_ARROW;
297 lineShape = LineStyleHolder.LINESHAPE_DASH;
300 case R.id.btnLineShapeTreeRarrowDash:
301 lineStyle = LineStyleHolder.LINESTYLE_TREESTYLE_R_ARROW;
302 lineShape = LineStyleHolder.LINESHAPE_DASH;
305 case R.id.btnLineShapeCurveRarrowDash:
306 lineStyle = LineStyleHolder.LINESTYLE_CURVESTYLE_R_ARROW;
307 lineShape = LineStyleHolder.LINESHAPE_DASH;
310 case R.id.btnLineShapeStraight:
312 lineStyle = LineStyleHolder.LINESTYLE_STRAIGHT_NO_ARROW;
313 lineShape = LineStyleHolder.LINESHAPE_NORMAL;
324 private int getLineThicknessButtonId(int thickness)
326 int buttonId = R.id.btnLineThicknessThin;
329 case LineStyleHolder.LINETHICKNESS_HEAVY:
330 buttonId = R.id.btnLineThicknessHeavy;
333 case LineStyleHolder.LINETHICKNESS_MIDDLE:
334 buttonId = R.id.btnLineThicknessMiddle;
337 case LineStyleHolder.LINETHICKNESS_THIN:
339 buttonId = R.id.btnLineThicknessThin;
348 * @param currentLineStyle
349 * @param currentLineShape
352 private int getLineShapeButtonId(int currentLineStyle, int currentLineShape)
354 int buttonId = R.id.btnLineShapeStraight;
356 if ((currentLineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_NO_ARROW)&&
357 (currentLineShape == LineStyleHolder.LINESHAPE_NORMAL))
359 buttonId = R.id.btnLineShapeTree;
361 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_NO_ARROW)&&
362 (currentLineShape == LineStyleHolder.LINESHAPE_NORMAL))
364 buttonId = R.id.btnLineShapeCurve;
366 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_STRAIGHT_NO_ARROW)&&
367 (currentLineShape == LineStyleHolder.LINESHAPE_DASH))
369 buttonId = R.id.btnLineShapeStraightDash;
371 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_NO_ARROW)&&
372 (currentLineShape == LineStyleHolder.LINESHAPE_DASH))
374 buttonId = R.id.btnLineShapeTreeDash;
376 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_NO_ARROW)&&
377 (currentLineShape == LineStyleHolder.LINESHAPE_DASH))
379 buttonId = R.id.btnLineShapeCurveDash;
381 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_STRAIGHT_R_ARROW)&&
382 (currentLineShape == LineStyleHolder.LINESHAPE_NORMAL))
384 buttonId = R.id.btnLineShapeStraightRarrow;
386 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_R_ARROW)&&
387 (currentLineShape == LineStyleHolder.LINESHAPE_NORMAL))
389 buttonId = R.id.btnLineShapeTreeRarrow;
391 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_R_ARROW)&&
392 (currentLineShape == LineStyleHolder.LINESHAPE_NORMAL))
394 buttonId = R.id.btnLineShapeCurveRarrow;
396 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_STRAIGHT_R_ARROW)&&
397 (currentLineShape == LineStyleHolder.LINESHAPE_DASH))
399 buttonId = R.id.btnLineShapeStraightRarrowDash;
401 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_R_ARROW)&&
402 (currentLineShape == LineStyleHolder.LINESHAPE_DASH))
404 buttonId = R.id.btnLineShapeTreeRarrowDash;
406 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_R_ARROW)&&
407 (currentLineShape == LineStyleHolder.LINESHAPE_DASH))
409 buttonId = R.id.btnLineShapeCurveRarrowDash;
412 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_STRAIGHT_NO_ARROW)&&
413 (currentLineShape == LineStyleHolder.LINESHAPE_NORMAL))
415 buttonId = R.id.btnLineShapeStraight;
426 private void updateButtonHighlightLineThickness(int id)
428 setButtonBorder(R.id.btnLineThicknessThin, id);
429 setButtonBorder(R.id.btnLineThicknessMiddle, id);
430 setButtonBorder(R.id.btnLineThicknessHeavy, id);
438 private void updateButtonHighlightLineShape(int id)
440 setButtonBorder(R.id.btnLineShapeStraight, id);
441 setButtonBorder(R.id.btnLineShapeTree, id);
442 setButtonBorder(R.id.btnLineShapeCurve, id);
444 setButtonBorder(R.id.btnLineShapeStraightDash, id);
445 setButtonBorder(R.id.btnLineShapeTreeDash, id);
446 setButtonBorder(R.id.btnLineShapeCurveDash, id);
448 setButtonBorder(R.id.btnLineShapeStraightRarrow, id);
449 setButtonBorder(R.id.btnLineShapeTreeRarrow, id);
450 setButtonBorder(R.id.btnLineShapeCurveRarrow, id);
452 setButtonBorder(R.id.btnLineShapeStraightRarrowDash, id);
453 setButtonBorder(R.id.btnLineShapeTreeRarrowDash, id);
454 setButtonBorder(R.id.btnLineShapeCurveRarrowDash, id);
461 public void onClick(View v)
465 // 押されたボタンが接続線の太さだった場合...
466 if ((id == R.id.btnLineThicknessThin)||(id == R.id.btnLineThicknessMiddle)||(id == R.id.btnLineThicknessHeavy))
468 updateButtonHighlightLineThickness(id);
469 updateLineThickness(id);
474 updateButtonHighlightLineShape(id);
478 public interface IResultReceiver
480 public abstract void finishSelectLineShape(int style, int shape, int thickness);
481 public abstract void cancelSelectLineShape();