OSDN Git Service

オブジェクトの削除以外の操作をヒストリに残すようにした。
[gokigen/MeMoMa.git] / app / src / main / java / jp / sourceforge / gokigen / memoma / MeMoMaListener.java
index 3b01b87..69f2bef 100644 (file)
@@ -30,9 +30,11 @@ import jp.sourceforge.gokigen.memoma.dialogs.ConfirmationDialog;
 import jp.sourceforge.gokigen.memoma.dialogs.CreditDialog;
 import jp.sourceforge.gokigen.memoma.dialogs.ItemSelectionDialog;
 import jp.sourceforge.gokigen.memoma.dialogs.TextEditDialog;
+import jp.sourceforge.gokigen.memoma.drawers.GokigenSurfaceView;
 import jp.sourceforge.gokigen.memoma.drawers.MeMoMaCanvasDrawer;
 import jp.sourceforge.gokigen.memoma.extension.ExtensionActivity;
-import jp.sourceforge.gokigen.memoma.fileio.MeMoMaDataInOutManager;
+import jp.sourceforge.gokigen.memoma.holders.OperationHistoryHolder;
+import jp.sourceforge.gokigen.memoma.io.MeMoMaDataInOutManager;
 import jp.sourceforge.gokigen.memoma.holders.LineStyleHolder;
 import jp.sourceforge.gokigen.memoma.holders.MeMoMaConnectLineHolder;
 import jp.sourceforge.gokigen.memoma.holders.MeMoMaObjectHolder;
