1 package jp.sourceforge.gokigen.memoma.operations;
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.Main;
16 import jp.sourceforge.gokigen.memoma.R;
17 import jp.sourceforge.gokigen.memoma.holders.LineStyleHolder;
20 * 接続線の形状を選択するダイアログを表示する
25 public class SelectLineShapeDialog implements ImageButton.OnClickListener
27 private final String TAG = toString();
28 private int lineThickness = LineStyleHolder.LINETHICKNESS_THIN;
29 private int lineStyle = LineStyleHolder.LINESTYLE_STRAIGHT_NO_ARROW;
30 private int lineShape = LineStyleHolder.LINESHAPE_NORMAL;
32 private Context context = null;
33 private IResultReceiver resultReceiver = null;
34 private LineStyleHolder lineStyleHolder = null;
36 private View dialogLayout = null;
44 public SelectLineShapeDialog(Context arg, LineStyleHolder holder)
47 lineStyleHolder = holder;
51 * ダイアログで選択した結果を受信するためのレシーバを設定する
55 public void setResultReceiver(IResultReceiver receiver)
57 resultReceiver = receiver;
64 public Dialog getDialog()
66 LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
67 final View layout = inflater.inflate(R.layout.lineselection, null);
68 dialogLayout = layout;
70 AlertDialog.Builder builder = new AlertDialog.Builder(context);
72 // ダイアログで表示するデータを設定する場所
75 lineShape = lineStyleHolder.getLineShape();
76 lineStyle = lineStyleHolder.getLineStyle();
77 lineThickness = lineStyleHolder.getLineThickness();
80 final ImageButton thin = (ImageButton) layout.findViewById(R.id.btnLineThicknessThin);
81 thin.setOnClickListener(this);
82 final ImageButton middle = (ImageButton) layout.findViewById(R.id.btnLineThicknessMiddle);
83 middle.setOnClickListener(this);
84 final ImageButton heavy = (ImageButton) layout.findViewById(R.id.btnLineThicknessHeavy);
85 heavy.setOnClickListener(this);
88 final ImageButton straight = (ImageButton) layout.findViewById(R.id.btnLineShapeStraight);
89 straight.setOnClickListener(this);
90 final ImageButton tree = (ImageButton) layout.findViewById(R.id.btnLineShapeTree);
91 tree.setOnClickListener(this);
92 final ImageButton curve = (ImageButton) layout.findViewById(R.id.btnLineShapeCurve);
93 curve.setOnClickListener(this);
94 final ImageButton straightDash = (ImageButton) layout.findViewById(R.id.btnLineShapeStraightDash);
95 straightDash.setOnClickListener(this);
96 final ImageButton treeDash = (ImageButton) layout.findViewById(R.id.btnLineShapeTreeDash);
97 treeDash.setOnClickListener(this);
98 final ImageButton curveDash = (ImageButton) layout.findViewById(R.id.btnLineShapeCurveDash);
99 curveDash.setOnClickListener(this);
100 final ImageButton straightRarrow = (ImageButton) layout.findViewById(R.id.btnLineShapeStraightRarrow);
101 straightRarrow.setOnClickListener(this);
102 final ImageButton treeRarrow = (ImageButton) layout.findViewById(R.id.btnLineShapeTreeRarrow);
103 treeRarrow.setOnClickListener(this);
104 final ImageButton curveRarrow = (ImageButton) layout.findViewById(R.id.btnLineShapeCurveRarrow);
105 curveRarrow.setOnClickListener(this);
106 final ImageButton straightRarrowDash = (ImageButton) layout.findViewById(R.id.btnLineShapeStraightRarrowDash);
107 straightRarrowDash.setOnClickListener(this);
108 final ImageButton treeRarrowDash = (ImageButton) layout.findViewById(R.id.btnLineShapeTreeRarrowDash);
109 treeRarrowDash.setOnClickListener(this);
110 final ImageButton curveRarrowDash = (ImageButton) layout.findViewById(R.id.btnLineShapeCurveRarrowDash);
111 curveRarrowDash.setOnClickListener(this);
113 builder.setView(layout);
114 builder.setTitle(context.getString(R.string.Title_SelectLineShape));
115 builder.setCancelable(false);
116 builder.setPositiveButton(context.getString(R.string.confirmYes), new DialogInterface.OnClickListener()
118 public void onClick(DialogInterface dialog, int id)
121 setLineShape(lineStyle, lineShape, lineThickness);
122 if (resultReceiver != null)
124 resultReceiver.finishSelectLineShape(lineStyle, lineShape, lineThickness);
126 updateButtonHighlightLineThickness(0);
127 updateButtonHighlightLineShape(0);
139 builder.setNegativeButton(context.getString(R.string.confirmNo), new DialogInterface.OnClickListener()
141 public void onClick(DialogInterface dialog, int id)
144 if (resultReceiver != null)
146 resultReceiver.cancelSelectLineShape();
148 updateButtonHighlightLineThickness(0);
149 updateButtonHighlightLineShape(0);
161 return (builder.create());
165 * オブジェクト入力用ダイアログの表示を準備する
166 * (ダイアログの表示をした時に呼ばれる)
168 public void prepareSelectLineShapeDialog(Dialog dialog, Integer objectKey)
171 lineShape = lineStyleHolder.getLineShape();
172 lineStyle = lineStyleHolder.getLineStyle();
173 lineThickness = lineStyleHolder.getLineThickness();
175 // 画面(ダイアログ)で、現在選択中のものをハイライトにする。
176 updateButtonHighlightLineThickness(getLineThicknessButtonId(lineThickness));
177 updateButtonHighlightLineShape(getLineShapeButtonId(lineStyle, lineShape));
184 * @param toSetLineStyle
185 * @param toSetLineShape
187 public void setLineShape(int toSetLineStyle, int toSetLineShape, int toSetLineThickness)
189 lineStyleHolder.setLineShape(toSetLineShape);
190 lineStyleHolder.setLineStyle(toSetLineStyle);
191 lineStyleHolder.setLineThickness(toSetLineThickness);
193 Log.v(TAG, ":::CHANGE LINE ::: shape:" + toSetLineShape + " style:" + toSetLineStyle + " thickness:" + toSetLineThickness);
199 * @param id 更新するボタンのID
200 * @param judge 判断するボタンのID
202 private void setButtonBorder(int id, int judge)
206 ImageButton button = (ImageButton) dialogLayout.findViewById(id);
207 //GradientDrawable btnBackgroundShape = (GradientDrawable)button.getBackground();
208 BitmapDrawable btnBackgroundShape = (BitmapDrawable)button.getBackground();
211 //btnBackgroundShape.setColorFilter(Color.rgb(51, 181, 229), Mode.LIGHTEN);
212 btnBackgroundShape.setColorFilter(Color.BLUE, Mode.LIGHTEN);
216 btnBackgroundShape.setColorFilter(Color.BLACK, Mode.LIGHTEN);
222 Log.v(TAG, "setButtonBorder(): " + ex.toString());
228 * イメージボタンの選択状態を更新する (接続線の太さ)
232 private void updateLineThickness(int buttonId)
236 case R.id.btnLineThicknessMiddle:
237 lineThickness = LineStyleHolder.LINETHICKNESS_MIDDLE;
239 case R.id.btnLineThicknessHeavy:
240 lineThickness = LineStyleHolder.LINETHICKNESS_HEAVY;
242 case R.id.btnLineThicknessThin:
244 lineThickness = LineStyleHolder.LINETHICKNESS_THIN;
254 private void updateLineStyle(int buttonId)
258 case R.id.btnLineShapeTree:
259 lineStyle = LineStyleHolder.LINESTYLE_TREESTYLE_NO_ARROW;
260 lineShape = LineStyleHolder.LINESHAPE_NORMAL;
263 case R.id.btnLineShapeCurve:
264 lineStyle = LineStyleHolder.LINESTYLE_CURVESTYLE_NO_ARROW;
265 lineShape = LineStyleHolder.LINESHAPE_NORMAL;
268 case R.id.btnLineShapeStraightDash:
269 lineStyle = LineStyleHolder.LINESTYLE_STRAIGHT_NO_ARROW;
270 lineShape = LineStyleHolder.LINESHAPE_DASH;
273 case R.id.btnLineShapeTreeDash:
274 lineStyle = LineStyleHolder.LINESTYLE_TREESTYLE_NO_ARROW;
275 lineShape = LineStyleHolder.LINESHAPE_DASH;
278 case R.id.btnLineShapeCurveDash:
279 lineStyle = LineStyleHolder.LINESTYLE_CURVESTYLE_NO_ARROW;
280 lineShape = LineStyleHolder.LINESHAPE_DASH;
283 case R.id.btnLineShapeStraightRarrow:
284 lineStyle = LineStyleHolder.LINESTYLE_STRAIGHT_R_ARROW;
285 lineShape = LineStyleHolder.LINESHAPE_NORMAL;
288 case R.id.btnLineShapeTreeRarrow:
289 lineStyle = LineStyleHolder.LINESTYLE_TREESTYLE_R_ARROW;
290 lineShape = LineStyleHolder.LINESHAPE_NORMAL;
293 case R.id.btnLineShapeCurveRarrow:
294 lineStyle = LineStyleHolder.LINESTYLE_CURVESTYLE_R_ARROW;
295 lineShape = LineStyleHolder.LINESHAPE_NORMAL;
298 case R.id.btnLineShapeStraightRarrowDash:
299 lineStyle = LineStyleHolder.LINESTYLE_STRAIGHT_R_ARROW;
300 lineShape = LineStyleHolder.LINESHAPE_DASH;
303 case R.id.btnLineShapeTreeRarrowDash:
304 lineStyle = LineStyleHolder.LINESTYLE_TREESTYLE_R_ARROW;
305 lineShape = LineStyleHolder.LINESHAPE_DASH;
308 case R.id.btnLineShapeCurveRarrowDash:
309 lineStyle = LineStyleHolder.LINESTYLE_CURVESTYLE_R_ARROW;
310 lineShape = LineStyleHolder.LINESHAPE_DASH;
313 case R.id.btnLineShapeStraight:
315 lineStyle = LineStyleHolder.LINESTYLE_STRAIGHT_NO_ARROW;
316 lineShape = LineStyleHolder.LINESHAPE_NORMAL;
327 private int getLineThicknessButtonId(int thickness)
329 int buttonId = R.id.btnLineThicknessThin;
332 case LineStyleHolder.LINETHICKNESS_HEAVY:
333 buttonId = R.id.btnLineThicknessHeavy;
336 case LineStyleHolder.LINETHICKNESS_MIDDLE:
337 buttonId = R.id.btnLineThicknessMiddle;
340 case LineStyleHolder.LINETHICKNESS_THIN:
342 buttonId = R.id.btnLineThicknessThin;
351 * @param currentLineStyle
352 * @param currentLineShape
355 private int getLineShapeButtonId(int currentLineStyle, int currentLineShape)
357 int buttonId = R.id.btnLineShapeStraight;
359 if ((currentLineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_NO_ARROW)&&
360 (currentLineShape == LineStyleHolder.LINESHAPE_NORMAL))
362 buttonId = R.id.btnLineShapeTree;
364 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_NO_ARROW)&&
365 (currentLineShape == LineStyleHolder.LINESHAPE_NORMAL))
367 buttonId = R.id.btnLineShapeCurve;
369 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_STRAIGHT_NO_ARROW)&&
370 (currentLineShape == LineStyleHolder.LINESHAPE_DASH))
372 buttonId = R.id.btnLineShapeStraightDash;
374 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_NO_ARROW)&&
375 (currentLineShape == LineStyleHolder.LINESHAPE_DASH))
377 buttonId = R.id.btnLineShapeTreeDash;
379 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_NO_ARROW)&&
380 (currentLineShape == LineStyleHolder.LINESHAPE_DASH))
382 buttonId = R.id.btnLineShapeCurveDash;
384 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_STRAIGHT_R_ARROW)&&
385 (currentLineShape == LineStyleHolder.LINESHAPE_NORMAL))
387 buttonId = R.id.btnLineShapeStraightRarrow;
389 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_R_ARROW)&&
390 (currentLineShape == LineStyleHolder.LINESHAPE_NORMAL))
392 buttonId = R.id.btnLineShapeTreeRarrow;
394 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_R_ARROW)&&
395 (currentLineShape == LineStyleHolder.LINESHAPE_NORMAL))
397 buttonId = R.id.btnLineShapeCurveRarrow;
399 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_STRAIGHT_R_ARROW)&&
400 (currentLineShape == LineStyleHolder.LINESHAPE_DASH))
402 buttonId = R.id.btnLineShapeStraightRarrowDash;
404 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_R_ARROW)&&
405 (currentLineShape == LineStyleHolder.LINESHAPE_DASH))
407 buttonId = R.id.btnLineShapeTreeRarrowDash;
409 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_R_ARROW)&&
410 (currentLineShape == LineStyleHolder.LINESHAPE_DASH))
412 buttonId = R.id.btnLineShapeCurveRarrowDash;
415 else if ((currentLineStyle == LineStyleHolder.LINESTYLE_STRAIGHT_NO_ARROW)&&
416 (currentLineShape == LineStyleHolder.LINESHAPE_NORMAL))
418 buttonId = R.id.btnLineShapeStraight;
429 private void updateButtonHighlightLineThickness(int id)
431 setButtonBorder(R.id.btnLineThicknessThin, id);
432 setButtonBorder(R.id.btnLineThicknessMiddle, id);
433 setButtonBorder(R.id.btnLineThicknessHeavy, id);
441 private void updateButtonHighlightLineShape(int id)
443 setButtonBorder(R.id.btnLineShapeStraight, id);
444 setButtonBorder(R.id.btnLineShapeTree, id);
445 setButtonBorder(R.id.btnLineShapeCurve, id);
447 setButtonBorder(R.id.btnLineShapeStraightDash, id);
448 setButtonBorder(R.id.btnLineShapeTreeDash, id);
449 setButtonBorder(R.id.btnLineShapeCurveDash, id);
451 setButtonBorder(R.id.btnLineShapeStraightRarrow, id);
452 setButtonBorder(R.id.btnLineShapeTreeRarrow, id);
453 setButtonBorder(R.id.btnLineShapeCurveRarrow, id);
455 setButtonBorder(R.id.btnLineShapeStraightRarrowDash, id);
456 setButtonBorder(R.id.btnLineShapeTreeRarrowDash, id);
457 setButtonBorder(R.id.btnLineShapeCurveRarrowDash, id);
464 public void onClick(View v)
468 // 押されたボタンが接続線の太さだった場合...
469 if ((id == R.id.btnLineThicknessThin)||(id == R.id.btnLineThicknessMiddle)||(id == R.id.btnLineThicknessHeavy))
471 updateButtonHighlightLineThickness(id);
472 updateLineThickness(id);
477 updateButtonHighlightLineShape(id);
481 public interface IResultReceiver
483 public abstract void finishSelectLineShape(int style, int shape, int thickness);
484 public abstract void cancelSelectLineShape();