1 package jp.sourceforge.gokigen.memoma;
3 import android.app.Activity;
4 import android.app.AlertDialog;
5 import android.app.Dialog;
6 import android.content.DialogInterface;
7 import android.content.Intent;
8 import android.content.SharedPreferences;
9 import android.graphics.Color;
10 import android.graphics.PorterDuff.Mode;
11 import android.graphics.drawable.BitmapDrawable;
12 import android.net.Uri;
13 import android.os.Build;
14 import android.os.Bundle;
15 import android.preference.PreferenceManager;
16 import android.support.v7.app.AppCompatActivity;
17 import android.util.Log;
18 import android.view.KeyEvent;
19 import android.view.Menu;
20 import android.view.MenuItem;
21 import android.view.MotionEvent;
22 import android.view.View;
23 import android.view.View.OnClickListener;
24 import android.view.View.OnKeyListener;
25 import android.view.View.OnTouchListener;
26 import android.widget.ImageButton;
27 import android.widget.SeekBar;
29 import jp.sourceforge.gokigen.memoma.dialogs.ConfirmationDialog;
30 import jp.sourceforge.gokigen.memoma.dialogs.CreditDialog;
31 import jp.sourceforge.gokigen.memoma.dialogs.ItemSelectionDialog;
32 import jp.sourceforge.gokigen.memoma.dialogs.TextEditDialog;
33 import jp.sourceforge.gokigen.memoma.drawers.GokigenSurfaceView;
34 import jp.sourceforge.gokigen.memoma.drawers.MeMoMaCanvasDrawer;
35 import jp.sourceforge.gokigen.memoma.extension.ExtensionActivity;
36 import jp.sourceforge.gokigen.memoma.holders.OperationHistoryHolder;
37 import jp.sourceforge.gokigen.memoma.io.MeMoMaDataInOutManager;
38 import jp.sourceforge.gokigen.memoma.holders.LineStyleHolder;
39 import jp.sourceforge.gokigen.memoma.holders.MeMoMaConnectLineHolder;
40 import jp.sourceforge.gokigen.memoma.holders.MeMoMaObjectHolder;
41 import jp.sourceforge.gokigen.memoma.holders.OperationModeHolder;
42 import jp.sourceforge.gokigen.memoma.operations.IObjectSelectionReceiver;
43 import jp.sourceforge.gokigen.memoma.operations.ObjectAligner;
44 import jp.sourceforge.gokigen.memoma.operations.ObjectDataInputDialog;
45 import jp.sourceforge.gokigen.memoma.operations.ObjectOperationCommandHolder;
46 import jp.sourceforge.gokigen.memoma.operations.SelectLineShapeDialog;
47 import jp.sourceforge.gokigen.memoma.preference.Preference;
54 public class MeMoMaListener implements OnClickListener, OnTouchListener, OnKeyListener, IObjectSelectionReceiver, ConfirmationDialog.IResultReceiver, ObjectDataInputDialog.IResultReceiver, ItemSelectionDialog.ISelectionItemReceiver, TextEditDialog.ITextEditResultReceiver, ObjectAligner.IAlignCallback, SelectLineShapeDialog.IResultReceiver
56 private static final int MENU_ID_PREFERENCES = (Menu.FIRST + 1); // 設定画面の表示
57 private static final int MENU_ID_ABOUT_GOKIGEN = (Menu.FIRST + 2); // アプリケーションの情報表示
58 private static final int MENU_ID_NEW = (Menu.FIRST + 3); // 新規作成
59 private static final int MENU_ID_EXTEND= (Menu.FIRST + 4); // 拡張機能
60 private static final int MENU_ID_ALIGN = (Menu.FIRST + 5); // オブジェクトの整列
61 private static final int MENU_ID_INSERT_PICTURE = (Menu.FIRST + 6); // 画像の指定
62 private static final int MENU_ID_OPERATION = (Menu.FIRST + 7); // 操作コマンド
63 private static final int MENU_ID_RENAME = (Menu.FIRST + 8); // リネーム
64 private static final int MENU_ID_CAPTURE = (Menu.FIRST + 9); // 画像のキャプチャ
65 private static final int MENU_ID_SHARE = (Menu.FIRST + 10); // 画像の共有
66 private static final int MENU_ID_UNDO = (Menu.FIRST + 11); // 処理の UNDO
68 private AppCompatActivity parent; // 親分
69 private TextEditDialog editTextDialog; // テキスト編集用ダイアログ
70 private MeMoMaCanvasDrawer objectDrawer; // 画像の表示
71 private MeMoMaObjectHolder objectHolder; // オブジェクトの保持クラス
72 private MeMoMaConnectLineHolder lineHolder; // オブジェクト間の接続状態保持クラス
73 private OperationHistoryHolder historyHolder; // 操作履歴保持クラス
74 //private SelectFeatureListener featureListener = null; // 機能選択用のリスナ
76 private MeMoMaDataInOutManager dataInOutManager;
78 private OperationModeHolder drawModeHolder;
79 private LineStyleHolder lineStyleHolder;
81 private ConfirmationDialog confirmationDialog;
83 private ObjectDataInputDialog objectDataInputDialog;
85 private SelectLineShapeDialog lineSelectionDialog;
87 private ItemSelectionDialog itemSelectionDialog;
88 private ObjectOperationCommandHolder commandHolder;
90 private boolean isEditing = false;
91 private Integer selectedObjectKey = 0;
92 private Integer objectKeyToDelete = 0;
93 private Integer selectedContextKey = 0;
99 MeMoMaListener(AppCompatActivity argument, MeMoMaDataInOutManager inoutManager)
102 dataInOutManager = inoutManager;
103 historyHolder = new OperationHistoryHolder();
104 lineHolder = new MeMoMaConnectLineHolder(historyHolder);
105 objectHolder = new MeMoMaObjectHolder(argument, lineHolder, historyHolder);
106 editTextDialog = new TextEditDialog(parent, R.drawable.icon);
107 //lineHolder = new MeMoMaConnectLineHolder();
108 //featureListener = new SelectFeatureListener(parent);
109 drawModeHolder = new OperationModeHolder(parent);
111 lineStyleHolder = new LineStyleHolder(parent);
112 lineStyleHolder.prepare();
115 confirmationDialog = new ConfirmationDialog(argument);
116 confirmationDialog.prepare(this, android.R.drawable.ic_dialog_alert, parent.getString(R.string.createnew_title), parent.getString(R.string.createnew_message));
118 // オブジェクトのデータ入力ダイアログを生成
119 objectDataInputDialog = new ObjectDataInputDialog(argument, objectHolder);
120 objectDataInputDialog.setResultReceiver(this);
122 // 接続線の形状と太さを選択するダイアログを生成
123 lineSelectionDialog = new SelectLineShapeDialog(argument, lineStyleHolder);
124 lineSelectionDialog.setResultReceiver(this);
127 commandHolder = new ObjectOperationCommandHolder(argument);
128 itemSelectionDialog = new ItemSelectionDialog(argument);
129 itemSelectionDialog.prepare(this, commandHolder, parent.getString(R.string.object_operation));
132 objectDrawer = new MeMoMaCanvasDrawer(argument, objectHolder, lineStyleHolder, this);
134 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
135 String colorString = preferences.getString("backgroundColor", "0xff004000");
136 objectDrawer.setBackgroundColor(colorString);
141 * がっつりこのクラスにイベントリスナを接続する
144 public void prepareListener()
146 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
149 final ImageButton homeButton = parent.findViewById(R.id.HomeButton);
150 homeButton.setOnClickListener(this);
153 final ImageButton expandButton = parent.findViewById(R.id.ExpandButton);
154 expandButton.setOnClickListener(this);
157 final ImageButton createObjectButton = parent.findViewById(R.id.CreateObjectButton);
158 createObjectButton.setOnClickListener(this);
160 final ImageButton deleteObjectButton = parent.findViewById(R.id.DeleteObjectButton);
161 deleteObjectButton.setOnClickListener(this);
164 final ImageButton lineStyleButton = parent.findViewById(R.id.LineStyleButton);
165 lineStyleButton.setOnClickListener(this);
168 final ImageButton saveButton = parent.findViewById(R.id.SaveButton);
169 saveButton.setOnClickListener(this);
172 final GokigenSurfaceView surfaceView = parent.findViewById(R.id.GraphicView);
173 surfaceView.setOnTouchListener(this);
176 final SeekBar seekbar =parent.findViewById(R.id.ZoomInOut);
177 seekbar.setOnSeekBarChangeListener(objectDrawer);
178 int progress = preferences.getInt("zoomProgress", 50);
179 seekbar.setProgress(progress);
182 parent.setProgressBarIndeterminateVisibility(false);
191 public void finishListener()
200 public void prepareToStart()
202 // 設定に記録されているデータを画面に反映させる
203 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
206 //int objectStyle = Integer.parseInt(preferences.getString("drawStyle", "0"));
212 updateButtons(Integer.parseInt(preferences.getString("operationMode", "0")));
214 // 条件に合わせて、描画クラスを変更する
215 final GokigenSurfaceView surfaceView = parent.findViewById(R.id.GraphicView);
216 surfaceView.setCanvasDrawer(objectDrawer);
219 String backgroundString = preferences.getString("backgroundUri", "");
220 objectDrawer.setBackgroundUri(backgroundString);
226 public void shutdown()
235 public void onActivityResult(int requestCode, int resultCode, Intent data)
237 if ((requestCode == MENU_ID_INSERT_PICTURE)&&(resultCode == Activity.RESULT_OK))
241 // 取得したuri を preferenceに記録する
242 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
243 Uri backgroundUri = data.getData();
244 if (backgroundUri != null)
248 if (Build.VERSION.SDK_INT >= 19) {
249 final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION);
250 parent.getContentResolver().takePersistableUriPermission(backgroundUri, takeFlags);
252 SharedPreferences.Editor editor = preferences.edit();
253 editor.putString("backgroundUri", backgroundUri.toString());
261 updateBackgroundImage(backgroundUri.toString());
267 Log.v(Main.APP_IDENTIFIER, "Ex:" + ex.toString() + " " + ex.getMessage());
271 else if (requestCode == MENU_ID_PREFERENCES)
274 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
275 String colorString = preferences.getString("backgroundColor", "0xff004000");
276 objectDrawer.setBackgroundColor(colorString);
279 String backgroundString = preferences.getString("backgroundUri", "");
280 updateBackgroundImage(backgroundString);
282 Log.v(Main.APP_IDENTIFIER, "RETURENED PREFERENCES " + backgroundString);
285 else if (requestCode == MENU_ID_EXTEND)
287 // その他...今開いているファイルを読みなおす
288 dataInOutManager.loadFile((String) parent.getTitle());
304 private void updateBackgroundImage(String uri)
307 GokigenSurfaceView graphView = parent.findViewById(R.id.GraphicView);
310 objectDrawer.updateBackgroundBitmap(uri, graphView.getWidth(), graphView.getHeight());
320 public void onClick(View v)
324 //Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onClick() " + id);
325 if (id == R.id.MeMoMaInfo)
328 showInfoMessageEditDialog();
330 else if (id == R.id.LineStyleButton)
332 // ライン形状を変えるダイアログで変更するように変更する
333 selectLineShapeDialog();
335 else if (id == R.id.ExpandButton)
340 else if ((id == R.id.DeleteObjectButton)||(id == R.id.CreateObjectButton))
342 // 削除ボタン or 作成ボタンが押された時の処理
343 updateButtons(drawModeHolder.updateOperationMode(id));
345 else if (id == R.id.HomeButton)
348 // 表示倍率と並行移動についてリセットする
349 objectDrawer.resetScaleAndLocation((SeekBar) parent.findViewById(R.id.ZoomInOut));
354 else if (id == R.id.SaveButton)
365 public boolean onTouch(View v, MotionEvent event)
368 // int action = event.getAction();
370 //Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onTouch() " + id);
372 if (id == R.id.GraphicView)
375 v.onTouchEvent(event);
384 public boolean onKey(View v, int keyCode, KeyEvent event)
386 int action = event.getAction();
387 if ((action == KeyEvent.ACTION_DOWN)&&(keyCode == KeyEvent.KEYCODE_DPAD_CENTER))
390 Log.v(Main.APP_IDENTIFIER, "KEY ENTER");
393 Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onKey() ");
401 public Menu onCreateOptionsMenu(Menu menu)
404 MenuItem menuItem = menu.add(Menu.NONE, MENU_ID_NEW, Menu.NONE, parent.getString(R.string.createnew));
405 menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); /* for Android 3.1 */
406 menuItem.setIcon(android.R.drawable.ic_menu_add); // 丸プラス
409 menuItem = menu.add(Menu.NONE, MENU_ID_SHARE, Menu.NONE, parent.getString(R.string.shareContent));
410 menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); /* for Android 3.1 */
411 menuItem.setIcon(android.R.drawable.ic_menu_share);
414 menuItem = menu.add(Menu.NONE, MENU_ID_CAPTURE, Menu.NONE, parent.getString(R.string.capture_data));
415 menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); /* for Android 3.1 */
416 menuItem.setIcon(android.R.drawable.ic_menu_crop); // オブジェクトのキャプチャ
419 menuItem = menu.add(Menu.NONE, MENU_ID_UNDO, Menu.NONE, parent.getString(R.string.undo_operation));
420 menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); /* for Android 3.1 */
421 menuItem.setIcon(android.R.drawable.ic_menu_revert);
424 menuItem = menu.add(Menu.NONE, MENU_ID_ALIGN, Menu.NONE, parent.getString(R.string.align_data));
425 menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); /* for Android 3.1 */
426 menuItem.setIcon(android.R.drawable.ic_menu_rotate); // オブジェクトの整列
429 menuItem = menu.add(Menu.NONE, MENU_ID_RENAME, Menu.NONE, parent.getString(R.string.rename_title));
430 menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); /* for Android 3.1 */
431 menuItem.setIcon(android.R.drawable.ic_menu_edit); // タイトルの変更
434 menuItem = menu.add(Menu.NONE, MENU_ID_INSERT_PICTURE, Menu.NONE, parent.getString(R.string.background_data));
435 menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); /* for Android 3.1 */
436 menuItem.setIcon(android.R.drawable.ic_menu_gallery); // 壁紙の選択
439 menuItem = menu.add(Menu.NONE, MENU_ID_EXTEND, Menu.NONE, parent.getString(R.string.extend_menu));
440 menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); /* for Android 3.1 */
441 menuItem.setIcon(android.R.drawable.ic_menu_share); // 拡張メニュー...
444 menuItem = menu.add(Menu.NONE, MENU_ID_PREFERENCES, Menu.NONE, parent.getString(R.string.preference_name));
445 menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); /* for Android 3.1 */
446 menuItem.setIcon(android.R.drawable.ic_menu_preferences);
449 menuItem = menu.add(Menu.NONE, MENU_ID_ABOUT_GOKIGEN, Menu.NONE, parent.getString(R.string.about_gokigen));
450 menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); /* for Android 3.1 */
451 menuItem.setIcon(android.R.drawable.ic_menu_info_details);
461 public void onPrepareOptionsMenu(Menu menu)
463 menu.findItem(MENU_ID_NEW).setVisible(true);
464 menu.findItem(MENU_ID_UNDO).setVisible(false);
465 menu.findItem(MENU_ID_SHARE).setVisible(true);
466 menu.findItem(MENU_ID_CAPTURE).setVisible(true);
467 menu.findItem(MENU_ID_ALIGN).setVisible(true);
468 menu.findItem(MENU_ID_RENAME).setVisible(true);
469 menu.findItem(MENU_ID_INSERT_PICTURE).setVisible(true);
470 menu.findItem(MENU_ID_EXTEND).setVisible(true);
471 menu.findItem(MENU_ID_PREFERENCES).setVisible(true);
472 menu.findItem(MENU_ID_ABOUT_GOKIGEN).setVisible(true);
476 * メニューのアイテムが選択されたときの処理
480 public boolean onOptionsItemSelected(MenuItem item)
483 switch (item.getItemId())
485 case MENU_ID_PREFERENCES:
490 case MENU_ID_ABOUT_GOKIGEN:
513 // タイトル名の変更 (テキスト編集ダイアログを表示する)
514 showInfoMessageEditDialog();
518 case MENU_ID_INSERT_PICTURE:
524 case MENU_ID_CAPTURE:
525 // 画面キャプチャを指示された場合...
531 // 画面キャプチャ&共有を指示された場合...
536 case android.R.id.home:
539 showInfoMessageEditDialog();
545 result = undoOperation();
560 private boolean undoOperation()
566 * 画像ファイルの挿入 (データファイルの更新)
569 private void insertPicture()
572 if (Build.VERSION.SDK_INT >= 19) {
573 intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
574 intent.addCategory(Intent.CATEGORY_OPENABLE);
575 intent.setType("image/*");
576 //intent.setAction(Intent.ACTION_GET_CONTENT);
578 intent = new Intent();
579 intent.setType("image/*");
580 intent.setAction(Intent.ACTION_GET_CONTENT);
582 parent.startActivityForResult(intent, MENU_ID_INSERT_PICTURE);
590 private void doCapture(boolean isShare)
592 // 画面のスクリーンショットをとる処理を実行する
593 dataInOutManager.doScreenCapture((String) parent.getTitle(), objectHolder, objectDrawer, isShare);
603 private void showAboutGokigen()
605 // アプリの情報(クレジット)を表示する!
606 parent.showDialog(R.id.info_about_gokigen);
613 private void callExtendMenu()
615 // 現在表示中のデータをファイルに保存する
616 dataInOutManager.saveFile((String) parent.getTitle(), true);
618 // 現在読み込んでいるファイルのファイル名を生成する
619 String fullPath = dataInOutManager.getDataFileFullPath((String) parent.getTitle(), ".xml");
622 // (渡すデータを作って Intentとする)
623 Intent intent = new Intent();
625 intent.setAction(ExtensionActivity.MEMOMA_EXTENSION_LAUNCH_ACTIVITY);
626 intent.putExtra(ExtensionActivity.MEMOMA_EXTENSION_DATA_FULLPATH, fullPath);
627 intent.putExtra(ExtensionActivity.MEMOMA_EXTENSION_DATA_TITLE, (String) parent.getTitle());
629 // データ表示用Activityを起動する
630 parent.startActivityForResult(intent, MENU_ID_EXTEND);
637 private void prepareMeMoMaInfo()
639 // 設定に記録されているデータを画面のタイトルに反映させる
640 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
641 String memomaInfo = preferences.getString("MeMoMaInfo", parent.getString(R.string.app_name));
642 parent.setTitle(memomaInfo);
645 android.support.v7.app.ActionBar bar = parent.getSupportActionBar();
648 dataInOutManager.prepare(objectHolder, bar, memomaInfo);
651 //dataInOutManager.loadFile((String) parent.getTitle());
658 * @param forceOverwrite trueの時は、ファイル名が確定していたときは(確認せずに)上書き保存を自動で行う。
661 private void saveData(boolean forceOverwrite)
663 dataInOutManager.saveFile((String) parent.getTitle(), forceOverwrite);
670 private void alignData()
672 ObjectAligner aligner = new ObjectAligner(parent, this);
673 aligner.execute(objectHolder);
680 private void showInfoMessageEditDialog()
682 parent.showDialog(R.id.editTextArea);
686 * 新規作成が指示されたとき...全部クリアして作りなおして良いか確認する。
689 private void createNewScreen()
691 parent.showDialog(R.id.confirmation);
697 private void selectLineShapeDialog()
699 // 接続線の設定ダイアログを表示する...
700 parent.showDialog(R.id.selectline_dialog);
704 * メッセージ編集ダイアログの表示を準備する
707 private void prepareInfoMessageEditDialog(Dialog dialog)
709 String message = (String) parent.getTitle();
710 editTextDialog.prepare(dialog, this, parent.getString(R.string.dataTitle), message, true);
714 * メッセージ編集ダイアログの表示を準備する
717 private void prepareConfirmationDialog(Dialog dialog)
719 // Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::prepareConfirmationDialog() " );
723 * オブジェクト入力用ダイアログの表示を準備する
726 private void prepareObjectInputDialog(Dialog dialog)
728 Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::prepareObjectInputDialog(), key: " + selectedObjectKey);
731 objectDataInputDialog.prepareObjectInputDialog(dialog, selectedObjectKey);
736 * アイテム選択ダイアログの表示を準備する
740 private void prepareItemSelectionDialog(Dialog dialog)
743 // (動的変更時。。。今回は固定なので何もしない)
747 * 接続線選択用ダイアログの表示を準備する
750 private void prepareLineSelectionDialog(Dialog dialog)
752 Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::prepareLineSelectionDialog(), key: " + selectedObjectKey);
755 lineSelectionDialog.prepareSelectLineShapeDialog(dialog, selectedObjectKey);
761 private void showPreference()
766 Intent prefIntent = new Intent(parent,Preference.class);
767 parent.startActivityForResult(prefIntent, MENU_ID_PREFERENCES);
773 //updater.showMessage("ERROR", MainUpdater.SHOWMETHOD_DONTCARE);
781 private void setLineStyle()
783 int buttonId = LineStyleHolder.getLineShapeImageId(lineStyleHolder.getLineStyle(), lineStyleHolder.getLineShape());
784 final ImageButton lineStyleObj = parent.findViewById(R.id.LineStyleButton);
785 lineStyleObj.setImageResource(buttonId);
792 public void objectCreated()
794 // ここで動作モードを移動モードに戻す。
795 drawModeHolder.changeOperationMode(OperationModeHolder.OPERATIONMODE_MOVE);
796 updateButtons(OperationModeHolder.OPERATIONMODE_MOVE);
806 public int touchedVacantArea()
808 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
809 return (Integer.parseInt(preferences.getString("operationMode", "0")));
816 public int touchUppedVacantArea()
818 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
819 return (Integer.parseInt(preferences.getString("operationMode", "0")));
823 * オブジェクトを本当に削除して良いか確認した後に、オブジェクトを削除する。
827 private void removeObject(Integer key)
829 // 本当に消して良いか、確認をするダイアログを表示して、OKが押されたら消す。
830 AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(parent);
831 alertDialogBuilder.setTitle(parent.getString(R.string.deleteconfirm_title));
832 alertDialogBuilder.setIcon(android.R.drawable.ic_dialog_alert);
833 alertDialogBuilder.setMessage(parent.getString(R.string.deleteconfirm_message));
835 // 削除するオブジェクトのキーを覚えこむ。
836 objectKeyToDelete = key;
839 alertDialogBuilder.setPositiveButton(parent.getString(R.string.confirmYes), new DialogInterface.OnClickListener()
841 public void onClick(DialogInterface dialog, int id)
843 // 削除モードの時... 確認後削除だけど、今は確認なしで削除を行う。
844 objectHolder.removePosition(objectKeyToDelete);
846 // 削除するオブジェクトに接続されている線もすべて削除する
847 objectHolder.getConnectLineHolder().removeAllConnection(objectKeyToDelete);
852 // ここで動作モードを削除モードから移動モードに戻す。
853 drawModeHolder.changeOperationMode(OperationModeHolder.OPERATIONMODE_MOVE);
854 updateButtons(OperationModeHolder.OPERATIONMODE_MOVE);
863 alertDialogBuilder.setNegativeButton(parent.getString(R.string.confirmNo), new DialogInterface.OnClickListener()
865 public void onClick(DialogInterface dialog, int id)
871 // ダイアログはキャンセル可能に設定する
872 alertDialogBuilder.setCancelable(true);
875 AlertDialog alertDialog = alertDialogBuilder.create();
884 private void duplicateObject(Integer key)
887 objectHolder.duplicatePosition(key);
898 private void expandObject(Integer key)
901 objectHolder.expandObjectSize(key);
911 private void shrinkObject(Integer key)
914 objectHolder.shrinkObjectSize(key);
920 private void setButtonBorder(ImageButton button, boolean isHighlight)
924 BitmapDrawable btnBackgroundShape = (BitmapDrawable)button.getBackground();
927 // btnBackgroundShape.setColorFilter(Color.rgb(51, 181, 229), Mode.LIGHTEN);
928 btnBackgroundShape.setColorFilter(Color.BLUE, Mode.LIGHTEN);
932 btnBackgroundShape.setColorFilter(Color.BLACK, Mode.LIGHTEN);
938 Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::setButtonBorder(): " + ex.toString());
946 private void updateButtons(int mode)
948 final ImageButton createObjectButton = parent.findViewById(R.id.CreateObjectButton);
949 final ImageButton deleteObjectButton = parent.findViewById(R.id.DeleteObjectButton);
951 if (mode == OperationModeHolder.OPERATIONMODE_DELETE)
953 setButtonBorder(createObjectButton, false);
954 setButtonBorder(deleteObjectButton, true);
956 else if (mode == OperationModeHolder.OPERATIONMODE_CREATE)
958 setButtonBorder(createObjectButton, true);
959 setButtonBorder(deleteObjectButton, false);
961 else // if (mode == OperationModeHolder.OPERATIONMODE_MOVE)
963 setButtonBorder(createObjectButton, false);
964 setButtonBorder(deleteObjectButton, false);
970 * オブジェクトが選択された(長押しで!)
973 public void objectSelectedContext(Integer key)
975 Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::objectSelectedContext(), key:" + key);
976 selectedContextKey = key;
978 // オブジェクトのアイテム選択ダイアログを表示する...
979 parent.showDialog(MENU_ID_OPERATION);
988 public boolean objectSelected(Integer key)
990 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
991 int operationMode = Integer.parseInt(preferences.getString("operationMode", "0"));
992 if (operationMode == OperationModeHolder.OPERATIONMODE_DELETE)
999 //if ((operationMode == OperationModeHolder.OPERATIONMODE_MOVE)||
1000 // (operationMode == OperationModeHolder.OPERATIONMODE_CREATE))
1003 selectedObjectKey = key;
1004 Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::objectSelected() key : " + key);
1006 // オブジェクトの詳細設定ダイアログを表示する...
1007 parent.showDialog(R.id.objectinput_dialog);
1016 public Dialog onCreateDialog(int id)
1018 if (id == R.id.info_about_gokigen)
1021 CreditDialog dialog = new CreditDialog(parent);
1022 return (dialog.getDialog());
1024 if (id == R.id.editTextArea)
1027 return (editTextDialog.getDialog());
1029 if (id == R.id.confirmation)
1032 return (confirmationDialog.getDialog());
1034 if (id == R.id.objectinput_dialog)
1036 // オブジェクト入力のダイアログを表示する
1037 return (objectDataInputDialog.getDialog());
1039 if (id == MENU_ID_OPERATION)
1041 // アイテム選択ダイアログの準備を行う
1042 return (itemSelectionDialog.getDialog());
1044 if (id == R.id.selectline_dialog)
1047 return (lineSelectionDialog.getDialog());
1056 public void onPrepareDialog(int id, Dialog dialog)
1058 if (id == R.id.editTextArea)
1061 prepareInfoMessageEditDialog(dialog);
1064 if (id == R.id.confirmation)
1067 prepareConfirmationDialog(dialog);
1070 if (id == R.id.objectinput_dialog)
1072 // オブジェクト入力のダイアログを表示する
1073 prepareObjectInputDialog(dialog);
1075 if (id == MENU_ID_OPERATION)
1077 // オブジェクト操作選択のダイアログを表示する
1078 prepareItemSelectionDialog(dialog);
1080 if (id == R.id.selectline_dialog)
1083 prepareLineSelectionDialog(dialog);
1091 public void acceptConfirmation()
1094 Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::acceptConfirmation()");
1097 objectHolder.removeAllPositions(); // オブジェクトの保持クラス
1098 objectHolder.getConnectLineHolder().removeAllLines(); // オブジェクト間の接続状態保持クラス
1100 // 画面の倍率と表示位置を初期状態に戻す
1101 if (objectDrawer != null)
1103 final SeekBar zoomBar = (SeekBar) parent.findViewById(R.id.ZoomInOut);
1104 objectDrawer.resetScaleAndLocation(zoomBar);
1108 historyHolder.reset();
1111 // 題名を "無題"に変更し、関係情報をクリアする
1112 String newName = parent.getString(R.string.no_name);
1113 parent.setTitle(newName);
1114 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
1115 SharedPreferences.Editor editor = preferences.edit();
1116 editor.putString("MeMoMaInfo", newName);
1121 redrawSurfaceview();
1124 showInfoMessageEditDialog();
1132 private void redrawSurfaceview()
1134 final GokigenSurfaceView surfaceview = parent.findViewById(R.id.GraphicView);
1135 surfaceview.doDraw();
1142 public void rejectConfirmation()
1144 Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::rejectConfirmation()");
1151 public void objectAligned()
1154 redrawSurfaceview();
1158 * オブジェクト編集ダイアログが閉じられた時の処理
1161 public void finishObjectInput()
1164 redrawSurfaceview();
1168 * オブジェクト編集ダイアログが閉じられた時の処理
1171 public void cancelObjectInput()
1182 public boolean isEditing()
1192 public void setIsEditing(boolean value)
1201 public void itemSelected(int index, String itemValue)
1204 Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::itemSelected() : " + itemValue + " [" + index + "]");
1206 if (index == ObjectOperationCommandHolder.OBJECTOPERATION_DELETE)
1209 removeObject(selectedContextKey);
1211 else if (index == ObjectOperationCommandHolder.OBJECTOPERATION_DUPLICATE)
1214 duplicateObject(selectedContextKey);
1216 else if (index == ObjectOperationCommandHolder.OBJECTOPERATION_SIZEBIGGER)
1219 expandObject(selectedContextKey);
1221 else if (index == ObjectOperationCommandHolder.OBJECTOPERATION_SIZESMALLER)
1224 shrinkObject(selectedContextKey);
1232 public void itemSelectedMulti(String[] items, boolean[] status)
1236 public void canceledSelection()
1241 public void onSaveInstanceState(Bundle outState)
1244 Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onSaveInstanceState() : " + outState.toString() );
1247 public void onRestoreInstanceState(Bundle savedInstanceState)
1250 Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onRestoreInstanceState() : " + savedInstanceState.toString());
1253 public boolean finishTextEditDialog(String message)
1255 if ((message == null)||(message.length() == 0))
1257 // データが入力されていなかったので、何もしない。
1264 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
1265 SharedPreferences.Editor editor = preferences.edit();
1266 editor.putString("MeMoMaInfo", message);
1270 parent.setTitle(message);
1276 dataInOutManager.updateFileList(message, parent.getSupportActionBar());
1281 e.printStackTrace();
1285 public boolean cancelTextEditDialog()
1294 public void finishSelectLineShape(int style, int shape, int thickness)
1296 int buttonId = LineStyleHolder.getLineShapeImageId(style, shape);
1297 final ImageButton lineStyleObj =parent.findViewById(R.id.LineStyleButton);
1298 lineStyleObj.setImageResource(buttonId);
1299 //Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::finishSelectLineShape() buttonId:" + buttonId);
1306 public void cancelSelectLineShape()