@@ -51,1226 +53,1256 @@ import jp.sourceforge.gokigen.memoma.preference.Preference;
  */
 public class MeMoMaListener implements OnClickListener, OnTouchListener, OnKeyListener, IObjectSelectionReceiver, ConfirmationDialog.IResultReceiver, ObjectDataInputDialog.IResultReceiver, ItemSelectionDialog.ISelectionItemReceiver, TextEditDialog.ITextEditResultReceiver, ObjectAligner.IAlignCallback, SelectLineShapeDialog.IResultReceiver
 {
-           public static final int MENU_ID_PREFERENCES = (Menu.FIRST + 1);    // 設定画面の表示
-           public static final int MENU_ID_ABOUT_GOKIGEN = (Menu.FIRST + 2);  // アプリケーションの情報表示
-           public static final int MENU_ID_NEW = (Menu.FIRST + 3);                     // 新規作成
-           public static final int MENU_ID_EXTEND= (Menu.FIRST + 4);                   // 拡張機能
-           public static final int MENU_ID_ALIGN = (Menu.FIRST + 5);                     // オブジェクトの整列
-           public static final int MENU_ID_INSERT_PICTURE = (Menu.FIRST + 6);   // 画像の指定
-           public static final int MENU_ID_OPERATION = (Menu.FIRST + 7);           // 操作コマンド
-           public static final int MENU_ID_RENAME = (Menu.FIRST + 8);                // リネーム
-           public static final int MENU_ID_CAPTURE = (Menu.FIRST + 9);              // 画像のキャプチャ
-           public static final int MENU_ID_SHARE = (Menu.FIRST + 10);              // 画像の共有
-           
-
-           private AppCompatActivity parent = null;  // 親分
-           private TextEditDialog editTextDialog = null;   // テキスト編集用ダイアログ
-           private MeMoMaCanvasDrawer objectDrawer = null; // 画像の表示
-           private MeMoMaObjectHolder objectHolder = null;  // オブジェクトの保持クラス
-           private MeMoMaConnectLineHolder lineHolder =null;  // オブジェクト間の接続状態保持クラス
-           //private SelectFeatureListener featureListener = null;  // 機能選択用のリスナ
-           
-           private MeMoMaDataInOutManager dataInOutManager = null;
-           
-           private OperationModeHolder drawModeHolder = null;
-           private LineStyleHolder lineStyleHolder = null;
-           
-           private ConfirmationDialog confirmationDialog = null;
-           
-           private ObjectDataInputDialog objectDataInputDialog = null;
-           
-           private SelectLineShapeDialog lineSelectionDialog = null;
-           
-           private ItemSelectionDialog itemSelectionDialog = null;
-           private ObjectOperationCommandHolder commandHolder = null;
-           
-           private boolean isEditing = false;
-           private Integer  selectedObjectKey = 0;
-           private Integer  objectKeyToDelete = 0;
-           private Integer selectedContextKey = 0;
-
-           /**
-            *  コンストラクタ
-            * @param argument
-            */
-           public MeMoMaListener(AppCompatActivity argument, MeMoMaDataInOutManager inoutManager)
-           {
-               parent = argument;
-               dataInOutManager = inoutManager;
-               lineHolder = new MeMoMaConnectLineHolder();
-               objectHolder = new MeMoMaObjectHolder(argument, lineHolder);
-               editTextDialog = new TextEditDialog(parent, R.drawable.icon);
-               //lineHolder = new MeMoMaConnectLineHolder();
-               //featureListener = new SelectFeatureListener(parent);
-               drawModeHolder = new OperationModeHolder(parent);
-
-               lineStyleHolder = new LineStyleHolder(parent);
-               lineStyleHolder.prepare();
-
-               // 新規作成時の確認ダイアログについて
-               confirmationDialog = new ConfirmationDialog(argument);          
-            confirmationDialog.prepare(this, android.R.drawable.ic_dialog_alert, parent.getString(R.string.createnew_title), parent.getString(R.string.createnew_message));            
-
-            // オブジェクトのデータ入力ダイアログを生成
-            objectDataInputDialog = new ObjectDataInputDialog(argument, objectHolder);
-            objectDataInputDialog.setResultReceiver(this);
-            
-            // 接続線の形状と太さを選択するダイアログを生成
-            lineSelectionDialog = new SelectLineShapeDialog(argument, lineStyleHolder);
-            lineSelectionDialog.setResultReceiver(this);
-            
-            // アイテム選択ダイアログを生成
-            commandHolder = new ObjectOperationCommandHolder(argument);
-            itemSelectionDialog = new ItemSelectionDialog(argument);
-            itemSelectionDialog.prepare(this,  commandHolder, parent.getString(R.string.object_operation));
-            
-               // 描画クラスの生成
-               objectDrawer = new MeMoMaCanvasDrawer(argument, objectHolder, lineStyleHolder, this);
-
-               SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
-               String colorString = preferences.getString("backgroundColor", "0xff004000");
-               objectDrawer.setBackgroundColor(colorString);
-
-           }
-
-           /**
-            *  がっつりこのクラスにイベントリスナを接続する
-            * 
-            */
-           public void prepareListener()
-           {
-               SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
-
-               // 表示位置リセットボタン
-               final ImageButton homeButton = (ImageButton) parent.findViewById(R.id.HomeButton);
-               homeButton.setOnClickListener(this);
-
-               // 拡張ボタン
-               final ImageButton expandButton = (ImageButton) parent.findViewById(R.id.ExpandButton);
-               expandButton.setOnClickListener(this);
-
-               // 作成ボタン
-               final ImageButton createObjectButton = (ImageButton) parent.findViewById(R.id.CreateObjectButton);
-               createObjectButton.setOnClickListener(this);
-
-               final ImageButton deleteObjectButton = (ImageButton) parent.findViewById(R.id.DeleteObjectButton);
-            deleteObjectButton.setOnClickListener(this);
-
-               // 線の形状切り替えボタン
-               final ImageButton lineStyleButton = (ImageButton) parent.findViewById(R.id.LineStyleButton);
-               lineStyleButton.setOnClickListener(this);
-
-               // データ保存ボタン
-               final ImageButton saveButton = (ImageButton) parent.findViewById(R.id.SaveButton);
-               saveButton.setOnClickListener(this);
-
-               // 画面描画クラス
-               final GokigenSurfaceView surfaceView = (GokigenSurfaceView) parent.findViewById(R.id.GraphicView);
-               surfaceView.setOnTouchListener(this);
-                               
-               // スライドバーが動かされた時の処理
-               final SeekBar seekbar = (SeekBar) parent.findViewById(R.id.ZoomInOut);
-               seekbar.setOnSeekBarChangeListener(objectDrawer);
-               int progress = preferences.getInt("zoomProgress", 50);
-               seekbar.setProgress(progress);
-
-               // 「実行中」の表示を消す
-               parent.setProgressBarIndeterminateVisibility(false);
-               
-            //// 起動時にデータを読み出す          
-               prepareMeMoMaInfo();
-           }
-
-           /**
-            *  終了準備
-            */
-           public void finishListener()
-           {
-               // 終了時に状態を保存する
-            saveData(true);
-           }
-
-           /**
-            *  スタート準備
-            */
-           public void prepareToStart()
-           {
-               //  設定に記録されているデータを画面に反映させる
-               SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
-
-               // 描画オブジェクトの形状を設定する
-               //int objectStyle = Integer.parseInt(preferences.getString("drawStyle", "0"));
-
-               // ラインの形状を取得し、設定する
-               setLineStyle();
-
-               // 操作モードを画面に反映させる
-               updateButtons(Integer.parseInt(preferences.getString("operationMode", "0")));
-
-               // 条件に合わせて、描画クラスを変更する
-               final GokigenSurfaceView surfaceView = (GokigenSurfaceView) parent.findViewById(R.id.GraphicView);
-               surfaceView.setCanvasDrawer(objectDrawer);
-
-               // 背景画像(の名前)を設定しておく
-               String backgroundString = preferences.getString("backgroundUri", "");
-            objectDrawer.setBackgroundUri(backgroundString);
-           }
-
-           /**
-            *  終了準備
-            */
-           public void shutdown()
-           {
-               
-           }
-           
-           /**
-            *  他画面から戻ってきたとき...
-                *
-            */
-           public void onActivityResult(int requestCode, int resultCode, Intent data)
-           {
-               if ((requestCode == MENU_ID_INSERT_PICTURE)&&(resultCode == Activity.RESULT_OK))
-               {
-                   try
-                   {
-                       // 取得したuri を preferenceに記録する
-                       SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
-                       Uri backgroundUri = data.getData();
-                       if (backgroundUri != null)
-                       {
-                           try
-                        {
-                            if (Build.VERSION.SDK_INT >= 19) {
-                                final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION);
-                                parent.getContentResolver().takePersistableUriPermission(backgroundUri, takeFlags);
-                            }
-                            SharedPreferences.Editor editor = preferences.edit();
-                            editor.putString("backgroundUri", backgroundUri.toString());
-                            editor.apply();
-                        }
-                        catch (Exception e)
-                        {
-                            e.printStackTrace();
+    private static final int MENU_ID_PREFERENCES = (Menu.FIRST + 1);    // 設定画面の表示
+    private static final int MENU_ID_ABOUT_GOKIGEN = (Menu.FIRST + 2);  // アプリケーションの情報表示
+    private static final int MENU_ID_NEW = (Menu.FIRST + 3);                     // 新規作成
+    private static final int MENU_ID_EXTEND= (Menu.FIRST + 4);                   // 拡張機能
+    private static final int MENU_ID_ALIGN = (Menu.FIRST + 5);                     // オブジェクトの整列
+    private static final int MENU_ID_INSERT_PICTURE = (Menu.FIRST + 6);   // 画像の指定
+    private static final int MENU_ID_OPERATION = (Menu.FIRST + 7);           // 操作コマンド
+    private static final int MENU_ID_RENAME = (Menu.FIRST + 8);                // リネーム
+    private static final int MENU_ID_CAPTURE = (Menu.FIRST + 9);              // 画像のキャプチャ
+    private static final int MENU_ID_SHARE = (Menu.FIRST + 10);              // 画像の共有
+    private static final int MENU_ID_UNDO = (Menu.FIRST + 11);              // 処理の UNDO
+
+    private AppCompatActivity parent;  // 親分
+    private TextEditDialog editTextDialog;   // テキスト編集用ダイアログ
+    private MeMoMaCanvasDrawer objectDrawer; // 画像の表示
+    private MeMoMaObjectHolder objectHolder;  // オブジェクトの保持クラス
+    private MeMoMaConnectLineHolder lineHolder;  // オブジェクト間の接続状態保持クラス
+    private OperationHistoryHolder historyHolder;  // 操作履歴保持クラス
+    //private SelectFeatureListener featureListener = null;  // 機能選択用のリスナ
+
+    private MeMoMaDataInOutManager dataInOutManager;
+
+    private OperationModeHolder drawModeHolder;
+    private LineStyleHolder lineStyleHolder;
+
+    private ConfirmationDialog confirmationDialog;
+
+    private ObjectDataInputDialog objectDataInputDialog;
+
+    private SelectLineShapeDialog lineSelectionDialog;
+
+    private ItemSelectionDialog itemSelectionDialog;
+    private ObjectOperationCommandHolder commandHolder;
+
+    private boolean isEditing = false;
+    private Integer  selectedObjectKey = 0;
+    private Integer  objectKeyToDelete = 0;
+    private Integer selectedContextKey = 0;
+
+    /**
+     *  コンストラクタ
+     *
+     */
+    MeMoMaListener(AppCompatActivity argument, MeMoMaDataInOutManager inoutManager)
+    {
+        parent = argument;
+        dataInOutManager = inoutManager;
+        historyHolder = new OperationHistoryHolder();
+        lineHolder = new MeMoMaConnectLineHolder(historyHolder);
+        objectHolder = new MeMoMaObjectHolder(argument, lineHolder, historyHolder);
+        editTextDialog = new TextEditDialog(parent, R.drawable.icon);
+        //lineHolder = new MeMoMaConnectLineHolder();
+        //featureListener = new SelectFeatureListener(parent);
+        drawModeHolder = new OperationModeHolder(parent);
+
+        lineStyleHolder = new LineStyleHolder(parent);
+        lineStyleHolder.prepare();
+
+        // 新規作成時の確認ダイアログについて
+        confirmationDialog = new ConfirmationDialog(argument);
+        confirmationDialog.prepare(this, android.R.drawable.ic_dialog_alert, parent.getString(R.string.createnew_title), parent.getString(R.string.createnew_message));
+
+        // オブジェクトのデータ入力ダイアログを生成
+        objectDataInputDialog = new ObjectDataInputDialog(argument, objectHolder);
+        objectDataInputDialog.setResultReceiver(this);
+
+        // 接続線の形状と太さを選択するダイアログを生成
+        lineSelectionDialog = new SelectLineShapeDialog(argument, lineStyleHolder);
+        lineSelectionDialog.setResultReceiver(this);
+
+        // アイテム選択ダイアログを生成
+        commandHolder = new ObjectOperationCommandHolder(argument);
+        itemSelectionDialog = new ItemSelectionDialog(argument);
+        itemSelectionDialog.prepare(this,  commandHolder, parent.getString(R.string.object_operation));
+
+        // 描画クラスの生成
+        objectDrawer = new MeMoMaCanvasDrawer(argument, objectHolder, lineStyleHolder, this);
+
+        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
+        String colorString = preferences.getString("backgroundColor", "0xff004000");
+        objectDrawer.setBackgroundColor(colorString);
+
+    }
+
+    /**
+     *  がっつりこのクラスにイベントリスナを接続する
+     *
+     */
+    public void prepareListener()
+    {
+        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
+
+        // 表示位置リセットボタン
+        final ImageButton homeButton = parent.findViewById(R.id.HomeButton);
+        homeButton.setOnClickListener(this);
+
+        // 拡張ボタン
+        final ImageButton expandButton = parent.findViewById(R.id.ExpandButton);
+        expandButton.setOnClickListener(this);
+
+        // 作成ボタン
+        final ImageButton createObjectButton = parent.findViewById(R.id.CreateObjectButton);
+        createObjectButton.setOnClickListener(this);
+
+        final ImageButton deleteObjectButton = parent.findViewById(R.id.DeleteObjectButton);
+        deleteObjectButton.setOnClickListener(this);
+
+        // 線の形状切り替えボタン
+        final ImageButton lineStyleButton = parent.findViewById(R.id.LineStyleButton);
+        lineStyleButton.setOnClickListener(this);
+
+        // データ保存ボタン
+        final ImageButton saveButton = parent.findViewById(R.id.SaveButton);
+        saveButton.setOnClickListener(this);
+
+        // 画面描画クラス
+        final GokigenSurfaceView surfaceView = parent.findViewById(R.id.GraphicView);
+        surfaceView.setOnTouchListener(this);
+
+        // スライドバーが動かされた時の処理
+        final SeekBar seekbar =parent.findViewById(R.id.ZoomInOut);
+        seekbar.setOnSeekBarChangeListener(objectDrawer);
+        int progress = preferences.getInt("zoomProgress", 50);
+        seekbar.setProgress(progress);
+
+        // 「実行中」の表示を消す
+        parent.setProgressBarIndeterminateVisibility(false);
+
+        //// 起動時にデータを読み出す
+        prepareMeMoMaInfo();
+    }
+
+    /**
+     *  終了準備
+     */
+    public void finishListener()
+    {
+        // 終了時に状態を保存する
+        saveData(true);
+    }
+
+    /**
+     *  スタート準備
+     */
+    public void prepareToStart()
+    {
+        //  設定に記録されているデータを画面に反映させる
+        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
+
+        // 描画オブジェクトの形状を設定する
+        //int objectStyle = Integer.parseInt(preferences.getString("drawStyle", "0"));
+
+        // ラインの形状を取得し、設定する
+        setLineStyle();
+
+        // 操作モードを画面に反映させる
+        updateButtons(Integer.parseInt(preferences.getString("operationMode", "0")));
+
+        // 条件に合わせて、描画クラスを変更する
+        final GokigenSurfaceView surfaceView = parent.findViewById(R.id.GraphicView);
+        surfaceView.setCanvasDrawer(objectDrawer);
+
+        // 背景画像(の名前)を設定しておく
+        String backgroundString = preferences.getString("backgroundUri", "");
+        objectDrawer.setBackgroundUri(backgroundString);
+    }
+
+    /**
+     *  終了準備
+     */
+    public void shutdown()
+    {
+
+    }
+
+    /**
+     *  他画面から戻ってきたとき...
+     *
+     */
+    public void onActivityResult(int requestCode, int resultCode, Intent data)
+    {
+        if ((requestCode == MENU_ID_INSERT_PICTURE)&&(resultCode == Activity.RESULT_OK))
+        {
+            try
+            {
+                // 取得したuri を preferenceに記録する
+                SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
+                Uri backgroundUri = data.getData();
+                if (backgroundUri != null)
+                {
+                    try
+                    {
+                        if (Build.VERSION.SDK_INT >= 19) {
+                            final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION);
+                            parent.getContentResolver().takePersistableUriPermission(backgroundUri, takeFlags);
                         }
-                                               // 背景画像イメージの更新処理
-                                               updateBackgroundImage(backgroundUri.toString());
-                                       }
-                           System.gc();
-                   }
-                   catch (Exception ex)
-                   {
-                       Log.v(Main.APP_IDENTIFIER, "Ex:" + ex.toString() + " " + ex.getMessage());
-                   }
-                   return;
-               }
-               else if (requestCode == MENU_ID_PREFERENCES)
+                        SharedPreferences.Editor editor = preferences.edit();
+                        editor.putString("backgroundUri", backgroundUri.toString());
+                        editor.apply();
+                    }
+                    catch (Exception e)
+                    {
+                        e.printStackTrace();
+                    }
+                    // 背景画像イメージの更新処理
+                    updateBackgroundImage(backgroundUri.toString());
+                }
+                System.gc();
+            }
+            catch (Exception ex)
             {
-                       // 背景色、背景画像の設定を行う。
-               SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
-               String colorString = preferences.getString("backgroundColor", "0xff004000");
-               objectDrawer.setBackgroundColor(colorString);
+                Log.v(Main.APP_IDENTIFIER, "Ex:" + ex.toString() + " " + ex.getMessage());
+            }
+            return;
+        }
+        else if (requestCode == MENU_ID_PREFERENCES)
+        {
+            // 背景色、背景画像の設定を行う。
+            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
+            String colorString = preferences.getString("backgroundColor", "0xff004000");
+            objectDrawer.setBackgroundColor(colorString);
 
-               // 背景画像イメージの更新処理
-               String backgroundString = preferences.getString("backgroundUri", "");
-               updateBackgroundImage(backgroundString);
+            // 背景画像イメージの更新処理
+            String backgroundString = preferences.getString("backgroundUri", "");
+            updateBackgroundImage(backgroundString);
 
-               Log.v(Main.APP_IDENTIFIER, "RETURENED PREFERENCES " + backgroundString);
+            Log.v(Main.APP_IDENTIFIER, "RETURENED PREFERENCES " + backgroundString);
+
+        }
+        else if (requestCode == MENU_ID_EXTEND)
+        {
+            // その他...今開いているファイルを読みなおす
+            dataInOutManager.loadFile((String) parent.getTitle());
+        }
+        else
+        {
+            // 画面表示の準備を実行...
+            //prepareToStart();
+            return;
+        }
+        // 画面の再描画を指示する
+        redrawSurfaceview();
+    }
+
+    /**
+     *    背景画像イメージの更新処理
+     *
+     */
+    private void updateBackgroundImage(String uri)
+    {
+        // 背景画像イメージの更新処理
+        GokigenSurfaceView graphView = parent.findViewById(R.id.GraphicView);
+
+        // ビットマップを設定する
+        objectDrawer.updateBackgroundBitmap(uri, graphView.getWidth(), graphView.getHeight());
+
+        // 画面の再描画指示
+        graphView.doDraw();
+    }
+
+
+    /**
+     *   クリックされたときの処理
+     */
+    public void onClick(View v)
+    {
+        int id = v.getId();
+
+        //Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onClick() " + id);
+        if (id == R.id.MeMoMaInfo)
+        {
+            // テキスト編集ダイアログを表示する
+            showInfoMessageEditDialog();
+        }
+        else if (id == R.id.LineStyleButton)
+        {
+            // ライン形状を変えるダイアログで変更するように変更する
+            selectLineShapeDialog();
+        }
+        else if (id == R.id.ExpandButton)
+        {
+            // 拡張メニューを呼び出す
+            callExtendMenu();
+        }
+        else if ((id == R.id.DeleteObjectButton)||(id == R.id.CreateObjectButton))
+        {
+            // 削除ボタン or 作成ボタンが押された時の処理
+            updateButtons(drawModeHolder.updateOperationMode(id));
+        }
+        else if (id == R.id.HomeButton)
+        {
+            //  表示位置をリセットする
+            // 表示倍率と並行移動についてリセットする
+            objectDrawer.resetScaleAndLocation((SeekBar) parent.findViewById(R.id.ZoomInOut));
 
-            }
-               else if (requestCode == MENU_ID_EXTEND)
-               {
-                       // その他...今開いているファイルを読みなおす
-                   dataInOutManager.loadFile((String) parent.getTitle());
-               }
-               else
-               {
-                       // 画面表示の準備を実行...
-                       //prepareToStart();
-                       return;
-               }
             // 画面の再描画を指示する
-                   redrawSurfaceview();
-           }
-
-           /**
-            *    背景画像イメージの更新処理
-            * 
-            */
-           private void updateBackgroundImage(String uri)
-           {
-             // 背景画像イメージの更新処理                
-            GokigenSurfaceView graphView = (GokigenSurfaceView) parent.findViewById(R.id.GraphicView);
-
-            // ビットマップを設定する
-            objectDrawer.updateBackgroundBitmap(uri, graphView.getWidth(), graphView.getHeight());
-
-            // 画面の再描画指示
-            graphView.doDraw();
-           }
-           
-           
-           /**
-            *   クリックされたときの処理
-            */
-           public void onClick(View v)
-           {
-                int id = v.getId();
-
-                //Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onClick() " + id);
-                if (id == R.id.MeMoMaInfo)
-                {
-                        // テキスト編集ダイアログを表示する
-                 showInfoMessageEditDialog();
-                }
-                else if (id == R.id.LineStyleButton)
-                {
-                        // ライン形状を変えるダイアログで変更するように変更する
-                        selectLineShapeDialog();
-                }
-                else if (id == R.id.ExpandButton)
-                {
-                        // 拡張メニューを呼び出す
-                        callExtendMenu();
-                }
-                else if ((id == R.id.DeleteObjectButton)||(id == R.id.CreateObjectButton))
-                {
-                        // 削除ボタン or 作成ボタンが押された時の処理
-                        updateButtons(drawModeHolder.updateOperationMode(id));
-                }
-                else if (id == R.id.HomeButton)
-                {
-                        /**  表示位置をリセットする **/
-                        // 表示倍率と並行移動についてリセットする
-                        objectDrawer.resetScaleAndLocation((SeekBar) parent.findViewById(R.id.ZoomInOut));
-                        
-                        // 画面の再描画を指示する
-                        redrawSurfaceview();
-            }
-               else if (id == R.id.SaveButton)
-               {
-                       // データ保存が指示された!
-                       saveData(true);
-               }
-           }
-
-           /**
-            *   触られたときの処理
-            * 
-            */
-           public boolean onTouch(View v, MotionEvent event)
-           {
-               int id = v.getId();
-               // int action = event.getAction();
-
-               //Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onTouch() " + id);
-
-               if (id == R.id.GraphicView)
-               {
-                       // 画面をタッチした!
-                   ((GokigenSurfaceView) v).onTouchEvent(event);
-                   return (true);
-               }
-               return (false);
-           }
-
-           /**
-            *  キーを押したときの操作
-            */
-           public boolean onKey(View v, int keyCode, KeyEvent event)
-           {
-               int action = event.getAction();
-               if ((action == KeyEvent.ACTION_DOWN)&&(keyCode == KeyEvent.KEYCODE_DPAD_CENTER))
-               {
-                       //
-               }
-
-               Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onKey() ");
-               return (false);
-           }
-
-           /**
-            *   メニューへのアイテム追加
-            * @param menu
-            * @return
-            */
-           public Menu onCreateOptionsMenu(Menu menu)
-           {
-            // 新規作成
-               MenuItem menuItem = menu.add(Menu.NONE, MENU_ID_NEW, Menu.NONE, parent.getString(R.string.createnew));
-               menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);   /*  for Android 3.1  */
-               menuItem.setIcon(android.R.drawable.ic_menu_add);    // 丸プラス
-
-               // 画像の共有
-               menuItem = menu.add(Menu.NONE, MENU_ID_SHARE, Menu.NONE, parent.getString(R.string.shareContent));
-               menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);   /*  for Android 3.1  */
-               menuItem.setIcon(android.R.drawable.ic_menu_share);
-
-               // 画像のキャプチャ
-               menuItem = menu.add(Menu.NONE, MENU_ID_CAPTURE, Menu.NONE, parent.getString(R.string.capture_data));
-               menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);   /*  for Android 3.1  */
-               menuItem.setIcon(android.R.drawable.ic_menu_crop);    // オブジェクトのキャプチャ
-
-               // オブジェクトの整列
-               menuItem = menu.add(Menu.NONE, MENU_ID_ALIGN, Menu.NONE, parent.getString(R.string.align_data));
-               menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);   /*  for Android 3.1  */
-               menuItem.setIcon(android.R.drawable.ic_menu_rotate);    // オブジェクトの整列
-
-               // タイトルの変更
-               menuItem = menu.add(Menu.NONE, MENU_ID_RENAME, Menu.NONE, parent.getString(R.string.rename_title));
-               menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);   /*  for Android 3.1  */
-               menuItem.setIcon(android.R.drawable.ic_menu_edit);    // タイトルの変更
-
-               // 壁紙の選択
-               menuItem = menu.add(Menu.NONE, MENU_ID_INSERT_PICTURE, Menu.NONE, parent.getString(R.string.background_data));
-               menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);   /*  for Android 3.1  */
-               menuItem.setIcon(android.R.drawable.ic_menu_gallery);    // 壁紙の選択
-
-               // 拡張メニュー
-               menuItem = menu.add(Menu.NONE, MENU_ID_EXTEND, Menu.NONE, parent.getString(R.string.extend_menu));
-               menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);   /*  for Android 3.1  */
-               menuItem.setIcon(android.R.drawable.ic_menu_share);    // 拡張メニュー...
-
-               // 設定
-               menuItem = menu.add(Menu.NONE, MENU_ID_PREFERENCES, Menu.NONE, parent.getString(R.string.preference_name));
-               menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);   /*  for Android 3.1  */
-               menuItem.setIcon(android.R.drawable.ic_menu_preferences);
-
-            // クレジット情報の表示
-               menuItem = menu.add(Menu.NONE, MENU_ID_ABOUT_GOKIGEN, Menu.NONE, parent.getString(R.string.about_gokigen));
-               menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);   /*  for Android 3.1  */
-               menuItem.setIcon(android.R.drawable.ic_menu_info_details);
-
-               return (menu);
-           }
-
-           /**
-            *   メニュー表示前の処理
-            * @param menu
-            * @return
-            */
-           public void onPrepareOptionsMenu(Menu menu)
-           {
-               menu.findItem(MENU_ID_NEW).setVisible(true);
-               menu.findItem(MENU_ID_SHARE).setVisible(true);
-               menu.findItem(MENU_ID_CAPTURE).setVisible(true);
-               menu.findItem(MENU_ID_ALIGN).setVisible(true);
-               menu.findItem(MENU_ID_RENAME).setVisible(true);
-               menu.findItem(MENU_ID_INSERT_PICTURE).setVisible(true);
-               menu.findItem(MENU_ID_EXTEND).setVisible(true);
-               menu.findItem(MENU_ID_PREFERENCES).setVisible(true);
-               menu.findItem(MENU_ID_ABOUT_GOKIGEN).setVisible(true);
-               return;
-           }
-
-           /**
-            *   メニューのアイテムが選択されたときの処理
-            * @param item
-            * @return
-            */
-           public boolean onOptionsItemSelected(MenuItem item)
-           {
-               boolean result = false;
-               switch (item.getItemId())
-               {
-                 case MENU_ID_PREFERENCES:
-                   showPreference();
-                       result = true;
-                       break;
-
-                 case MENU_ID_ABOUT_GOKIGEN:
-                       showAboutGokigen();
-                       result = true;
-                       break;
-
-                 case MENU_ID_NEW:
-                       createNewScreen();
-                       result = true;
-                       break;
-
-                 case MENU_ID_EXTEND:
-                       // 拡張メニューを呼び出す
-                       callExtendMenu();
-                       result = true;
-                       break;
-
-                 case MENU_ID_ALIGN:
+            redrawSurfaceview();
+        }
+        else if (id == R.id.SaveButton)
+        {
+            // データ保存が指示された!
+            saveData(true);
+        }
+    }
+
+    /**
+     *   触られたときの処理
+     *
+     */
+    public boolean onTouch(View v, MotionEvent event)
+    {
+        int id = v.getId();
+        // int action = event.getAction();
+
+        //Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onTouch() " + id);
+
+        if (id == R.id.GraphicView)
+        {
+            // 画面をタッチした!
+            v.onTouchEvent(event);
+            return (true);
+        }
+        return (false);
+    }
+
+    /**
+     *  キーを押したときの操作
+     */
+    public boolean onKey(View v, int keyCode, KeyEvent event)
+    {
+        int action = event.getAction();
+        if ((action == KeyEvent.ACTION_DOWN)&&(keyCode == KeyEvent.KEYCODE_DPAD_CENTER))
+        {
+            //
+            Log.v(Main.APP_IDENTIFIER, "KEY ENTER");
+        }
+
+        Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onKey() ");
+        return (false);
+    }
+
+    /**
+     *   メニューへのアイテム追加
+     *
+     */
+    public Menu onCreateOptionsMenu(Menu menu)
+    {
+        // 新規作成
+        MenuItem menuItem = menu.add(Menu.NONE, MENU_ID_NEW, Menu.NONE, parent.getString(R.string.createnew));
+        menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);   /*  for Android 3.1  */
+        menuItem.setIcon(android.R.drawable.ic_menu_add);    // 丸プラス
+
+        // 画像の共有
+        menuItem = menu.add(Menu.NONE, MENU_ID_SHARE, Menu.NONE, parent.getString(R.string.shareContent));
+        menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);   /*  for Android 3.1  */
+        menuItem.setIcon(android.R.drawable.ic_menu_share);
+
+        // 画像のキャプチャ
+        menuItem = menu.add(Menu.NONE, MENU_ID_CAPTURE, Menu.NONE, parent.getString(R.string.capture_data));
+        menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);   /*  for Android 3.1  */
+        menuItem.setIcon(android.R.drawable.ic_menu_crop);    // オブジェクトのキャプチャ
+
+        // 処理のUNDO
+        menuItem = menu.add(Menu.NONE, MENU_ID_UNDO, Menu.NONE, parent.getString(R.string.undo_operation));
+        menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);   /*  for Android 3.1  */
+        menuItem.setIcon(android.R.drawable.ic_menu_revert);
+
+        // オブジェクトの整列
+        menuItem = menu.add(Menu.NONE, MENU_ID_ALIGN, Menu.NONE, parent.getString(R.string.align_data));
+        menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);   /*  for Android 3.1  */
+        menuItem.setIcon(android.R.drawable.ic_menu_rotate);    // オブジェクトの整列
+
+        // タイトルの変更
+        menuItem = menu.add(Menu.NONE, MENU_ID_RENAME, Menu.NONE, parent.getString(R.string.rename_title));
+        menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);   /*  for Android 3.1  */
+        menuItem.setIcon(android.R.drawable.ic_menu_edit);    // タイトルの変更
+
+        // 壁紙の選択
+        menuItem = menu.add(Menu.NONE, MENU_ID_INSERT_PICTURE, Menu.NONE, parent.getString(R.string.background_data));
+        menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);   /*  for Android 3.1  */
+        menuItem.setIcon(android.R.drawable.ic_menu_gallery);    // 壁紙の選択
+
+        // 拡張メニュー
+        menuItem = menu.add(Menu.NONE, MENU_ID_EXTEND, Menu.NONE, parent.getString(R.string.extend_menu));
+        menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);   /*  for Android 3.1  */
+        menuItem.setIcon(android.R.drawable.ic_menu_share);    // 拡張メニュー...
+
+        // 設定
+        menuItem = menu.add(Menu.NONE, MENU_ID_PREFERENCES, Menu.NONE, parent.getString(R.string.preference_name));
+        menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);   /*  for Android 3.1  */
+        menuItem.setIcon(android.R.drawable.ic_menu_preferences);
+
+        // クレジット情報の表示
+        menuItem = menu.add(Menu.NONE, MENU_ID_ABOUT_GOKIGEN, Menu.NONE, parent.getString(R.string.about_gokigen));
+        menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);   /*  for Android 3.1  */
+        menuItem.setIcon(android.R.drawable.ic_menu_info_details);
+
+        return (menu);
+    }
+
+    /**
+     *   メニュー表示前の処理
+     *
+     *
+     */
+    public void onPrepareOptionsMenu(Menu menu)
+    {
+        menu.findItem(MENU_ID_NEW).setVisible(true);
+        menu.findItem(MENU_ID_UNDO).setVisible(false);
+        menu.findItem(MENU_ID_SHARE).setVisible(true);
+        menu.findItem(MENU_ID_CAPTURE).setVisible(true);
+        menu.findItem(MENU_ID_ALIGN).setVisible(true);
+        menu.findItem(MENU_ID_RENAME).setVisible(true);
+        menu.findItem(MENU_ID_INSERT_PICTURE).setVisible(true);
+        menu.findItem(MENU_ID_EXTEND).setVisible(true);
+        menu.findItem(MENU_ID_PREFERENCES).setVisible(true);
+        menu.findItem(MENU_ID_ABOUT_GOKIGEN).setVisible(true);
+    }
+
+    /**
+     *   メニューのアイテムが選択されたときの処理
+     *
+     *
+     */
+    public boolean onOptionsItemSelected(MenuItem item)
+    {
+        boolean result;
+        switch (item.getItemId())
+        {
+            case MENU_ID_PREFERENCES:
+                showPreference();
+                result = true;
+                break;
+
+            case MENU_ID_ABOUT_GOKIGEN:
+                showAboutGokigen();
+                result = true;
+                break;
+
+            case MENU_ID_NEW:
+                createNewScreen();
+                result = true;
+                break;
+
+            case MENU_ID_EXTEND:
+                // 拡張メニューを呼び出す
+                callExtendMenu();
+                result = true;
+                break;
+
+            case MENU_ID_ALIGN:
                 // オブジェクトの整列を行う
-                       alignData();
+                alignData();
                 result = true;
-                       break;
-
-                 case MENU_ID_RENAME:
-                       // タイトル名の変更  (テキスト編集ダイアログを表示する)
-                   showInfoMessageEditDialog();
-                       result = true;
-                       break;
-
-                 case MENU_ID_INSERT_PICTURE:
-                   // 背景画像の設定を行う
-                       insertPicture();
-                   result = true;
-                           break;
-
-                 case MENU_ID_CAPTURE:
-                       // 画面キャプチャを指示された場合...
-                       doCapture(false);
-                       result = true;
-                       break;
-
-                 case MENU_ID_SHARE:
-                       // 画面キャプチャ&共有を指示された場合...
-                       doCapture(true);
-                       result = true;
-                       break;
-
-                 case android.R.id.home:
-                       // アイコンが押された時の処理...
-                       // テキスト編集ダイアログを表示する
-                   showInfoMessageEditDialog();
-                           result = true;
-                           break;
-
-                 default:
-                       result = false;
-                       break;
-               }
-               return (result);
-           }
-
-           /**
-            *  画像ファイルの挿入 (データファイルの更新)
-            * 
-            */
-           private void insertPicture()
-           {
-               Intent intent;
-            if (Build.VERSION.SDK_INT >= 19) {
-                intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
-                intent.addCategory(Intent.CATEGORY_OPENABLE);
-                intent.setType("image/*");
-                //intent.setAction(Intent.ACTION_GET_CONTENT);
-            } else {
-                intent = new Intent();
-                intent.setType("image/*");
-                intent.setAction(Intent.ACTION_GET_CONTENT);
-            }
-               parent.startActivityForResult(intent, MENU_ID_INSERT_PICTURE);
-           }
-
-           /**
-            *    画面キャプチャの実施
-            * 
-            *
-            */
-           private void doCapture(boolean isShare)
-           {
-               // 画面のスクリーンショットをとる処理を実行する
-               dataInOutManager.doScreenCapture((String) parent.getTitle(), objectHolder, objectDrawer, isShare);
-
-               // 画面を再描画する
-            redrawSurfaceview();
-           }
-
-           /**
-            *   アプリの情報を表示する
-            * 
-            */
-           private void showAboutGokigen()
-           {
-               // アプリの情報(クレジット)を表示する!
-               parent.showDialog(R.id.info_about_gokigen);
-           }
-
-           /**
-            *   拡張メニューを呼び出す
-            * 
-            */
-           private void callExtendMenu()
-           {
-               // 現在表示中のデータをファイルに保存する
-               dataInOutManager.saveFile((String) parent.getTitle(), true);
-               
-               // 現在読み込んでいるファイルのファイル名を生成する
-               String fullPath = dataInOutManager.getDataFileFullPath((String) parent.getTitle(), ".xml");
-               
-            //  ここで拡張メニューを呼び出す             
-               // (渡すデータを作って Intentとする)
-               Intent intent = new Intent();
-               
-               intent.setAction(ExtensionActivity.MEMOMA_EXTENSION_LAUNCH_ACTIVITY);
-               intent.putExtra(ExtensionActivity.MEMOMA_EXTENSION_DATA_FULLPATH, fullPath);
-               intent.putExtra(ExtensionActivity.MEMOMA_EXTENSION_DATA_TITLE, (String) parent.getTitle());
-
-               // データ表示用Activityを起動する
-               parent.startActivityForResult(intent, MENU_ID_EXTEND);
-           }
-
-           /**
-            *    データの読み込みを行う
-            * 
-            */
-           private void prepareMeMoMaInfo()
-           {
-               //  設定に記録されているデータを画面のタイトルに反映させる
-               SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
-               String memomaInfo = preferences.getString("MeMoMaInfo", parent.getString(R.string.app_name));
-               parent.setTitle(memomaInfo);
-
-               // アクションバーとファイル名の準備
-                       android.support.v7.app.ActionBar bar = parent.getSupportActionBar();
-               if (bar != null)
-               {
-                               dataInOutManager.prepare(objectHolder, bar, memomaInfo);
-                       }
-
-            //dataInOutManager.loadFile((String) parent.getTitle());
-           }
-
-           /**
-            *   データの保存を行う
-            *   
-            *   
-            *   @param forceOverwrite  trueの時は、ファイル名が確定していたときは(確認せずに)上書き保存を自動で行う。
-            *   
-            */
-           private void saveData(boolean forceOverwrite)
-           {
-            dataInOutManager.saveFile((String) parent.getTitle(), forceOverwrite);
-           }
-
-           /**
-            *   データの整列を行う
-            * 
-            */
-           private void alignData()
-           {
-               ObjectAligner aligner = new ObjectAligner(parent, this);
-               aligner.execute(objectHolder);
-           }
-           
-           /**
-            *    メッセージ編集ダイアログを表示する
-            * 
-            */
-           private void showInfoMessageEditDialog()
-           {
-               parent.showDialog(R.id.editTextArea);                   
-           }
-
-           /**
-            *   新規作成が指示されたとき...全部クリアして作りなおして良いか確認する。
-            * 
-            */
-           private void createNewScreen()
-           {
-               parent.showDialog(R.id.confirmation);
-           }
-           
-           /**
-            *    接続線の設定ダイアログを表示する
-            */
-           private void selectLineShapeDialog()
-           {
-               // 接続線の設定ダイアログを表示する...
-               parent.showDialog(R.id.selectline_dialog);
-           }
-
-           /**
-            *    メッセージ編集ダイアログの表示を準備する
-            * 
-            */
-           private void prepareInfoMessageEditDialog(Dialog dialog)
-           {
-               String message = (String) parent.getTitle();
-               editTextDialog.prepare(dialog, this, parent.getString(R.string.dataTitle), message, true);
-           }
-
-           /**
-            *    メッセージ編集ダイアログの表示を準備する
-            * 
-            */
-           private void prepareConfirmationDialog(Dialog dialog)
-           {
-               // Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::prepareConfirmationDialog() " );
-           }
-
-           /**
-            *    オブジェクト入力用ダイアログの表示を準備する
-            * 
-            */
-           private void prepareObjectInputDialog(Dialog dialog)
-           {
-               Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::prepareObjectInputDialog(), key: " + selectedObjectKey);
-               
-               //  ダイアログの準備を行う
-               objectDataInputDialog.prepareObjectInputDialog(dialog, selectedObjectKey);
-               
-           }
-
-           /**
-            *   アイテム選択ダイアログの表示を準備する
-            * 
-            *
-            */
-           private void prepareItemSelectionDialog(Dialog dialog)
-           {
-               // アイテム選択ダイアログの表示設定
-               // (動的変更時。。。今回は固定なので何もしない)
-           }
-
-           /**
-            *    接続線選択用ダイアログの表示を準備する
-            * 
-            */
-           private void prepareLineSelectionDialog(Dialog dialog)
-           {
-               Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::prepareLineSelectionDialog(), key: " + selectedObjectKey);
-               
-               //  ダイアログの準備を行う
-               lineSelectionDialog.prepareSelectLineShapeDialog(dialog, selectedObjectKey);
-           }
-
-           /**
-            *  設定画面を表示する処理
-            */
-           private void showPreference()
-           {
-               try
-               {
-                   // 設定画面を呼び出す
-                   Intent prefIntent = new Intent(parent,Preference.class);
-                   parent.startActivityForResult(prefIntent, MENU_ID_PREFERENCES);
-               }
-               catch (Exception e)
-               {
-                    // 例外発生...なにもしない。
-                               e.printStackTrace();
-                        //updater.showMessage("ERROR", MainUpdater.SHOWMETHOD_DONTCARE);
-               }
-           }
-
-        /**
-         *    接続線の形状を反映させる
-         * 
-         */
-           private void setLineStyle()
-           {
-               int buttonId = LineStyleHolder.getLineShapeImageId(lineStyleHolder.getLineStyle(), lineStyleHolder.getLineShape());
-               final ImageButton lineStyleObj = (ImageButton) parent.findViewById(R.id.LineStyleButton);
-               lineStyleObj.setImageResource(buttonId);        
-           }
-
-           /**
-            *    オブジェクトが生成された!
-            * 
-            */
-           public void objectCreated()
-           {
-            // ここで動作モードを移動モードに戻す。
-                drawModeHolder.changeOperationMode(OperationModeHolder.OPERATIONMODE_MOVE);
-                updateButtons(OperationModeHolder.OPERATIONMODE_MOVE);
-
-                  // 画面を再描画する
-                  redrawSurfaceview();
-           }
-
-           /**
-            *    空き領域がタッチされた!
-            * 
-            */
-           public int touchedVacantArea()
-           {
-               SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
-               return (Integer.parseInt(preferences.getString("operationMode", "0")));
-           }
-
-           /**
-            *    空き領域でタッチが離された!
-            * 
-            */
-           public int touchUppedVacantArea()
-           {
-               SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
-               return (Integer.parseInt(preferences.getString("operationMode", "0")));
-           }
-
-           /**
-            *    オブジェクトを本当に削除して良いか確認した後に、オブジェクトを削除する。
-            * 
-            *
-            */
-           private void removeObject(Integer key)
-           {
-               // 本当に消して良いか、確認をするダイアログを表示して、OKが押されたら消す。
-                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(parent);
-                alertDialogBuilder.setTitle(parent.getString(R.string.deleteconfirm_title));
-                alertDialogBuilder.setIcon(android.R.drawable.ic_dialog_alert);
-                alertDialogBuilder.setMessage(parent.getString(R.string.deleteconfirm_message));
-
-                // 削除するオブジェクトのキーを覚えこむ。
-                objectKeyToDelete = key;
-
-                // OKボタンの生成
-                alertDialogBuilder.setPositiveButton(parent.getString(R.string.confirmYes), new DialogInterface.OnClickListener()
-             {
-                  public void onClick(DialogInterface dialog, int id)
-                  {
-                                   //  削除モードの時... 確認後削除だけど、今は確認なしで削除を行う。
-                               objectHolder.removePosition(objectKeyToDelete);
-                               
-                               // 削除するオブジェクトに接続されている線もすべて削除する
-                               objectHolder.getConnectLineHolder().removeAllConnection(objectKeyToDelete);
-                               
-                               // ダイアログを閉じる
-                          dialog.dismiss();
-
-                          // ここで動作モードを削除モードから移動モードに戻す。
-                                  drawModeHolder.changeOperationMode(OperationModeHolder.OPERATIONMODE_MOVE);
-                                  updateButtons(OperationModeHolder.OPERATIONMODE_MOVE);
-                               
-
-                          // 画面を再描画する
-                          redrawSurfaceview();
-                  }
-              });
-                
-                // Cancelボタンの生成
-                alertDialogBuilder.setNegativeButton(parent.getString(R.string.confirmNo), new DialogInterface.OnClickListener()
-             {
-                 public void onClick(DialogInterface dialog, int id)
-                 {
-                        dialog.cancel();
-                 }
-             });
-               
-                // ダイアログはキャンセル可能に設定する
-                alertDialogBuilder.setCancelable(true);
-
-                // ダイアログを表示する
-                AlertDialog alertDialog = alertDialogBuilder.create();
-                alertDialog.show();
-           }
-
-           /**
-            *    オブジェクトを複製する
-            * 
-            *
-            */
-           private void duplicateObject(Integer key)
-           {
-               // 選択中オブジェクトを複製する
-               objectHolder.duplicatePosition(key);
-
-               // 画面を再描画する
-          redrawSurfaceview();
-           }       
-
-           /**
-            *    オブジェクトを拡大する
-            * 
-            *
-            */
-           private void expandObject(Integer key)
-           {
-               // 選択中オブジェクトを拡大する
-               objectHolder.expandObjectSize(key);
-
-               // 画面を再描画する
-          redrawSurfaceview();
-           }       
-           /**
-            *    オブジェクトを縮小する
-            * 
-            *
-            */
-           private void shrinkObject(Integer key)
-           {
-               // 選択中オブジェクトを縮小する
-               objectHolder.shrinkObjectSize(key);
-
-               // 画面を再描画する
-          redrawSurfaceview();
-           }
-
-            private void setButtonBorder(ImageButton button, boolean isHighlight)
-             {
-               try
-               {
-                     BitmapDrawable btnBackgroundShape = (BitmapDrawable)button.getBackground();
-                     if (isHighlight)
-                     {
-//                             btnBackgroundShape.setColorFilter(Color.rgb(51, 181, 229), Mode.LIGHTEN);
-                       btnBackgroundShape.setColorFilter(Color.BLUE, Mode.LIGHTEN);
-                     }
-                     else
-                     {
-                       btnBackgroundShape.setColorFilter(Color.BLACK, Mode.LIGHTEN);
-                     } 
-               }
-               catch (Exception ex)
-               {
-                       // 
-                       Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::setButtonBorder(): " + ex.toString());
-               }
-             }      
-
-            /**
-            *   ボタンを更新する
-            * 
-            */
-           private void updateButtons(int mode)
-           {
-               final ImageButton createObjectButton = (ImageButton) parent.findViewById(R.id.CreateObjectButton);
-               final ImageButton deleteObjectButton = (ImageButton) parent.findViewById(R.id.DeleteObjectButton);
-
-               if (mode == OperationModeHolder.OPERATIONMODE_DELETE)
-               {
-                       setButtonBorder(createObjectButton, false);
-                       setButtonBorder(deleteObjectButton, true);
-               }
-               else if (mode == OperationModeHolder.OPERATIONMODE_CREATE)
-               {
-                       setButtonBorder(createObjectButton, true);
-                       setButtonBorder(deleteObjectButton, false);                     
-               }
-               else // if (mode == OperationModeHolder.OPERATIONMODE_MOVE)
-               {
-                       setButtonBorder(createObjectButton, false);
-                       setButtonBorder(deleteObjectButton, false);                     
-               }
-           }
-
-           
-           /**
-            *   オブジェクトが選択された(長押しで!)
-            * 
-            */
-           public void objectSelectedContext(Integer key)
-           {
-               Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::objectSelectedContext(),  key:" + key);
-               selectedContextKey = key;
-
-               // オブジェクトのアイテム選択ダイアログを表示する...
-               parent.showDialog(MENU_ID_OPERATION);
-
-           }
-           
-           
-           /**
-            *   オブジェクトが選択された!
-            * 
-            */
-           public boolean objectSelected(Integer key)
-           {
-               SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
-               int operationMode = Integer.parseInt(preferences.getString("operationMode", "0"));
-               if (operationMode == OperationModeHolder.OPERATIONMODE_DELETE)
-               {
-                       // オブジェクトを削除する
-                       removeObject(key);
-                       
-                       return (true);
-               }
-               //if ((operationMode == OperationModeHolder.OPERATIONMODE_MOVE)||
-               //              (operationMode == OperationModeHolder.OPERATIONMODE_CREATE))
-               {
-                       // 選択されたオブジェクトを記憶する
-                       selectedObjectKey = key;
-                       Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::objectSelected() key : " + key);
-
-                       // オブジェクトの詳細設定ダイアログを表示する...
-                       parent.showDialog(R.id.objectinput_dialog);
-               }
-               return (true);
-           }
-           
-           /**
-            *  ダイアログの生成
-            * 
-            */
-           public Dialog onCreateDialog(int id)
-           {
-            if (id == R.id.info_about_gokigen)
-           {
-               // クレジットダイアログを表示
-                   CreditDialog dialog = new CreditDialog(parent);
-                   return (dialog.getDialog());
-           }
-            if (id == R.id.editTextArea)
-            {
-                       // 変更するテキストを表示
-                return (editTextDialog.getDialog());
-            }
-            if (id == R.id.confirmation)
-            {
-               // 確認するメッセージを表示する
-               return (confirmationDialog.getDialog());
-            }
-            if (id == R.id.objectinput_dialog)
-            {
-               // オブジェクト入力のダイアログを表示する
-               return (objectDataInputDialog.getDialog());
-            }
-            if (id == MENU_ID_OPERATION)
-            {
-               // アイテム選択ダイアログの準備を行う
-               return (itemSelectionDialog.getDialog());
-            }
-            if (id == R.id.selectline_dialog)
-            {
-               // 接続線選択ダイアログの準備を行う
-               return (lineSelectionDialog.getDialog());
-            }
-               return (null);
-           }
-
-           /**
-            *  ダイアログ表示の準備
-            * 
-            */
-           public void onPrepareDialog(int id, Dialog dialog)
-           {
-            if (id == R.id.editTextArea)
-            {
-               // 変更するデータを表示する
-               prepareInfoMessageEditDialog(dialog);
-               return;
-            }
-            if (id == R.id.confirmation)
+                break;
+
+            case MENU_ID_RENAME:
+                // タイトル名の変更  (テキスト編集ダイアログを表示する)
+                showInfoMessageEditDialog();
+                result = true;
+                break;
+
+            case MENU_ID_INSERT_PICTURE:
+                // 背景画像の設定を行う
+                insertPicture();
+                result = true;
+                break;
+
+            case MENU_ID_CAPTURE:
+                // 画面キャプチャを指示された場合...
+                doCapture(false);
+                result = true;
+                break;
+
+            case MENU_ID_SHARE:
+                // 画面キャプチャ&共有を指示された場合...
+                doCapture(true);
+                result = true;
+                break;
+
+            case android.R.id.home:
+                // アイコンが押された時の処理...
+                // テキスト編集ダイアログを表示する
+                showInfoMessageEditDialog();
+                result = true;
+                break;
+
+            case MENU_ID_UNDO:
+                // UNDO処理...
+                result = undoOperation();
+                break;
+
+            default:
+                result = false;
+                break;
+        }
+        return (result);
+    }
+
+
+    /**
+     *   操作を1つ戻す(Undo 処理)
+     *
+     */
+    private boolean undoOperation()
+    {
+        return (false);
+    }
+
+    /**
+     *  画像ファイルの挿入 (データファイルの更新)
+     *
+     */
+    private void insertPicture()
+    {
+        Intent intent;
+        if (Build.VERSION.SDK_INT >= 19) {
+            intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+            intent.addCategory(Intent.CATEGORY_OPENABLE);
+            intent.setType("image/*");
+            //intent.setAction(Intent.ACTION_GET_CONTENT);
+        } else {
+            intent = new Intent();
+            intent.setType("image/*");
+            intent.setAction(Intent.ACTION_GET_CONTENT);
+        }
+        parent.startActivityForResult(intent, MENU_ID_INSERT_PICTURE);
+    }
+
+    /**
+     *    画面キャプチャの実施
+     *
+     *
+     */
+    private void doCapture(boolean isShare)
+    {
+        // 画面のスクリーンショットをとる処理を実行する
+        dataInOutManager.doScreenCapture((String) parent.getTitle(), objectHolder, objectDrawer, isShare);
+
+        // 画面を再描画する
+        redrawSurfaceview();
+    }
+
+    /**
+     *   アプリの情報を表示する
+     *
+     */
+    private void showAboutGokigen()
+    {
+        // アプリの情報(クレジット)を表示する!
+        parent.showDialog(R.id.info_about_gokigen);
+    }
+
+    /**
+     *   拡張メニューを呼び出す
+     *
+     */
+    private void callExtendMenu()
+    {
+        // 現在表示中のデータをファイルに保存する
+        dataInOutManager.saveFile((String) parent.getTitle(), true);
+
+        // 現在読み込んでいるファイルのファイル名を生成する
+        String fullPath = dataInOutManager.getDataFileFullPath((String) parent.getTitle(), ".xml");
+
+        //  ここで拡張メニューを呼び出す
+        // (渡すデータを作って Intentとする)
+        Intent intent = new Intent();
+
+        intent.setAction(ExtensionActivity.MEMOMA_EXTENSION_LAUNCH_ACTIVITY);
+        intent.putExtra(ExtensionActivity.MEMOMA_EXTENSION_DATA_FULLPATH, fullPath);
+        intent.putExtra(ExtensionActivity.MEMOMA_EXTENSION_DATA_TITLE, (String) parent.getTitle());
+
+        // データ表示用Activityを起動する
+        parent.startActivityForResult(intent, MENU_ID_EXTEND);
+    }
+
+    /**
+     *    データの読み込みを行う
+     *
+     */
+    private void prepareMeMoMaInfo()
+    {
+        //  設定に記録されているデータを画面のタイトルに反映させる
+        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
+        String memomaInfo = preferences.getString("MeMoMaInfo", parent.getString(R.string.app_name));
+        parent.setTitle(memomaInfo);
+
+        // アクションバーとファイル名の準備
+        android.support.v7.app.ActionBar bar = parent.getSupportActionBar();
+        if (bar != null)
+        {
+            dataInOutManager.prepare(objectHolder, bar, memomaInfo);
+        }
+
+        //dataInOutManager.loadFile((String) parent.getTitle());
+    }
+
+    /**
+     *   データの保存を行う
+     *
+     *
+     *   @param forceOverwrite  trueの時は、ファイル名が確定していたときは(確認せずに)上書き保存を自動で行う。
+     *
+     */
+    private void saveData(boolean forceOverwrite)
+    {
+        dataInOutManager.saveFile((String) parent.getTitle(), forceOverwrite);
+    }
+
+    /**
+     *   データの整列を行う
+     *
+     */
+    private void alignData()
+    {
+        ObjectAligner aligner = new ObjectAligner(parent, this);
+        aligner.execute(objectHolder);
+    }
+
+    /**
+     *    メッセージ編集ダイアログを表示する
+     *
+     */
+    private void showInfoMessageEditDialog()
+    {
+        parent.showDialog(R.id.editTextArea);
+    }
+
+    /**
+     *   新規作成が指示されたとき...全部クリアして作りなおして良いか確認する。
+     *
+     */
+    private void createNewScreen()
+    {
+        parent.showDialog(R.id.confirmation);
+    }
+
+    /**
+     *    接続線の設定ダイアログを表示する
+     */
+    private void selectLineShapeDialog()
+    {
+        // 接続線の設定ダイアログを表示する...
+        parent.showDialog(R.id.selectline_dialog);
+    }
+
+    /**
+     *    メッセージ編集ダイアログの表示を準備する
+     *
+     */
+    private void prepareInfoMessageEditDialog(Dialog dialog)
+    {
+        String message = (String) parent.getTitle();
+        editTextDialog.prepare(dialog, this, parent.getString(R.string.dataTitle), message, true);
+    }
+
+    /**
+     *    メッセージ編集ダイアログの表示を準備する
+     *
+     */
+    private void prepareConfirmationDialog(Dialog dialog)
+    {
+        // Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::prepareConfirmationDialog() " );
+    }
+
+    /**
+     *    オブジェクト入力用ダイアログの表示を準備する
+     *
+     */
+    private void prepareObjectInputDialog(Dialog dialog)
+    {
+        Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::prepareObjectInputDialog(), key: " + selectedObjectKey);
+
+        //  ダイアログの準備を行う
+        objectDataInputDialog.prepareObjectInputDialog(dialog, selectedObjectKey);
+
+    }
+
+    /**
+     *   アイテム選択ダイアログの表示を準備する
+     *
+     *
+     */
+    private void prepareItemSelectionDialog(Dialog dialog)
+    {
+        // アイテム選択ダイアログの表示設定
+        // (動的変更時。。。今回は固定なので何もしない)
+    }
+
+    /**
+     *    接続線選択用ダイアログの表示を準備する
+     *
+     */
+    private void prepareLineSelectionDialog(Dialog dialog)
+    {
+        Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::prepareLineSelectionDialog(), key: " + selectedObjectKey);
+
+        //  ダイアログの準備を行う
+        lineSelectionDialog.prepareSelectLineShapeDialog(dialog, selectedObjectKey);
+    }
+
+    /**
+     *  設定画面を表示する処理
+     */
+    private void showPreference()
+    {
+        try
+        {
+            // 設定画面を呼び出す
+            Intent prefIntent = new Intent(parent,Preference.class);
+            parent.startActivityForResult(prefIntent, MENU_ID_PREFERENCES);
+        }
+        catch (Exception e)
+        {
+            // 例外発生...なにもしない。
+            e.printStackTrace();
+            //updater.showMessage("ERROR", MainUpdater.SHOWMETHOD_DONTCARE);
+        }
+    }
+
+    /**
+     *    接続線の形状を反映させる
+     *
+     */
+    private void setLineStyle()
+    {
+        int buttonId = LineStyleHolder.getLineShapeImageId(lineStyleHolder.getLineStyle(), lineStyleHolder.getLineShape());
+        final ImageButton lineStyleObj = parent.findViewById(R.id.LineStyleButton);
+        lineStyleObj.setImageResource(buttonId);
+    }
+
+    /**
+     *    オブジェクトが生成された!
+     *
+     */
+    public void objectCreated()
+    {
+        // ここで動作モードを移動モードに戻す。
+        drawModeHolder.changeOperationMode(OperationModeHolder.OPERATIONMODE_MOVE);
+        updateButtons(OperationModeHolder.OPERATIONMODE_MOVE);
+
+        // 画面を再描画する
+        redrawSurfaceview();
+    }
+
+    /**
+     *    空き領域がタッチされた!
+     *
+     */
+    public int touchedVacantArea()
+    {
+        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
+        return (Integer.parseInt(preferences.getString("operationMode", "0")));
+    }
+
+    /**
+     *    空き領域でタッチが離された!
+     *
+     */
+    public int touchUppedVacantArea()
+    {
+        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
+        return (Integer.parseInt(preferences.getString("operationMode", "0")));
+    }
+
+    /**
+     *    オブジェクトを本当に削除して良いか確認した後に、オブジェクトを削除する。
+     *
+     *
+     */
+    private void removeObject(Integer key)
+    {
+        // 本当に消して良いか、確認をするダイアログを表示して、OKが押されたら消す。
+        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(parent);
+        alertDialogBuilder.setTitle(parent.getString(R.string.deleteconfirm_title));
+        alertDialogBuilder.setIcon(android.R.drawable.ic_dialog_alert);
+        alertDialogBuilder.setMessage(parent.getString(R.string.deleteconfirm_message));
+
+        // 削除するオブジェクトのキーを覚えこむ。
+        objectKeyToDelete = key;
+
+        // OKボタンの生成
+        alertDialogBuilder.setPositiveButton(parent.getString(R.string.confirmYes), new DialogInterface.OnClickListener()
+        {
+            public void onClick(DialogInterface dialog, int id)
             {
-               // 確認ダイアログを表示する。
-               prepareConfirmationDialog(dialog);
-               return;
+                //  削除モードの時... 確認後削除だけど、今は確認なしで削除を行う。
+                objectHolder.removePosition(objectKeyToDelete);
+
+                // 削除するオブジェクトに接続されている線もすべて削除する
+                objectHolder.getConnectLineHolder().removeAllConnection(objectKeyToDelete);
+
+                // ダイアログを閉じる
+                dialog.dismiss();
+
+                // ここで動作モードを削除モードから移動モードに戻す。
+                drawModeHolder.changeOperationMode(OperationModeHolder.OPERATIONMODE_MOVE);
+                updateButtons(OperationModeHolder.OPERATIONMODE_MOVE);
+
+
+                // 画面を再描画する
+                redrawSurfaceview();
             }
-            if (id == R.id.objectinput_dialog)
+        });
+
+        // Cancelボタンの生成
+        alertDialogBuilder.setNegativeButton(parent.getString(R.string.confirmNo), new DialogInterface.OnClickListener()
+        {
+            public void onClick(DialogInterface dialog, int id)
             {
-               // オブジェクト入力のダイアログを表示する
-               prepareObjectInputDialog(dialog);
+                dialog.cancel();
             }
-            if (id == MENU_ID_OPERATION)
+        });
+
+        // ダイアログはキャンセル可能に設定する
+        alertDialogBuilder.setCancelable(true);
+
+        // ダイアログを表示する
+        AlertDialog alertDialog = alertDialogBuilder.create();
+        alertDialog.show();
+    }
+
+    /**
+     *    オブジェクトを複製する
+     *
+     *
+     */
+    private void duplicateObject(Integer key)
+    {
+        // 選択中オブジェクトを複製する
+        objectHolder.duplicatePosition(key);
+
+        // 画面を再描画する
+        redrawSurfaceview();
+    }
+
+    /**
+     *    オブジェクトを拡大する
+     *
+     *
+     */
+    private void expandObject(Integer key)
+    {
+        // 選択中オブジェクトを拡大する
+        objectHolder.expandObjectSize(key);
+
+        // 画面を再描画する
+        redrawSurfaceview();
+    }
+    /**
+     *    オブジェクトを縮小する
+     *
+     *
+     */
+    private void shrinkObject(Integer key)
+    {
+        // 選択中オブジェクトを縮小する
+        objectHolder.shrinkObjectSize(key);
+
+        // 画面を再描画する
+        redrawSurfaceview();
+    }
+
+    private void setButtonBorder(ImageButton button, boolean isHighlight)
+    {
+        try
+        {
+            BitmapDrawable btnBackgroundShape = (BitmapDrawable)button.getBackground();
+            if (isHighlight)
             {
-               // オブジェクト操作選択のダイアログを表示する
-               prepareItemSelectionDialog(dialog);
+//                             btnBackgroundShape.setColorFilter(Color.rgb(51, 181, 229), Mode.LIGHTEN);
+                btnBackgroundShape.setColorFilter(Color.BLUE, Mode.LIGHTEN);
             }
-            if (id == R.id.selectline_dialog)
+            else
             {
-               // 接続線選択のダイアログを表示する
-               prepareLineSelectionDialog(dialog);
+                btnBackgroundShape.setColorFilter(Color.BLACK, Mode.LIGHTEN);
             }
-           }
-
-        /**
-         *    新規状態に変更する。
-         * 
-         */
-        public void acceptConfirmation()
+        }
+        catch (Exception ex)
         {
             //
-               Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::acceptConfirmation()");
-               
-               // オブジェクトデータをクリアする。
-           objectHolder.removeAllPositions();  // オブジェクトの保持クラス
-           objectHolder.getConnectLineHolder().removeAllLines();  // オブジェクト間の接続状態保持クラス
-
-               // 画面の倍率と表示位置を初期状態に戻す
-               if (objectDrawer != null)
-               {
-               final SeekBar zoomBar = (SeekBar) parent.findViewById(R.id.ZoomInOut);
-                       objectDrawer.resetScaleAndLocation(zoomBar);
-               }
-
-               /**
-               // 題名を "無題"に変更し、関係情報をクリアする
-               String newName = parent.getString(R.string.no_name);
-               parent.setTitle(newName);
-               SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
-            SharedPreferences.Editor editor = preferences.edit();
-            editor.putString("MeMoMaInfo", newName);
-            editor.commit();
-            **/
-            
-               // 画面を再描画する
-            redrawSurfaceview();
+            Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::setButtonBorder(): " + ex.toString());
+        }
+    }
+
+    /**
+     *   ボタンを更新する
+     *
+     */
+    private void updateButtons(int mode)
+    {
+        final ImageButton createObjectButton = parent.findViewById(R.id.CreateObjectButton);
+        final ImageButton deleteObjectButton = parent.findViewById(R.id.DeleteObjectButton);
+
+        if (mode == OperationModeHolder.OPERATIONMODE_DELETE)
+        {
+            setButtonBorder(createObjectButton, false);
+            setButtonBorder(deleteObjectButton, true);
+        }
+        else if (mode == OperationModeHolder.OPERATIONMODE_CREATE)
+        {
+            setButtonBorder(createObjectButton, true);
+            setButtonBorder(deleteObjectButton, false);
+        }
+        else // if (mode == OperationModeHolder.OPERATIONMODE_MOVE)
+        {
+            setButtonBorder(createObjectButton, false);
+            setButtonBorder(deleteObjectButton, false);
+        }
+    }
 
-            // ファイル名選択ダイアログを開く
-            showInfoMessageEditDialog();
 
+    /**
+     *   オブジェクトが選択された(長押しで!)
+     *
+     */
+    public void objectSelectedContext(Integer key)
+    {
+        Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::objectSelectedContext(),  key:" + key);
+        selectedContextKey = key;
+
+        // オブジェクトのアイテム選択ダイアログを表示する...
+        parent.showDialog(MENU_ID_OPERATION);
+
+    }
+
+
+    /**
+     *   オブジェクトが選択された!
+     *
+     */
+    public boolean objectSelected(Integer key)
+    {
+        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
+        int operationMode = Integer.parseInt(preferences.getString("operationMode", "0"));
+        if (operationMode == OperationModeHolder.OPERATIONMODE_DELETE)
+        {
+            // オブジェクトを削除する
+            removeObject(key);
+
+            return (true);
         }
+        //if ((operationMode == OperationModeHolder.OPERATIONMODE_MOVE)||
+        //             (operationMode == OperationModeHolder.OPERATIONMODE_CREATE))
+        {
+            // 選択されたオブジェクトを記憶する
+            selectedObjectKey = key;
+            Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::objectSelected() key : " + key);
 
-        /**
-         *   画面を再描画する
-         * 
-         */
-        private void redrawSurfaceview()
+            // オブジェクトの詳細設定ダイアログを表示する...
+            parent.showDialog(R.id.objectinput_dialog);
+        }
+        return (true);
+    }
+
+    /**
+     *  ダイアログの生成
+     *
+     */
+    public Dialog onCreateDialog(int id)
+    {
+        if (id == R.id.info_about_gokigen)
         {
-               final GokigenSurfaceView surfaceview = (GokigenSurfaceView) parent.findViewById(R.id.GraphicView);
-               surfaceview.doDraw();           
+            // クレジットダイアログを表示
+            CreditDialog dialog = new CreditDialog(parent);
+            return (dialog.getDialog());
         }
-        
-        /**
-         *    不許可。何もしない。
-         * 
-         */
-        public  void rejectConfirmation()
+        if (id == R.id.editTextArea)
         {
-               Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::rejectConfirmation()");
+            // 変更するテキストを表示
+            return (editTextDialog.getDialog());
         }
-
-        /**
-         *   オブジェクトが整列された時の処理
-         * 
-         */
-        public void objectAligned()
+        if (id == R.id.confirmation)
         {
-            // ç\94»é\9d¢ã\81®å\86\8dæ\8f\8fç\94»ã\82\92æ\8c\87示する
-                   redrawSurfaceview();                
+            // ç¢ºèª\8dã\81\99ã\82\8bã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\82\92表示する
+            return (confirmationDialog.getDialog());
         }
-        
-        /**
-         *   オブジェクト編集ダイアログが閉じられた時の処理
-         * 
-         */
-        public void finishObjectInput()
+        if (id == R.id.objectinput_dialog)
         {
-            // 画面の再描画を指示する
-                   redrawSurfaceview();
+            // オブジェクト入力のダイアログを表示する
+            return (objectDataInputDialog.getDialog());
         }
-        
-        /**
-         *   オブジェクト編集ダイアログが閉じられた時の処理
-         * 
-         */
-        public void cancelObjectInput()
+        if (id == MENU_ID_OPERATION)
         {
-            // 何もしない 
+            // アイテム選択ダイアログの準備を行う
+            return (itemSelectionDialog.getDialog());
         }
-        
-        
-        /**
-         *   現在編集中かどうかを知る
-         * 
-         * @return
-         */
-        public boolean isEditing()
+        if (id == R.id.selectline_dialog)
         {
-               return (isEditing);
+            // 接続線選択ダイアログの準備を行う
+            return (lineSelectionDialog.getDialog());
         }
-
-        /**
-         *   現在編集中のフラグを更新する
-         * 
-         * @param value
-         */
-        public void setIsEditing(boolean value)
+        return (null);
+    }
+
+    /**
+     *  ダイアログ表示の準備
+     *
+     */
+    public void onPrepareDialog(int id, Dialog dialog)
+    {
+        if (id == R.id.editTextArea)
         {
-               isEditing = value;
+            // 変更するデータを表示する
+            prepareInfoMessageEditDialog(dialog);
+            return;
         }
-
-        /**
-         *   アイテムが選択された!
-         * 
-         */
-        public void itemSelected(int index, String itemValue)
+        if (id == R.id.confirmation)
         {
-            //
-               Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::itemSelected() : " + itemValue + " [" + index + "]");
-               
-               if (index == ObjectOperationCommandHolder.OBJECTOPERATION_DELETE)
-               {
-                       // オブジェクト削除の確認
-                       removeObject(selectedContextKey);
-               }
-               else if (index == ObjectOperationCommandHolder.OBJECTOPERATION_DUPLICATE)
-               {
-                       // オブジェクトの複製
-                       duplicateObject(selectedContextKey);                    
-               }
-               else if (index == ObjectOperationCommandHolder.OBJECTOPERATION_SIZEBIGGER)
-               {
-                       // オブジェクトの拡大
-                       expandObject(selectedContextKey);
-               }
-               else if (index == ObjectOperationCommandHolder.OBJECTOPERATION_SIZESMALLER)
-               {
-                       // オブジェクトの縮小
-                       shrinkObject(selectedContextKey);
-               }
+            // 確認ダイアログを表示する。
+            prepareConfirmationDialog(dialog);
+            return;
+        }
+        if (id == R.id.objectinput_dialog)
+        {
+            // オブジェクト入力のダイアログを表示する
+            prepareObjectInputDialog(dialog);
+        }
+        if (id == MENU_ID_OPERATION)
+        {
+            // オブジェクト操作選択のダイアログを表示する
+            prepareItemSelectionDialog(dialog);
+        }
+        if (id == R.id.selectline_dialog)
+        {
+            // 接続線選択のダイアログを表示する
+            prepareLineSelectionDialog(dialog);
+        }
+    }
+
+    /**
+     *    新規状態に変更する。
+     *
+     */
+    public void acceptConfirmation()
+    {
+        //
+        Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::acceptConfirmation()");
+
+        // オブジェクトデータをクリアする。
+        objectHolder.removeAllPositions();  // オブジェクトの保持クラス
+        objectHolder.getConnectLineHolder().removeAllLines();  // オブジェクト間の接続状態保持クラス
+
+        // 画面の倍率と表示位置を初期状態に戻す
+        if (objectDrawer != null)
+        {
+            final SeekBar zoomBar = (SeekBar) parent.findViewById(R.id.ZoomInOut);
+            objectDrawer.resetScaleAndLocation(zoomBar);
         }
 
-        /**
-         *    (今回未使用)
-         * 
-         */
-        public void itemSelectedMulti(String[] items, boolean[] status)
+               /*
+               // 題名を "無題"に変更し、関係情報をクリアする
+               String newName = parent.getString(R.string.no_name);
+               parent.setTitle(newName);
+               SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
+            SharedPreferences.Editor editor = preferences.edit();
+            editor.putString("MeMoMaInfo", newName);
+            editor.commit();
+            */
+
+        // 画面を再描画する
+        redrawSurfaceview();
+
+        // ファイル名選択ダイアログを開く
+        showInfoMessageEditDialog();
+
+    }
+
+    /**
+     *   画面を再描画する
+     *
+     */
+    private void redrawSurfaceview()
+    {
+        final GokigenSurfaceView surfaceview = parent.findViewById(R.id.GraphicView);
+        surfaceview.doDraw();
+    }
+
+    /**
+     *    不許可。何もしない。
+     *
+     */
+    public  void rejectConfirmation()
+    {
+        Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::rejectConfirmation()");
+    }
+
+    /**
+     *   オブジェクトが整列された時の処理
+     *
+     */
+    public void objectAligned()
+    {
+        // 画面の再描画を指示する
+        redrawSurfaceview();
+    }
+
+    /**
+     *   オブジェクト編集ダイアログが閉じられた時の処理
+     *
+     */
+    public void finishObjectInput()
+    {
+        // 画面の再描画を指示する
+        redrawSurfaceview();
+    }
+
+    /**
+     *   オブジェクト編集ダイアログが閉じられた時の処理
+     *
+     */
+    public void cancelObjectInput()
+    {
+        // 何もしない
+    }
+
+
+    /**
+     *   現在編集中かどうかを知る
+     *
+     *
+     */
+    public boolean isEditing()
+    {
+        return (isEditing);
+    }
+
+    /**
+     *   現在編集中のフラグを更新する
+     *
+     *
+     */
+    public void setIsEditing(boolean value)
+    {
+        isEditing = value;
+    }
+
+    /**
+     *   アイテムが選択された!
+     *
+     */
+    public void itemSelected(int index, String itemValue)
+    {
+        //
+        Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::itemSelected() : " + itemValue + " [" + index + "]");
+
+        if (index == ObjectOperationCommandHolder.OBJECTOPERATION_DELETE)
         {
-               
+            // オブジェクト削除の確認
+            removeObject(selectedContextKey);
         }
-        public void canceledSelection()
+        else if (index == ObjectOperationCommandHolder.OBJECTOPERATION_DUPLICATE)
         {
-               
+            // オブジェクトの複製
+            duplicateObject(selectedContextKey);
         }
-        
-        public void onSaveInstanceState(Bundle outState)
+        else if (index == ObjectOperationCommandHolder.OBJECTOPERATION_SIZEBIGGER)
         {
-           /* ここで状態を保存 */ 
-           //Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onSaveInstanceState()");
+            // オブジェクトの拡大
+            expandObject(selectedContextKey);
         }
-        
-        public void onRestoreInstanceState(Bundle savedInstanceState)
+        else if (index == ObjectOperationCommandHolder.OBJECTOPERATION_SIZESMALLER)
         {
-               /* ここで状態を復元 */
-           Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onRestoreInstanceState()");
+            // オブジェクトの縮小
+            shrinkObject(selectedContextKey);
+        }
+    }
+
+    /**
+     *    (今回未使用)
+     *
+     */
+    public void itemSelectedMulti(String[] items, boolean[] status)
+    {
+
+    }
+    public void canceledSelection()
+    {
+
+    }
+
+    public void onSaveInstanceState(Bundle outState)
+    {
+        /* ここで状態を保存 */
+        Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onSaveInstanceState() : " + outState.toString() );
+    }
+
+    public void onRestoreInstanceState(Bundle savedInstanceState)
+    {
+        /* ここで状態を復元 */
+        Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onRestoreInstanceState() : " + savedInstanceState.toString());
+    }
+
+    public boolean finishTextEditDialog(String message)
+    {
+        if ((message == null)||(message.length() == 0))
+        {
+            // データが入力されていなかったので、何もしない。
+            return (false);
         }
 
-        public boolean finishTextEditDialog(String message)
+        try
         {
-               if ((message == null)||(message.length() == 0))
-               {
-                // データが入力されていなかったので、何もしない。
-                       return (false);
-               }
-               
-               // 文字列を記録
-               SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
+            // 文字列を記録
+            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(parent);
             SharedPreferences.Editor editor = preferences.edit();
             editor.putString("MeMoMaInfo", message);
-            editor.commit();
+            editor.apply();
 
             // タイトルに設定
             parent.setTitle(message);
 
-            // 保存シーケンスを一度走らせる 
+            // 保存シーケンスを一度走らせる
             saveData(true);
 
             // ファイル選択リストの更新
             dataInOutManager.updateFileList(message, parent.getSupportActionBar());
 
-            return (true);
         }
-        public boolean cancelTextEditDialog()
+        catch (Exception e)
         {
-            return (false);
+            e.printStackTrace();
         }
+        return (true);
+    }
+    public boolean cancelTextEditDialog()
+    {
+        return (false);
+    }
+
+    /**
+     *    接続線
+     *
+     */
+    public void finishSelectLineShape(int style, int shape, int thickness)
+    {
+        int buttonId = LineStyleHolder.getLineShapeImageId(style, shape);
+        final ImageButton lineStyleObj =parent.findViewById(R.id.LineStyleButton);
+        lineStyleObj.setImageResource(buttonId);
+        //Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::finishSelectLineShape() buttonId:" + buttonId);
+    }
+
+    /**
+     *
+     *
+     */
+    public void cancelSelectLineShape()
+    {
+
+    }
 
-        /**
-         *    接続線
-         * 
-         */
-        public void finishSelectLineShape(int style, int shape, int thickness)
-        {
-               int buttonId = LineStyleHolder.getLineShapeImageId(style, shape);
-            final ImageButton lineStyleObj = (ImageButton) parent.findViewById(R.id.LineStyleButton);
-            lineStyleObj.setImageResource(buttonId);   
-            //Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::finishSelectLineShape() buttonId:" + buttonId);
-        }
-
-        /**
-         * 
-         * 
-         */
-        public void cancelSelectLineShape()
-        {
-               
-        }
 }