From fdce5b50c5a4e06fbd63329365fe0d292a3d9a37 Mon Sep 17 00:00:00 2001 From: MRSa Date: Sun, 22 Jul 2018 23:27:56 +0900 Subject: [PATCH 1/1] =?utf8?q?=E3=82=AA=E3=83=96=E3=82=B8=E3=82=A7?= =?utf8?q?=E3=82=AF=E3=83=88=E3=81=AE=E5=89=8A=E9=99=A4=E4=BB=A5=E5=A4=96?= =?utf8?q?=E3=81=AE=E6=93=8D=E4=BD=9C=E3=82=92=E3=83=92=E3=82=B9=E3=83=88?= =?utf8?q?=E3=83=AA=E3=81=AB=E6=AE=8B=E3=81=99=E3=82=88=E3=81=86=E3=81=AB?= =?utf8?q?=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../java/jp/sourceforge/gokigen/memoma/Main.java | 2 +- .../sourceforge/gokigen/memoma/MeMoMaListener.java | 2350 ++++++++++---------- .../memoma/dialogs/FileSelectionDialog.java | 2 +- .../memoma/{ => drawers}/GokigenSurfaceView.java | 3 +- .../gokigen/memoma/drawers/MeMoMaCanvasDrawer.java | 321 ++- .../gokigen/memoma/drawers/ObjectShapeDrawer.java | 21 +- .../extension/ExtensionActivityListener.java | 23 +- .../memoma/holders/IOperationHistoryHolder.java | 31 + .../memoma/holders/MeMoMaConnectLineHolder.java | 228 +- .../memoma/holders/MeMoMaDataFileHolder.java | 10 +- .../gokigen/memoma/holders/MeMoMaObjectHolder.java | 175 +- .../gokigen/memoma/holders/ObjectConnector.java | 92 + .../memoma/holders/OperationHistoryHolder.java | 25 + .../gokigen/memoma/holders/PositionObject.java | 209 ++ .../{fileio => io}/ExternalStorageFileUtility.java | 2 +- .../gokigen/memoma/{fileio => io}/ImageLoader.java | 2 +- .../{fileio => io}/MeMoMaDataInOutManager.java | 18 +- .../{fileio => io}/MeMoMaFileExportCsvProcess.java | 168 +- .../{fileio => io}/MeMoMaFileImportCsvProcess.java | 17 +- .../{fileio => io}/MeMoMaFileLoadingProcess.java | 100 +- .../{fileio => io}/MeMoMaFileSavingEngine.java | 88 +- .../{fileio => io}/MeMoMaFileSavingProcess.java | 2 +- .../ObjectLayoutCaptureExporter.java | 28 +- .../memoma/{ => io}/SharedIntentInvoker.java | 2 +- .../memoma/{fileio => io}/ViewCaptureExporter.java | 2 +- .../gokigen/memoma/operations/ObjectAligner.java | 19 +- .../memoma/operations/ObjectDataInputDialog.java | 228 +- app/src/main/res/layout/extensionview.xml | 2 +- app/src/main/res/layout/main.xml | 2 +- app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 31 files changed, 2227 insertions(+), 1947 deletions(-) rename app/src/main/java/jp/sourceforge/gokigen/memoma/{ => drawers}/GokigenSurfaceView.java (97%) create mode 100644 app/src/main/java/jp/sourceforge/gokigen/memoma/holders/IOperationHistoryHolder.java create mode 100644 app/src/main/java/jp/sourceforge/gokigen/memoma/holders/ObjectConnector.java create mode 100644 app/src/main/java/jp/sourceforge/gokigen/memoma/holders/OperationHistoryHolder.java create mode 100644 app/src/main/java/jp/sourceforge/gokigen/memoma/holders/PositionObject.java rename app/src/main/java/jp/sourceforge/gokigen/memoma/{fileio => io}/ExternalStorageFileUtility.java (99%) rename app/src/main/java/jp/sourceforge/gokigen/memoma/{fileio => io}/ImageLoader.java (99%) rename app/src/main/java/jp/sourceforge/gokigen/memoma/{fileio => io}/MeMoMaDataInOutManager.java (95%) rename app/src/main/java/jp/sourceforge/gokigen/memoma/{fileio => io}/MeMoMaFileExportCsvProcess.java (50%) rename app/src/main/java/jp/sourceforge/gokigen/memoma/{fileio => io}/MeMoMaFileImportCsvProcess.java (95%) rename app/src/main/java/jp/sourceforge/gokigen/memoma/{fileio => io}/MeMoMaFileLoadingProcess.java (81%) rename app/src/main/java/jp/sourceforge/gokigen/memoma/{fileio => io}/MeMoMaFileSavingEngine.java (83%) rename app/src/main/java/jp/sourceforge/gokigen/memoma/{fileio => io}/MeMoMaFileSavingProcess.java (99%) rename app/src/main/java/jp/sourceforge/gokigen/memoma/{fileio => io}/ObjectLayoutCaptureExporter.java (91%) rename app/src/main/java/jp/sourceforge/gokigen/memoma/{ => io}/SharedIntentInvoker.java (98%) rename app/src/main/java/jp/sourceforge/gokigen/memoma/{fileio => io}/ViewCaptureExporter.java (99%) diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/Main.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/Main.java index ce507e8..3883f32 100644 --- a/app/src/main/java/jp/sourceforge/gokigen/memoma/Main.java +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/Main.java @@ -13,7 +13,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.Window; -import jp.sourceforge.gokigen.memoma.fileio.MeMoMaDataInOutManager; +import jp.sourceforge.gokigen.memoma.io.MeMoMaDataInOutManager; import static android.os.Build.VERSION_CODES.KITKAT; diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/MeMoMaListener.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/MeMoMaListener.java index 3b01b87..69f2bef 100644 --- a/app/src/main/java/jp/sourceforge/gokigen/memoma/MeMoMaListener.java +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/MeMoMaListener.java @@ -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) { - // 画面の再描画を指示する - redrawSurfaceview(); + // 確認するメッセージを表示する + 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() - { - - } } diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/dialogs/FileSelectionDialog.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/dialogs/FileSelectionDialog.java index 6e011c2..ed5c970 100644 --- a/app/src/main/java/jp/sourceforge/gokigen/memoma/dialogs/FileSelectionDialog.java +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/dialogs/FileSelectionDialog.java @@ -9,7 +9,7 @@ import android.view.View; import android.widget.AdapterView; import android.widget.ListView; -import jp.sourceforge.gokigen.memoma.fileio.ExternalStorageFileUtility; +import jp.sourceforge.gokigen.memoma.io.ExternalStorageFileUtility; import jp.sourceforge.gokigen.memoma.holders.MeMoMaDataFileHolder; import jp.sourceforge.gokigen.memoma.R; diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/GokigenSurfaceView.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/drawers/GokigenSurfaceView.java similarity index 97% rename from app/src/main/java/jp/sourceforge/gokigen/memoma/GokigenSurfaceView.java rename to app/src/main/java/jp/sourceforge/gokigen/memoma/drawers/GokigenSurfaceView.java index 42d320a..4a84e09 100644 --- a/app/src/main/java/jp/sourceforge/gokigen/memoma/GokigenSurfaceView.java +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/drawers/GokigenSurfaceView.java @@ -1,4 +1,4 @@ -package jp.sourceforge.gokigen.memoma; +package jp.sourceforge.gokigen.memoma.drawers; import android.content.Context; import android.graphics.Canvas; @@ -8,6 +8,7 @@ import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; +import jp.sourceforge.gokigen.memoma.Main; import jp.sourceforge.gokigen.memoma.drawers.ICanvasDrawer; /** diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/drawers/MeMoMaCanvasDrawer.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/drawers/MeMoMaCanvasDrawer.java index e586552..0c8ff7a 100644 --- a/app/src/main/java/jp/sourceforge/gokigen/memoma/drawers/MeMoMaCanvasDrawer.java +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/drawers/MeMoMaCanvasDrawer.java @@ -19,9 +19,10 @@ import android.view.ScaleGestureDetector; import android.widget.SeekBar; import android.widget.TextView; -import jp.sourceforge.gokigen.memoma.GokigenSurfaceView; +import jp.sourceforge.gokigen.memoma.holders.ObjectConnector; +import jp.sourceforge.gokigen.memoma.holders.PositionObject; import jp.sourceforge.gokigen.memoma.operations.IObjectSelectionReceiver; -import jp.sourceforge.gokigen.memoma.fileio.ImageLoader; +import jp.sourceforge.gokigen.memoma.io.ImageLoader; import jp.sourceforge.gokigen.memoma.Main; import jp.sourceforge.gokigen.memoma.R; import jp.sourceforge.gokigen.memoma.holders.LineStyleHolder; @@ -43,7 +44,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes public static final int BACKGROUND_COLOR_DEFAULT = 0xff004000; private int backgroundColor = BACKGROUND_COLOR_DEFAULT; - private MeMoMaObjectHolder.PositionObject selectedPosition = null; + private PositionObject selectedPosition = null; private float tempPosX = Float.MIN_VALUE; private float tempPosY = Float.MIN_VALUE; private float downPosX = Float.MIN_VALUE; @@ -52,7 +53,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes // 以下の値は、MeMoMaListenerで初期値を設定する private int objectStyle = MeMoMaObjectHolder.DRAWSTYLE_RECTANGLE; - private LineStyleHolder lineStyleHolder = null; + private LineStyleHolder lineStyleHolder; private float drawScale = 1.0f; // 表示の倍率 private float drawTransX = 0.0f; // 並行移動距離 (X) @@ -70,14 +71,14 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes private String backgroundBitmapUri = null; private Bitmap backgroundBitmap = null; - private MeMoMaObjectHolder objectHolder = null; - private MeMoMaConnectLineHolder lineHolder = null; - private IObjectSelectionReceiver selectionReceiver = null; + private MeMoMaObjectHolder objectHolder; + private MeMoMaConnectLineHolder lineHolder; + private IObjectSelectionReceiver selectionReceiver; - private GestureDetector gestureDetector = null; - private ScaleGestureDetector scaleGestureDetector = null; + private GestureDetector gestureDetector; + private ScaleGestureDetector scaleGestureDetector; - private Activity parent = null; + private Activity parent; /** * コンストラクタ @@ -103,7 +104,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes * オブジェクトの形状を変更する * (ここで指定された形状のチェックを行っておく。) * - * @param style + * */ public void setObjectStyle(int style) { @@ -173,7 +174,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes /** * 背景画像を設定する * - * @param uri + * */ public void setBackgroundUri(String uri) { @@ -183,7 +184,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes /** * 背景色を(文字列で)設定する * - * @param colorString + * */ public void setBackgroundColor(String colorString) { @@ -264,8 +265,8 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes // オブジェクトをすべて表示 drawObjects(canvas, 0.0f, 0.0f); - /** 移動中かどうかのチェックを行う。 **/ - if (isFlicking(canvas) == true) + // 移動中かどうかのチェックを行う。 + if (isFlicking(canvas)) { // 移動中の場合、フリック時の軌跡と現在位置を表示する drawTrackAndPositions(canvas); @@ -325,7 +326,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes /** * オブジェクト間の接続線を表示する * - * @param canvas + * */ private void drawConnectionLines(Canvas canvas, float offsetX, float offsetY) { @@ -345,8 +346,8 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes while (keys.hasMoreElements()) { Integer key = keys.nextElement(); - MeMoMaConnectLineHolder.ObjectConnector line = lineHolder.getLine(key); - if (line.key > 0) + ObjectConnector line = lineHolder.getLine(key); + if (line.getKey() > 0) { // 実際にラインを引く drawLine(canvas, paint, dashLinePaint, line, offsetX, offsetY); @@ -362,11 +363,8 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes /** * 接続する線を引く * - * @param canvas - * @param paint - * @param line */ - public void drawLine(Canvas canvas, Paint paint, Paint dashPaint, MeMoMaConnectLineHolder.ObjectConnector line, float offsetX, float offsetY) + private void drawLine(Canvas canvas, Paint paint, Paint dashPaint, ObjectConnector line, float offsetX, float offsetY) { try { @@ -376,8 +374,8 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes return; } - MeMoMaObjectHolder.PositionObject from = objectHolder.getPosition(line.fromObjectKey); - MeMoMaObjectHolder.PositionObject to = objectHolder.getPosition(line.toObjectKey); + PositionObject from = objectHolder.getPosition(line.getFromObjectKey()); + PositionObject to = objectHolder.getPosition(line.getToObjectKey()); if ((from == null)||(to == null)) { // なにもしない @@ -385,66 +383,69 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes } // ラインの太さを設定する。 - paint.setStrokeWidth((float) line.lineThickness); + paint.setStrokeWidth((float) line.getLineThickness()); // ラインの太さを設定する。 - dashPaint.setStrokeWidth((float) line.lineThickness); + dashPaint.setStrokeWidth((float) line.getLineThickness()); // ラインのスタイル(連続線 or 点線)を設定する - Paint linePaint = (line.lineShape == LineStyleHolder.LINESHAPE_DASH) ? dashPaint : paint; + Paint linePaint = (line.getLineShape() == LineStyleHolder.LINESHAPE_DASH) ? dashPaint : paint; // 初期値として、各オブジェクトの中心座標を設定する - float startX = from.rect.centerX() + offsetX; - float endX = to.rect.centerX() + offsetX; - float startY = from.rect.centerY() + offsetY; - float endY = to.rect.centerY() + offsetY; + RectF fromRect = from.getRect(); + RectF toRect = to.getRect(); + float startX = fromRect.centerX() + offsetX; + float endX = toRect.centerX() + offsetX; + float startY = fromRect.centerY() + offsetY; + float endY = toRect.centerY() + offsetY; // Y座標の線の位置を補正する - if (from.rect.bottom < to.rect.top) + if (fromRect.bottom < toRect.top) { - startY = from.rect.bottom + offsetY; - endY = to.rect.top + offsetY; + startY = fromRect.bottom + offsetY; + endY = toRect.top + offsetY; } - else if (from.rect.top > to.rect.bottom) + else if (fromRect.top > toRect.bottom) { - startY = from.rect.top + offsetY; - endY = to.rect.bottom + offsetY; + startY = fromRect.top + offsetY; + endY = toRect.bottom + offsetY; } // X座標の線の位置を補正する (Y座標が補正されていないとき) - if ((startY != (from.rect.top + offsetY))&&(startY != (from.rect.bottom + offsetY))) + if ((startY != (fromRect.top + offsetY))&&(startY != (fromRect.bottom + offsetY))) { - if (from.rect.right < to.rect.left) + if (fromRect.right < toRect.left) { - startX = from.rect.right + offsetX; - endX = to.rect.left + offsetX; + startX = fromRect.right + offsetX; + endX = toRect.left + offsetX; } - else if (from.rect.left > to.rect.right) + else if (fromRect.left > toRect.right) { - startX = from.rect.left + offsetX; - endX = to.rect.right + offsetX; + startX = fromRect.left + offsetX; + endX = toRect.right + offsetX; } } - if ((line.lineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_NO_ARROW)|| - (line.lineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_L_ARROW)|| - (line.lineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_R_ARROW)) + int lineStyle = line.getLineStyle(); + if ((lineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_NO_ARROW)|| + (lineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_L_ARROW)|| + (lineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_R_ARROW)) { // ツリー形式のように接続する ... - if (startX == (from.rect.centerX() + offsetX)) + if (startX == (fromRect.centerX() + offsetX)) { float middleY = (startY + endY) / 2; canvas.drawLine(startX, startY, startX, middleY, linePaint); canvas.drawLine(startX, middleY, endX, middleY, linePaint); canvas.drawLine(endX, middleY, endX, endY, linePaint); - /** やじるしをつける処理 **/ - if (line.lineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_L_ARROW) + // やじるしをつける処理 + if (lineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_L_ARROW) { // 始点に矢印をつける ObjectShapeDrawer.drawArrowTree(canvas, paint, startX,startY, middleY, false); } - else if (line.lineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_R_ARROW) + else if (lineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_R_ARROW) { // 終点に矢印をつける ObjectShapeDrawer.drawArrowTree(canvas, paint, endX, endY, middleY, false); @@ -457,43 +458,41 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes canvas.drawLine(middleX, startY, middleX, endY, linePaint); canvas.drawLine(middleX, endY, endX, endY, linePaint); - /** やじるし(三角形)をつける処理 **/ - if (line.lineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_L_ARROW) + // やじるし(三角形)をつける処理 + if (lineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_L_ARROW) { // 始点に矢印をつける ObjectShapeDrawer.drawArrowTree(canvas, paint, startX, startY, middleX, true); } - else if (line.lineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_R_ARROW) + else if (lineStyle == LineStyleHolder.LINESTYLE_TREESTYLE_R_ARROW) { // 終点に矢印をつける ObjectShapeDrawer.drawArrowTree(canvas, paint, endX,endY, middleX, true); } } } - else if ((line.lineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_NO_ARROW)|| - (line.lineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_L_ARROW)|| - (line.lineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_R_ARROW)) + else if ((lineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_NO_ARROW)|| + (lineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_L_ARROW)|| + (lineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_R_ARROW)) { // 曲線で接続する float middleX = (startX + endX) / 2; float middleY = (startY + endY) / 2; float x1 = (startX + middleX) / 2; - float y1 = middleY; float x2 = (middleX + endX) / 2; - float y2 = middleY; Path pathLine = new Path(); pathLine.moveTo(startX, startY); - pathLine.cubicTo(x1, y1, x2, y2, endX, endY); + pathLine.cubicTo(x1, middleY, x2, middleY, endX, endY); canvas.drawPath(pathLine, linePaint); - /** やじるしをつける処理 **/ - if (line.lineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_L_ARROW) + // やじるしをつける処理 + if (lineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_L_ARROW) { // 始点に矢印をつける ObjectShapeDrawer.drawArrow(canvas, paint, startX, startY, endX, endY); } - else if (line.lineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_R_ARROW) + else if (lineStyle == LineStyleHolder.LINESTYLE_CURVESTYLE_R_ARROW) { // 終点に矢印をつける ObjectShapeDrawer.drawArrow(canvas, paint, endX, endY, startX, startY); @@ -504,13 +503,13 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes // 直線で接続する canvas.drawLine(startX, startY, endX, endY, linePaint); - /** やじるしをつける処理 **/ - if (line.lineStyle == LineStyleHolder.LINESTYLE_STRAIGHT_L_ARROW) + // やじるしをつける処理 + if (lineStyle == LineStyleHolder.LINESTYLE_STRAIGHT_L_ARROW) { // 始点に矢印をつける ObjectShapeDrawer.drawArrow(canvas, paint, startX, startY, endX, endY); } - else if (line.lineStyle == LineStyleHolder.LINESTYLE_STRAIGHT_R_ARROW) + else if (lineStyle == LineStyleHolder.LINESTYLE_STRAIGHT_R_ARROW) { // 終点に矢印をつける ObjectShapeDrawer.drawArrow(canvas, paint, endX, endY, startX, startY); @@ -527,24 +526,18 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes /** * オブジェクトを動かしている最中かどうかの判定を行う。 * - * @param canvas + * * @return trueなら、動かしている最中 */ private boolean isFlicking(Canvas canvas) { - //int width = canvas.getWidth(); - //int height = canvas.getHeight(); - if ((tempPosX == Float.MIN_VALUE)||(tempPosY == Float.MIN_VALUE)) - { - return (false); - } - return (true); + return (!((tempPosX == Float.MIN_VALUE)||(tempPosY == Float.MIN_VALUE))); } /** * フリック時の軌跡と現在地点を表示する * - * @param canvas + * */ private void drawTrackAndPositions(Canvas canvas) { @@ -557,9 +550,10 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes paint.setColor(Color.GRAY); if (selectedPosition != null) { - float objX = (selectedPosition.rect.right - selectedPosition.rect.left) / 2; - float objY = (selectedPosition.rect.bottom - selectedPosition.rect.top) / 2; - canvas.drawLine(selectedPosition.rect.centerX(), selectedPosition.rect.centerY(), x, y, paint); + RectF objRect = selectedPosition.getRect(); + float objX = (objRect.right - objRect.left) / 2; + float objY = (objRect.bottom - objRect.top) / 2; + canvas.drawLine(objRect.centerX(), objRect.centerY(), x, y, paint); canvas.drawRect((x - objX), (y - objY), (x + objX), (y + objY), paint); // 現在地点の表示 @@ -579,7 +573,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes SharedPreferences.Editor editor = preferences.edit(); editor.putFloat("drawTransX", drawTransX); editor.putFloat("drawTransY", drawTransY); - editor.commit(); + editor.apply(); } else { @@ -594,114 +588,115 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes * オブジェクト(1個)を表示する * */ - private void drawObject(Canvas canvas, MeMoMaObjectHolder.PositionObject object, boolean isMoving, float offsetX, float offsetY) + private void drawObject(Canvas canvas, PositionObject object, boolean isMoving, float offsetX, float offsetY) { float label_offsetX = OBJECTLABEL_MARGIN; float label_offsetY = 0.0f; // オブジェクトの色と枠線を設定する Paint paint = new Paint(); - if (isMoving == true) + if (isMoving) { paint.setColor(Color.YELLOW); paint.setStyle(Paint.Style.STROKE); - paint.setStrokeWidth(object.strokeWidth); + paint.setStrokeWidth(object.getstrokeWidth()); } else { - paint.setColor(object.objectColor); - paint.setStyle(Paint.Style.valueOf(object.paintStyle)); - paint.setStrokeWidth(object.strokeWidth); + paint.setColor(object.getObjectColor()); + paint.setStyle(Paint.Style.valueOf(object.getPaintStyle())); + paint.setStrokeWidth(object.getstrokeWidth()); } // 図形の形状に合わせて描画する - RectF objectShape = new RectF(object.rect); + RectF objectShape = new RectF(object.getRect()); objectShape.left = objectShape.left + offsetX; objectShape.right = objectShape.right + offsetX; objectShape.top = objectShape.top + offsetY; objectShape.bottom = objectShape.bottom + offsetY; - - if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_OVAL) + + int drawStyle = object.getDrawStyle(); + if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_OVAL) { // 楕円形の描画 label_offsetY = ObjectShapeDrawer.drawObjectOval(canvas, objectShape, paint); } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_ROUNDRECT) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_ROUNDRECT) { // 丸角四角形の描画 label_offsetY = ObjectShapeDrawer.drawObjectRoundRect(canvas, objectShape, paint); } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_DIAMOND) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_DIAMOND) { // 菱形の描画 label_offsetY = ObjectShapeDrawer.drawObjectDiamond(canvas, objectShape, paint); label_offsetX = OBJECTLABEL_MARGIN; } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_KEYBOARD) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_KEYBOARD) { // 台形(キーボード型)の描画 label_offsetY = ObjectShapeDrawer.drawObjectKeyboard(canvas, objectShape, paint); } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_PARALLELOGRAM) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_PARALLELOGRAM) { // 平行四辺形の描画 label_offsetY = ObjectShapeDrawer.drawObjectParallelogram(canvas, objectShape, paint); } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_HEXAGONAL) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_HEXAGONAL) { // 六角形の描画 label_offsetY = ObjectShapeDrawer.drawObjectHexagonal(canvas, objectShape, paint); } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_PAPER) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_PAPER) { // 書類の形の描画 label_offsetY = ObjectShapeDrawer.drawObjectPaper(canvas, objectShape, paint); } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_DRUM) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_DRUM) { // 円柱の描画 - label_offsetY = ObjectShapeDrawer.drawObjectDrum(canvas, objectShape, paint, Paint.Style.valueOf(object.paintStyle)); + label_offsetY = ObjectShapeDrawer.drawObjectDrum(canvas, objectShape, paint, Paint.Style.valueOf(object.getPaintStyle())); } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_CIRCLE) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_CIRCLE) { // 円を描画する label_offsetY = ObjectShapeDrawer.drawObjectCircle(canvas, objectShape, paint); } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_NO_REGION) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_NO_REGION) { // 枠なしを描画(?)する ... なにもしない - if (object.label.length() == 0) + if (object.getLabel().length() == 0) { // 何も表示しないとわからないので、ラベルが無いときには枠を表示する ObjectShapeDrawer.drawObjectNoRegion(canvas, objectShape, paint); } } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_LOOP_START) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_LOOP_START) { // ループ開始図形の描画 label_offsetY = ObjectShapeDrawer.drawObjectLoopStart(canvas, objectShape, paint); } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_LOOP_END) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_LOOP_END) { // ループ終了図形の描画 label_offsetY = ObjectShapeDrawer.drawObjectLoopEnd(canvas, objectShape, paint); } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_LEFT_ARROW) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_LEFT_ARROW) { // 左側矢印図形の描画 label_offsetY = ObjectShapeDrawer.drawObjectLeftArrow(canvas, objectShape, paint); } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_DOWN_ARROW) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_DOWN_ARROW) { // 下側矢印図形の描画 label_offsetY = ObjectShapeDrawer.drawObjectDownArrow(canvas, objectShape, paint); } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_UP_ARROW) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_UP_ARROW) { // 上側矢印図形の描画 label_offsetY = ObjectShapeDrawer.drawObjectUpArrow(canvas, objectShape, paint); } - else if (object.drawStyle == MeMoMaObjectHolder.DRAWSTYLE_RIGHT_ARROW) + else if (drawStyle == MeMoMaObjectHolder.DRAWSTYLE_RIGHT_ARROW) { // 右側矢印図形の描画 label_offsetY = ObjectShapeDrawer.drawObjectRightArrow(canvas, objectShape, paint); @@ -713,7 +708,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes } // 文字サイズを設定する。 - paint.setTextSize(object.fontSize); + paint.setTextSize(object.getFontSize()); // 文字ラベルを表示する ObjectShapeDrawer.drawTextLabel(canvas, paint, object, objectShape, displayObjectInformation, label_offsetX, label_offsetY); @@ -722,7 +717,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes /** * オブジェクトをすべて表示する * - * @param canvas + * */ private void drawObjects(Canvas canvas , float offsetX, float offsetY) { @@ -731,15 +726,14 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes while (keys.hasMoreElements()) { Integer key = keys.nextElement(); - MeMoMaObjectHolder.PositionObject pos = objectHolder.getPosition(key); + PositionObject pos = objectHolder.getPosition(key); drawObject(canvas, pos, false, offsetX, offsetY); } } /** * タッチされたタイミングでの処理 - * @param event - * @return + * */ private boolean onTouchDown(MotionEvent event) { @@ -765,6 +759,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes // オブジェクトが生成されたことを通知する selectionReceiver.objectCreated(); } +/* else if (data ==OperationModeHolder.OPERATIONMODE_MOVE) { // 移動モードのとき @@ -773,19 +768,19 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes { // 削除モードのとき...何もしない } +*/ } return (false); } /** * タッチが離されたタイミングでの処理 - * @param event - * @return + * */ private boolean onTouchUp(MotionEvent event) { boolean longPress = false; - if (onGestureProcessed == true) + if (onGestureProcessed) { // ロングタッチ中だった場合...フラグを落とす onGestureProcessed = false; @@ -827,24 +822,25 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes return (true); } - if (selectedPosition.rect.contains(x, y) == true) + RectF selectedRect = selectedPosition.getRect(); + if (selectedRect.contains(x, y)) { // タッチが離された位置がタッチしたオブジェクトと同じ位置だった場合...... // タッチが離された位置を認識する float diffX = Math.abs(event.getX() - drawTransX - downPosX); - float diffY = Math.abs(event.getY() - drawTransY - downPosY); + float diffY = Math.abs(event.getY() - drawTransY - downPosY); // タッチが離された位置が動いていた場合、オブジェクト位置の微調整と判定する。 - if (((diffX > 2.0f)||(diffY > 2.0f))||(longPress == true)) + if (((diffX > 2.0f)||(diffY > 2.0f))||(longPress)) { // タッチが離された場所にはオブジェクトがなかった場合...オブジェクトをその位置に移動させる Log.v(Main.APP_IDENTIFIER, "MOVE OBJECT : (" + diffX + "," + diffY + ")"); moveObjectPosition(x, y); return (true); } - - // タッチが押された位置と離された位置が同じ位置だった場合......アイテムが選択された、と認識する。 + + // タッチが押された位置と離された位置が同じ位置だった場合......アイテムが選択された、と認識する。 Log.v(Main.APP_IDENTIFIER, " ITEM SELECTED :" + x + "," + y); if (selectionReceiver != null) { @@ -859,8 +855,8 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes } // タッチが離された位置にオブジェクトがいるかどうかのチェック - MeMoMaObjectHolder.PositionObject position = checkSelectedObject(x, y); - if ((position != null)&&(longPress == false)) + PositionObject position = checkSelectedObject(x, y); + if ((position != null)&&(!longPress)) { // 他のオブジェクトと重なるように操作した、この場合は、オブジェクト間を線をつなげる // (ただし、ボタンを長押ししていなかったとき。) @@ -885,22 +881,19 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes /** * オブジェクトの位置を移動させる - * - * @param x - * @param y + * */ private void moveObjectPosition(float x, float y) { + RectF curRect = selectedPosition.getRect(); tempPosX = Float.MIN_VALUE; tempPosY = Float.MIN_VALUE; - float sizeX = selectedPosition.rect.right - selectedPosition.rect.left; - float sizeY = selectedPosition.rect.bottom - selectedPosition.rect.top; + float sizeX = curRect.right - curRect.left; + float sizeY = curRect.bottom - curRect.top; float positionX = alignPosition(x, (sizeX / 2) * (-1)); float positionY = alignPosition(y, (sizeY / 2) * (-1)); - selectedPosition.rect = new android.graphics.RectF(positionX, positionY, (positionX + sizeX), (positionY + sizeY)); - - return; + selectedPosition.setRect(new android.graphics.RectF(positionX, positionY, (positionX + sizeX), (positionY + sizeY))); } /** @@ -909,22 +902,22 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes */ public boolean onTouchEvent(MotionEvent event) { - boolean isDraw = false; + boolean isDraw; - /** スケールジェスチャ(マルチタッチのジェスチャ)を拾う **/ - isDraw = scaleGestureDetector.onTouchEvent(event); - if ((onScaling == true)||(scaleGestureDetector.isInProgress() == true)) + // スケールジェスチャ(マルチタッチのジェスチャ)を拾う + // isDraw = scaleGestureDetector.onTouchEvent(event); + if ((onScaling)||(scaleGestureDetector.isInProgress())) { // マルチタッチ操作中... return (true); } - /** 先にジェスチャーを拾ってみよう... **/ + // 先にジェスチャーを拾ってみよう... isDraw = gestureDetector.onTouchEvent(event); - if (isDraw == true) + if (isDraw) { Log.v(Main.APP_IDENTIFIER, "MeMoMaCanvasDrawer::onTouchEvent() : isDraw == true"); - return (isDraw); + return (true); } int action = event.getAction(); @@ -953,8 +946,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes /** * タテヨコ位置を合わせられるよう、調整する。 - * @param pos - * @return + * */ private float alignPosition(float pos, float offset) { @@ -965,21 +957,20 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes /** * 位置から判定し、選択したオブジェクトを応答する * (オブジェクトが選択されていない場合には、nullを応答する) - * @param x - * @param y - * @return + * */ - private MeMoMaObjectHolder.PositionObject checkSelectedObject(float x, float y) + private PositionObject checkSelectedObject(float x, float y) { Enumeration keys = objectHolder.getObjectKeys(); //Log.v(Main.APP_IDENTIFIER, "CHECK POS " + x + "," + y); while (keys.hasMoreElements()) { Integer key = keys.nextElement(); - MeMoMaObjectHolder.PositionObject pos = objectHolder.getPosition(key); - if (pos.rect.contains(x, y) == true) + PositionObject pos = objectHolder.getPosition(key); + RectF posRect = pos.getRect(); + if (posRect.contains(x, y)) { - Log.v(Main.APP_IDENTIFIER, "SELECTED :" + pos.rect.centerX() + "," + pos.rect.centerY() + " KEY :" + key); + Log.v(Main.APP_IDENTIFIER, "SELECTED :" + posRect.centerX() + "," + posRect.centerY() + " KEY :" + key); return (pos); } //Log.v(Main.APP_IDENTIFIER, "NOT MATCH :" + pos.rect.centerX() + "," + pos.rect.centerY()); @@ -991,10 +982,6 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes /** * 線と交差するオブジェクト接続線をすべて削除する * - * @param startX - * @param startY - * @param endX - * @param endY */ private void disconnectObjects(float startX, float startY, float endX, float endY) { @@ -1005,19 +992,19 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes while (keys.hasMoreElements()) { Integer key = keys.nextElement(); - MeMoMaConnectLineHolder.ObjectConnector line = lineHolder.getLine(key); - if (line.key > 0) + ObjectConnector line = lineHolder.getLine(key); + if (line.getKey() > 0) { // 線の始点と終点を取り出す - MeMoMaObjectHolder.PositionObject from = objectHolder.getPosition(line.fromObjectKey); - MeMoMaObjectHolder.PositionObject to = objectHolder.getPosition(line.toObjectKey); + RectF fromRect = objectHolder.getPosition(line.getFromObjectKey()).getRect(); + RectF toRect = objectHolder.getPosition(line.getToObjectKey()).getRect(); // 線が交差しているかチェックする - if (checkIntersection(startX, startY, endX, endY, from.rect.centerX(), from.rect.centerY(), to.rect.centerX(), to.rect.centerY()) == true) + if (checkIntersection(startX, startY, endX, endY, fromRect.centerX(), fromRect.centerY(), toRect.centerX(), toRect.centerY())) { // 線が交差していた! 線を切る! //Log.v(Main.APP_IDENTIFIER, "CUT LINE [" + from.rect.centerX() + "," + from.rect.centerY() +"]-[" + to.rect.centerX() + "," + to.rect.centerY() + "]"); - lineHolder.disconnectLines(line.key); + lineHolder.disconnectLines(line.getKey()); } } } @@ -1062,11 +1049,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes //crossY = y1 + dR * (y2 - y1); // 交点が線分内にあるかどうかをチェックする - if ((dR >= 0)&&(dR <= 1)&&(dS >= 0)&&(dS <= 1)) - { - return (true); - } - return (false); + return ((dR >= 0)&&(dR <= 1)&&(dS >= 0)&&(dS <= 1)); } /** @@ -1090,7 +1073,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes /** * スライドバーを変更された時の処理 */ - public void zoomScaleChanged(int progress) + private void zoomScaleChanged(int progress) { float val = ((float) progress - 50.0f) / 50.0f; @@ -1100,8 +1083,9 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes // 表示倍率を変更し、倍率を画面に表示する drawScale = (float) Math.round(Math.pow(10.0, val) * 10.0) / 10.0f; - TextView textview = (TextView) parent.findViewById(R.id.ZoomRate); - textview.setText("x" + drawScale); + TextView textview = parent.findViewById(R.id.ZoomRate); + String showText = "x" + drawScale; + textview.setText(showText); // 現在の表示領域サイズを取得 float showSizeWidth = screenWidth * drawScale; @@ -1128,7 +1112,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes editor.putFloat("drawTransX", drawTransX); editor.putFloat("drawTransY", drawTransY); editor.putInt("zoomProgress", progress); - editor.commit(); + editor.apply(); } /** @@ -1174,7 +1158,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes float y = (event.getY() - drawTransY) / drawScale; // タッチ位置にオブジェクトが存在するか確認する - MeMoMaObjectHolder.PositionObject position = checkSelectedObject(x, y); + PositionObject position = checkSelectedObject(x, y); if (position != null) { // 長押し処理を実施していることを記憶する @@ -1221,7 +1205,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes zoomScaleChanged(progress); // 画面描画クラスに再描画を指示する - final GokigenSurfaceView surfaceView = (GokigenSurfaceView) parent.findViewById(R.id.GraphicView); + final GokigenSurfaceView surfaceView = parent.findViewById(R.id.GraphicView); surfaceView.doDraw(); } @@ -1244,15 +1228,14 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes /** * (ScaleGestureDetector.OnScaleGestureListener の実装) * - * @param detector - * @return + * */ public boolean onScale(ScaleGestureDetector detector) { float scaleFactor = detector.getScaleFactor(); //Log.v(Main.APP_IDENTIFIER, "MeMoMaCanvasDrawer::onScale() : " + scaleFactor + " (" + currentScaleBar + ")"); - /** 画面表示の倍率が変更された! x < 1 : 縮小、 1 < x : 拡大 **/ + // 画面表示の倍率が変更された! x < 1 : 縮小、 1 < x : 拡大 if (scaleFactor < 1.0f) { currentScaleBar = (currentScaleBar == 0) ? 0 : currentScaleBar - 1; @@ -1290,7 +1273,7 @@ public class MeMoMaCanvasDrawer implements ICanvasDrawer, GestureDetector.OnGes onScaling = false; // シークバーを設定し、値を記憶する - final SeekBar seekbar = (SeekBar) parent.findViewById(R.id.ZoomInOut); + final SeekBar seekbar = parent.findViewById(R.id.ZoomInOut); seekbar.setProgress(currentScaleBar); zoomScaleChanged(currentScaleBar); } diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/drawers/ObjectShapeDrawer.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/drawers/ObjectShapeDrawer.java index a0dbaac..98db501 100644 --- a/app/src/main/java/jp/sourceforge/gokigen/memoma/drawers/ObjectShapeDrawer.java +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/drawers/ObjectShapeDrawer.java @@ -7,6 +7,7 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; import jp.sourceforge.gokigen.memoma.holders.MeMoMaObjectHolder; +import jp.sourceforge.gokigen.memoma.holders.PositionObject; /** * めもまのオブジェクト・ライン・ラベルを描画するメソッド群 @@ -304,26 +305,26 @@ public class ObjectShapeDrawer * オブジェクトのラベルを表示する * */ - public static void drawTextLabel(Canvas canvas, Paint paint, MeMoMaObjectHolder.PositionObject pos, RectF region, int displayObjectInformation, float offsetX, float offsetY) + public static void drawTextLabel(Canvas canvas, Paint paint, PositionObject pos, RectF region, int displayObjectInformation, float offsetX, float offsetY) { // タイトルの先頭部分を表示する場合... - String labelToShow = pos.label; + String labelToShow = pos.getLabel(); if (displayObjectInformation == 0) { float width = region.width() - MeMoMaCanvasDrawer.OBJECTLABEL_MARGIN_WIDTH; - int textLen = paint.breakText(pos.label, true, width, null); // 省略文字を追加するから、そのぶん減らす + int textLen = paint.breakText(pos.getLabel(), true, width, null); // 省略文字を追加するから、そのぶん減らす labelToShow = labelToShow.substring(0, textLen); - if (!labelToShow.equals(pos.label)) + if (!labelToShow.equals(pos.getLabel())) { // truncate した場合には、省略文字を出す。 labelToShow = labelToShow + "..."; } } - if (Paint.Style.valueOf(pos.paintStyle) != Paint.Style.STROKE) + if (Paint.Style.valueOf(pos.getPaintStyle()) != Paint.Style.STROKE) { // オブジェクトを塗りつぶすのときは、文字の色を設定する - paint.setColor(pos.labelColor); + paint.setColor(pos.getLabelColor()); } // 文字をちょっと影付きにする @@ -331,13 +332,13 @@ public class ObjectShapeDrawer paint.setShadowLayer(0.7f, 0.7f, 0.7f, Color.DKGRAY); // ユーザチェックの描画 - if (pos.userChecked) + if (pos.getUserChecked()) { canvas.drawText("*", region.centerX(), region.top + (MeMoMaCanvasDrawer.OBJECTLABEL_MARGIN * 2.0f), paint); } // 強調表示 - if (pos.strokeWidth != 0.0f) + if (pos.getstrokeWidth() != 0.0f) { // そのまま表示すると、読めないので、太さを調整し、アンダーラインを引くことにする paint.setStrokeWidth(0.0f); @@ -358,10 +359,10 @@ public class ObjectShapeDrawer float width = region.right - region.left - 12.0f; // 幅 int startChar = 0; - int endChar = pos.label.length(); + int endChar = pos.getLabel().length(); do { - int textLen = paint.breakText(pos.label, startChar, endChar, true, width, null); + int textLen = paint.breakText(pos.getLabel(), startChar, endChar, true, width, null); canvas.drawText(labelToShow, startChar, (startChar +textLen), posX, posY, paint); posY = posY - tall; diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/extension/ExtensionActivityListener.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/extension/ExtensionActivityListener.java index 70298f6..6bfde6b 100644 --- a/app/src/main/java/jp/sourceforge/gokigen/memoma/extension/ExtensionActivityListener.java +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/extension/ExtensionActivityListener.java @@ -25,16 +25,18 @@ import android.widget.ListAdapter; import android.widget.ListView; import android.widget.Toast; -import jp.sourceforge.gokigen.memoma.fileio.ExternalStorageFileUtility; +import jp.sourceforge.gokigen.memoma.holders.OperationHistoryHolder; +import jp.sourceforge.gokigen.memoma.holders.PositionObject; +import jp.sourceforge.gokigen.memoma.io.ExternalStorageFileUtility; import jp.sourceforge.gokigen.memoma.dialogs.FileSelectionDialog; import jp.sourceforge.gokigen.memoma.Main; import jp.sourceforge.gokigen.memoma.holders.MeMoMaConnectLineHolder; -import jp.sourceforge.gokigen.memoma.fileio.MeMoMaFileExportCsvProcess; -import jp.sourceforge.gokigen.memoma.fileio.MeMoMaFileImportCsvProcess; -import jp.sourceforge.gokigen.memoma.fileio.MeMoMaFileLoadingProcess; +import jp.sourceforge.gokigen.memoma.io.MeMoMaFileExportCsvProcess; +import jp.sourceforge.gokigen.memoma.io.MeMoMaFileImportCsvProcess; +import jp.sourceforge.gokigen.memoma.io.MeMoMaFileLoadingProcess; import jp.sourceforge.gokigen.memoma.holders.MeMoMaObjectHolder; import jp.sourceforge.gokigen.memoma.R; -import jp.sourceforge.gokigen.memoma.SharedIntentInvoker; +import jp.sourceforge.gokigen.memoma.io.SharedIntentInvoker; import jp.sourceforge.gokigen.memoma.listitem.SymbolListArrayAdapter; import jp.sourceforge.gokigen.memoma.listitem.SymbolListArrayItem; @@ -68,9 +70,10 @@ public class ExtensionActivityListener implements OnClickListener, MeMoMaFileLo */ ExtensionActivityListener(Activity argument) { + OperationHistoryHolder historyHolder = new OperationHistoryHolder(); parent = argument; fileUtility = new ExternalStorageFileUtility(Main.APP_BASEDIR); - objectHolder = new MeMoMaObjectHolder(parent, new MeMoMaConnectLineHolder()); + objectHolder = new MeMoMaObjectHolder(parent, new MeMoMaConnectLineHolder(historyHolder), historyHolder); } /** * 起動時にデータを準備する @@ -350,16 +353,16 @@ public class ExtensionActivityListener implements OnClickListener, MeMoMaFileLo while (keys.hasMoreElements()) { Integer key = keys.nextElement(); - MeMoMaObjectHolder.PositionObject pos = objectHolder.getPosition(key); + PositionObject pos = objectHolder.getPosition(key); // アイコンの決定 - int objectStyleIcon = MeMoMaObjectHolder .getObjectDrawStyleIcon(pos.drawStyle); + int objectStyleIcon = MeMoMaObjectHolder .getObjectDrawStyleIcon(pos.getDrawStyle()); // ユーザチェックの有無表示 - int userCheckedIcon = (pos.userChecked) ? R.drawable.btn_checked : R.drawable.btn_notchecked; + int userCheckedIcon = (pos.getUserChecked()) ? R.drawable.btn_checked : R.drawable.btn_notchecked; // TODO: アイテム選択時の情報エリアは(ArrayItem側には)用意しているが未使用。 - SymbolListArrayItem listItem = new SymbolListArrayItem(userCheckedIcon, pos.label, pos.detail, "", objectStyleIcon); + SymbolListArrayItem listItem = new SymbolListArrayItem(userCheckedIcon, pos.getLabel(), pos.getDetail(), "", objectStyleIcon); listItems.add(listItem); } diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/IOperationHistoryHolder.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/IOperationHistoryHolder.java new file mode 100644 index 0000000..3a009d2 --- /dev/null +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/IOperationHistoryHolder.java @@ -0,0 +1,31 @@ +package jp.sourceforge.gokigen.memoma.holders; + +interface IOperationHistoryHolder +{ + enum ChangeKind + { + RECTANGLE, + DRAW_STYLE, + ICON, + LABEL, + DETAIL, + USER_CHECKED, + LABEL_COLOR, + OBJECT_COLOR, + PAINT_STYLE, + STROKE_WIDTH, + FONT_SIZE, + NEW_OBJECT, + NEW_CONNECT_LINE, + CONNECT_LINE_FROM_KEY, + CONNECT_LINE_TO_KEY, + CONNECT_LINE_STYLE, + CONNECT_LINE_SHAPE, + CONNECT_LINE_THICKNESS, + }; + + + void addHistory(int key, ChangeKind kind, Object object); + void undo(); + +} diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/MeMoMaConnectLineHolder.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/MeMoMaConnectLineHolder.java index 1ec444f..a7e8f59 100644 --- a/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/MeMoMaConnectLineHolder.java +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/MeMoMaConnectLineHolder.java @@ -5,7 +5,6 @@ import java.util.Hashtable; import android.util.Log; import jp.sourceforge.gokigen.memoma.Main; -import jp.sourceforge.gokigen.memoma.holders.LineStyleHolder; /** @@ -13,141 +12,96 @@ import jp.sourceforge.gokigen.memoma.holders.LineStyleHolder; * * @author MRSa * - */public class MeMoMaConnectLineHolder + */ +public class MeMoMaConnectLineHolder { - public static final int ID_NOTSPECIFY = -1; - - /** - * オブジェクト間を接続するクラス - * - * @author MRSa - * - */ - public class ObjectConnector - { - public Integer key; - public Integer fromObjectKey; - public Integer toObjectKey; - public Integer lineStyle; - public Integer lineShape; - public Integer lineThickness; -/** - public int fromShape; - public int toShape; - public String fromString; - public String toString; -**/ - }; - - private Hashtable connectLines = null; - private Integer serialNumber = 1; - - public MeMoMaConnectLineHolder() - { - connectLines = new Hashtable(); - connectLines.clear(); - } - - public Enumeration getLineKeys() - { - return (connectLines.keys()); - } - - public ObjectConnector getLine(Integer key) - { - return (connectLines.get(key)); - } - - public boolean disconnectLines(Integer key) - { - connectLines.remove(key); - Log.v(Main.APP_IDENTIFIER, "DISCONNECT LINES : " + key); - return (true); - } - - public void setSerialNumber(int id) - { - serialNumber = (id == ID_NOTSPECIFY) ? ++serialNumber : id; - } - - public int getSerialNumber() - { - return (serialNumber); - } - - public void removeAllLines() - { - connectLines.clear(); - serialNumber = 1; - } - - public void dumpConnectLine(ObjectConnector conn) - { - if (conn == null) - { - return; - } - Log.v(Main.APP_IDENTIFIER, "LINE " + conn.key + " [" + conn.fromObjectKey + " -> " + conn.toObjectKey + "] "); - } - - /** - * keyToRemove で指定されたobjectの接続をすべて削除する - * - * @param keyToRemove - */ - public void removeAllConnection(Integer keyToRemove) - { - Enumeration keys = connectLines.keys(); - while (keys.hasMoreElements()) - { - Integer key = keys.nextElement(); - ObjectConnector connector = connectLines.get(key); - if ((connector.fromObjectKey == keyToRemove)||(connector.toObjectKey == keyToRemove)) - { - // 削除するキーが見つかった! - connector.key = -1; // 一応...大丈夫だとは思うけど - connectLines.remove(key); - } - } - } - - public ObjectConnector createLine(int id) - { - ObjectConnector connector = new ObjectConnector(); - connector.key = id; - connector.fromObjectKey = 1; - connector.toObjectKey = 1; - connector.lineStyle = LineStyleHolder.LINESTYLE_STRAIGHT_NO_ARROW; - connector.lineShape = LineStyleHolder.LINESHAPE_NORMAL; - connector.lineThickness = LineStyleHolder.LINETHICKNESS_THIN; - -/** - connector.fromShape = 0; - connector.toShape = 0; - connector.fromString = ""; - connector.toString = ""; -**/ - connectLines.put(id, connector); - return (connector); - } - - public ObjectConnector setLines(Integer fromKey, Integer toKey, LineStyleHolder lineHolder) - { - ObjectConnector connector = new ObjectConnector(); - connector.key = serialNumber; - connector.fromObjectKey = fromKey; - connector.toObjectKey = toKey; - connector.lineStyle = lineHolder.getLineStyle(); - connector.lineShape = lineHolder.getLineShape(); - connector.lineThickness = lineHolder.getLineThickness(); -/** - connector.fromShape = 0; - connector.toShape = 0; - connector.fromString = ""; - connector.toString = ""; -**/ - connectLines.put(serialNumber, connector); - serialNumber++; - return (connector); - } + private final IOperationHistoryHolder historyHolder; + public static final int ID_NOTSPECIFY = -1; + private Hashtable connectLines; + private Integer serialNumber = 1; + + public MeMoMaConnectLineHolder(IOperationHistoryHolder historyHolder) + { + this.historyHolder = historyHolder; + connectLines = new Hashtable<>(); + connectLines.clear(); + } + + public Enumeration getLineKeys() + { + return (connectLines.keys()); + } + + public ObjectConnector getLine(Integer key) + { + return (connectLines.get(key)); + } + + public boolean disconnectLines(Integer key) + { + connectLines.remove(key); + Log.v(Main.APP_IDENTIFIER, "DISCONNECT LINES : " + key); + return (true); + } + + public void setSerialNumber(int id) + { + serialNumber = (id == ID_NOTSPECIFY) ? ++serialNumber : id; + } + + public int getSerialNumber() + { + return (serialNumber); + } + + public void removeAllLines() + { + connectLines.clear(); + serialNumber = 1; + } + + public void dumpConnectLine(ObjectConnector conn) + { + if (conn == null) + { + return; + } + Log.v(Main.APP_IDENTIFIER, "LINE " + conn.getKey() + " [" + conn.getFromObjectKey() + " -> " + conn.getToObjectKey() + "] "); + } + + /** + * keyToRemove で指定されたobjectの接続をすべて削除する + * + * @param keyToRemove\ + */ + public void removeAllConnection(Integer keyToRemove) + { + Enumeration keys = connectLines.keys(); + while (keys.hasMoreElements()) + { + Integer key = keys.nextElement(); + ObjectConnector connector = connectLines.get(key); + if ((connector.getFromObjectKey() == keyToRemove)||(connector.getToObjectKey() == keyToRemove)) + { + // 削除するキーが見つかった! + connectLines.remove(key); + } + } + } + + public ObjectConnector createLine(int id) + { + ObjectConnector connector = new ObjectConnector(id, 1, 1, LineStyleHolder.LINESTYLE_STRAIGHT_NO_ARROW, LineStyleHolder.LINESHAPE_NORMAL, LineStyleHolder.LINETHICKNESS_THIN, historyHolder); + connectLines.put(id, connector); + return (connector); + } + + public ObjectConnector setLines(Integer fromKey, Integer toKey, LineStyleHolder lineHolder) + { + ObjectConnector connector = new ObjectConnector(serialNumber, fromKey, toKey, lineHolder.getLineStyle(), lineHolder.getLineShape(), lineHolder.getLineThickness(), historyHolder); + + connectLines.put(serialNumber, connector); + serialNumber++; + return (connector); + } } diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/MeMoMaDataFileHolder.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/MeMoMaDataFileHolder.java index 284a39d..9b7e5a0 100644 --- a/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/MeMoMaDataFileHolder.java +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/MeMoMaDataFileHolder.java @@ -6,7 +6,7 @@ import java.io.FilenameFilter; import android.content.Context; import android.widget.ArrayAdapter; -import jp.sourceforge.gokigen.memoma.fileio.ExternalStorageFileUtility; +import jp.sourceforge.gokigen.memoma.io.ExternalStorageFileUtility; /** * めもまのデータファイル名を保持するクラス (ArrayAdapterを拡張) @@ -16,8 +16,8 @@ import jp.sourceforge.gokigen.memoma.fileio.ExternalStorageFileUtility; */ public class MeMoMaDataFileHolder extends ArrayAdapter implements FilenameFilter { - private ExternalStorageFileUtility fileUtility = null; - private String fileExtension = ""; + private ExternalStorageFileUtility fileUtility; + private String fileExtension; /** * コンストラクタ @@ -49,7 +49,7 @@ public class MeMoMaDataFileHolder extends ArrayAdapter implements Filena try { for (int index = 0; index < dirFileList.length; index++) { String fileName = dirFileList[index].substring(0, dirFileList[index].indexOf(fileExtension)); - if (fileName.contentEquals(currentFileName) == true) // ファイル先頭にない場合は追加する。 + if (fileName.contentEquals(currentFileName)) // ファイル先頭にない場合は追加する。 { // 選択したインデックスを設定する。 outputIndex = index; @@ -75,6 +75,6 @@ public class MeMoMaDataFileHolder extends ArrayAdapter implements Filena */ public boolean accept(File dir, String filename) { - return (filename.endsWith(fileExtension) ? true : false); + return (filename.endsWith(fileExtension)); } } diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/MeMoMaObjectHolder.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/MeMoMaObjectHolder.java index 46c397c..b636a05 100644 --- a/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/MeMoMaObjectHolder.java +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/MeMoMaObjectHolder.java @@ -65,76 +65,29 @@ public class MeMoMaObjectHolder private MeMoMaConnectLineHolder connectLineHolder = null; - /** - * オブジェクトの情報 - * - * @author MRSa - * - */ - public class PositionObject - { - private Integer key; // オブジェクト識別子 (変更不可) - public RectF rect; // オブジェクトの大きさ - public int drawStyle; // オブジェクトの形状 - - public int icon; // オブジェクトのアイコン - public String label; // オブジェクトの表示ラベル - public String detail; // オブジェクトの説明 - //public String backgroundUri; // オブジェクトの背景画像 - //public String otherInfoUri; // 補足(写真とかへのURI) - //public String objectStatus; // オブジェクトの状態 - public boolean userChecked; // ユーザチェックボックス - - public int labelColor; // オブジェクト内に表示する色 - public int objectColor; // オブジェクトの色 - public String paintStyle; // オブジェクトの表示方法 (枠線のみ、塗りつぶし、塗りつぶしと枠線) - public float strokeWidth; // 枠線の太さ - public float fontSize; // フォントサイズ - - /** - * コンストラクタ (キーを設定する) - * @param id - */ - public PositionObject(int id) - { - key = id; - } - - /** - * オブジェクトのキーを取得する - * @return - */ - public Integer getKey() - { - return (key); - } - }; - private Hashtable objectPoints = null; private Integer serialNumber = 1; private String dataTitle = ""; private String background = ""; - private Context parent = null; + private Context parent; + private final IOperationHistoryHolder historyHolder; - public MeMoMaObjectHolder(Context context, MeMoMaConnectLineHolder lineHolder) + public MeMoMaObjectHolder(Context context, MeMoMaConnectLineHolder lineHolder, IOperationHistoryHolder historyHolder) { - objectPoints = new Hashtable(); + objectPoints = new Hashtable<>(); connectLineHolder = lineHolder; parent = context; + this.historyHolder = historyHolder; } /** * データの有無を見る (true の場合、データはない。) * - * @return + * */ public boolean isEmpty() - { - if ((connectLineHolder == null)||(objectPoints == null)) - { - return (true); - } - return (objectPoints.isEmpty()); + { + return (((connectLineHolder == null)||(objectPoints == null))||(objectPoints.isEmpty())); } public MeMoMaConnectLineHolder getConnectLineHolder() @@ -206,15 +159,16 @@ public class MeMoMaObjectHolder { return; } - Log.v(Main.APP_IDENTIFIER, "[" + position.rect.left + "," + position.rect.top + "][" + position.rect.right + "," + position.rect.bottom + "] " + "label : " + position.label + " detail : " + position.detail); + RectF posRect = position.getRect(); + Log.v(Main.APP_IDENTIFIER, "[" + posRect.left + "," + posRect.top + "][" + posRect.right + "," + posRect.bottom + "] " + "label : " + position.getLabel() + " detail : " + position.getDetail()); } /** * オブジェクトを複製する。 * - * @param key - * @return + * + * */ public PositionObject duplicatePosition(int key) { @@ -224,25 +178,20 @@ public class MeMoMaObjectHolder // 元のオブジェクトが見つからなかったので、何もせずに戻る return (null); } - PositionObject position = new PositionObject(serialNumber); - position.rect = new RectF(); - position.rect.left = orgPosition.rect.left + DUPLICATEPOSITION_MARGIN; - position.rect.right = orgPosition.rect.right + DUPLICATEPOSITION_MARGIN; - position.rect.top = orgPosition.rect.top + DUPLICATEPOSITION_MARGIN; - position.rect.bottom = orgPosition.rect.bottom + DUPLICATEPOSITION_MARGIN; - position.drawStyle = orgPosition.drawStyle; - position.icon = orgPosition.icon; - position.label = orgPosition.label; - position.detail = orgPosition.detail; - //position.otherInfoUri = orgPosition.otherInfoUri; - //position.backgroundUri = orgPosition.backgroundUri; - //position.objectStatus = orgPosition.objectStatus; - position.userChecked = orgPosition.userChecked; - position.objectColor = orgPosition.objectColor; - position.labelColor = orgPosition.labelColor; - position.paintStyle = orgPosition.paintStyle; - position.strokeWidth = orgPosition.strokeWidth; - position.fontSize = orgPosition.fontSize; + RectF orgRect = orgPosition.getRect(); + PositionObject position = new PositionObject(serialNumber, + new RectF(orgRect.left + DUPLICATEPOSITION_MARGIN, orgRect.top + DUPLICATEPOSITION_MARGIN, orgRect.right + DUPLICATEPOSITION_MARGIN, orgRect.bottom + DUPLICATEPOSITION_MARGIN), + orgPosition.getDrawStyle(), + orgPosition.getIcon(), + orgPosition.getLabel(), + orgPosition.getDetail(), + orgPosition.getUserChecked(), + orgPosition.getLabelColor(), + orgPosition.getObjectColor(), + orgPosition.getPaintStyle(), + orgPosition.getstrokeWidth(), + orgPosition.getFontSize(), + historyHolder); objectPoints.put(serialNumber, position); serialNumber++; return (position); @@ -250,25 +199,19 @@ public class MeMoMaObjectHolder public PositionObject createPosition(int id) { - PositionObject position = new PositionObject(id); - position.rect = new RectF(); - position.rect.top = 0; - position.rect.bottom = OBJECTSIZE_DEFAULT_Y; - position.rect.left = 0; - position.rect.right = OBJECTSIZE_DEFAULT_X; - position.drawStyle = MeMoMaObjectHolder.DRAWSTYLE_RECTANGLE; - position.icon = 0; - position.label = ""; - position.detail = ""; - //position.otherInfoUri = ""; - //position.backgroundUri = ""; - //position.objectStatus = ""; - position.userChecked = false; - position.objectColor = Color.WHITE; - position.labelColor = Color.WHITE; - position.paintStyle = Paint.Style.STROKE.toString(); - position.strokeWidth = STOROKE_NORMAL_WIDTH; - position.fontSize = FONTSIZE_DEFAULT; + PositionObject position = new PositionObject(id, + new RectF(0, 0, OBJECTSIZE_DEFAULT_X, OBJECTSIZE_DEFAULT_Y), + MeMoMaObjectHolder.DRAWSTYLE_RECTANGLE, + 0, + "", + "", + false, + Color.WHITE, + Color.WHITE, + Paint.Style.STROKE.toString(), + STOROKE_NORMAL_WIDTH, + FONTSIZE_DEFAULT, + historyHolder); objectPoints.put(id, position); return (position); } @@ -276,11 +219,12 @@ public class MeMoMaObjectHolder public PositionObject createPosition(float x, float y, int drawStyle) { PositionObject position = createPosition(serialNumber); - position.rect.left = position.rect.left + x; - position.rect.right = position.rect.right + x; - position.rect.top = position.rect.top + y; - position.rect.bottom = position.rect.bottom + y; - position.drawStyle = drawStyle; + RectF posRect = position.getRect(); + position.setRectLeft(posRect.left + x); + position.setRectRight(posRect.right + x); + position.setRectTop(posRect.top + y); + position.setRectBottom(posRect.bottom + y); + position.setDrawStyle(drawStyle); serialNumber++; return (position); } @@ -297,8 +241,9 @@ public class MeMoMaObjectHolder // 元のオブジェクトが見つからなかったので、何もせずに戻る return; } - float width = position.rect.right - position.rect.left; - float height = position.rect.bottom - position.rect.top; + RectF posRect = position.getRect(); + float width = posRect.right - posRect.left; + float height = posRect.bottom - posRect.top; if (((width + (OBJECTSIZE_STEP_X * 2.0f)) > OBJECTSIZE_MAXIMUM_X)||((height + (OBJECTSIZE_STEP_Y * 2.0f)) > OBJECTSIZE_MAXIMUM_Y)) { // 拡大リミットだった。。。拡大しない @@ -306,16 +251,16 @@ public class MeMoMaObjectHolder Toast.makeText(parent, outputMessage, Toast.LENGTH_SHORT).show(); return; } - position.rect.left = position.rect.left - OBJECTSIZE_STEP_X; - position.rect.right = position.rect.right + OBJECTSIZE_STEP_X; - position.rect.top = position.rect.top - OBJECTSIZE_STEP_Y; - position.rect.bottom = position.rect.bottom + OBJECTSIZE_STEP_Y; + position.setRectLeft(posRect.left - OBJECTSIZE_STEP_X); + position.setRectRight(posRect.right + OBJECTSIZE_STEP_X); + position.setRectTop(posRect.top - OBJECTSIZE_STEP_Y); + position.setRectBottom(posRect.bottom + OBJECTSIZE_STEP_Y); } /** * オブジェクトのサイズを縮小する * - * @param key + * */ public void shrinkObjectSize(Integer key) { @@ -325,8 +270,9 @@ public class MeMoMaObjectHolder // 元のオブジェクトが見つからなかったので、何もせずに戻る return; } - float width = position.rect.right - position.rect.left; - float height = position.rect.bottom - position.rect.top; + RectF posRect = position.getRect(); + float width = posRect.right - posRect.left; + float height = posRect.bottom - posRect.top; if (((width - (OBJECTSIZE_STEP_X * 2.0f)) < OBJECTSIZE_MINIMUM_X)||((height - (OBJECTSIZE_STEP_Y * 2.0f)) < OBJECTSIZE_MINIMUM_Y)) { // 縮小リミットだった。。。縮小しない @@ -334,10 +280,10 @@ public class MeMoMaObjectHolder Toast.makeText(parent, outputMessage, Toast.LENGTH_SHORT).show(); return; } - position.rect.left = position.rect.left + OBJECTSIZE_STEP_X; - position.rect.right = position.rect.right - OBJECTSIZE_STEP_X; - position.rect.top = position.rect.top + OBJECTSIZE_STEP_Y; - position.rect.bottom = position.rect.bottom - OBJECTSIZE_STEP_Y; + position.setRectLeft(posRect.left + OBJECTSIZE_STEP_X); + position.setRectRight(posRect.right - OBJECTSIZE_STEP_X); + position.setRectTop(posRect.top + OBJECTSIZE_STEP_Y); + position.setRectBottom(posRect.bottom - OBJECTSIZE_STEP_Y); } public MeMoMaConnectLineHolder getLineHolder() @@ -418,5 +364,4 @@ public class MeMoMaObjectHolder } return (icon); } - } diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/ObjectConnector.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/ObjectConnector.java new file mode 100644 index 0000000..879a491 --- /dev/null +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/ObjectConnector.java @@ -0,0 +1,92 @@ +package jp.sourceforge.gokigen.memoma.holders; + +import android.support.annotation.NonNull; + +/** + * オブジェクト間を接続するクラス + * + * @author MRSa + * + */ +public class ObjectConnector +{ + private final IOperationHistoryHolder historyHolder; + private final Integer key; + private Integer fromObjectKey; + private Integer toObjectKey; + private Integer lineStyle; + private Integer lineShape; + private Integer lineThickness; + + ObjectConnector(int key, int fromObjectKey, int toObjectkey, int lineStyle, int lineShape, int lineThickness, @NonNull IOperationHistoryHolder historyHolder) + { + this.key = key; + this.fromObjectKey = fromObjectKey; + this.toObjectKey = toObjectkey; + this.lineStyle = lineStyle; + this.lineShape = lineShape; + this.lineThickness = lineThickness; + this.historyHolder = historyHolder; + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.NEW_CONNECT_LINE, this); + } + + public int getKey() + { + return (key); + } + + public int getFromObjectKey() + { + return (fromObjectKey); + } + + public int getToObjectKey() + { + return (toObjectKey); + } + + public int getLineStyle() + { + return (lineStyle); + } + + public int getLineShape() + { + return (lineShape); + } + + public int getLineThickness() + { + return (lineThickness); + } + + public void setFromObjectKey(int value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.CONNECT_LINE_FROM_KEY, fromObjectKey); + fromObjectKey = value; + } + + public void setToObjectKey(int value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.CONNECT_LINE_TO_KEY, toObjectKey); + toObjectKey = value; + } + + public void setLineStyle(int value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.CONNECT_LINE_STYLE, lineStyle); + lineStyle = value; + } + + public void setLineShape(int value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.CONNECT_LINE_SHAPE, lineShape); + lineShape = value; + } + + public void setLineThickness(int value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.CONNECT_LINE_THICKNESS, lineThickness); + lineThickness = value; + } +} diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/OperationHistoryHolder.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/OperationHistoryHolder.java new file mode 100644 index 0000000..3642eef --- /dev/null +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/OperationHistoryHolder.java @@ -0,0 +1,25 @@ +package jp.sourceforge.gokigen.memoma.holders; + +import android.content.Context; +import android.util.Log; + +public class OperationHistoryHolder implements IOperationHistoryHolder +{ + private final String TAG = toString(); + + public OperationHistoryHolder() + { + + } + + public void addHistory(int key, ChangeKind kind, Object object) + { + Log.v(TAG, "addHistory() KEY : " + key + " KIND : " + kind.toString() + " OBJ : " + object.toString()); + } + + public void undo() + { + Log.v(TAG, "undo() "); + + } +} diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/PositionObject.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/PositionObject.java new file mode 100644 index 0000000..23c7e56 --- /dev/null +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/holders/PositionObject.java @@ -0,0 +1,209 @@ +package jp.sourceforge.gokigen.memoma.holders; + +import android.graphics.RectF; +import android.support.annotation.NonNull; + +public class PositionObject +{ + private final Integer key; // オブジェクト識別子 (変更不可) + private final IOperationHistoryHolder historyHolder; // 履歴を保持するところ + + private RectF rect; // オブジェクトの大きさ + private int drawStyle; // オブジェクトの形状 + + private int icon; // オブジェクトのアイコン + private String label; // オブジェクトの表示ラベル + private String detail; // オブジェクトの説明 + //public String backgroundUri; // オブジェクトの背景画像 + //public String otherInfoUri; // 補足(写真とかへのURI) + //public String objectStatus; // オブジェクトの状態 + private boolean userChecked; // ユーザチェックボックス + + private int labelColor; // オブジェクト内に表示する色 + private int objectColor; // オブジェクトの色 + private String paintStyle; // オブジェクトの表示方法 (枠線のみ、塗りつぶし、塗りつぶしと枠線) + private float strokeWidth; // 枠線の太さ + private float fontSize; // フォントサイズ + + /** + * コンストラクタ (キーを設定する) + * + */ + public PositionObject(int id, RectF rect, int drawStyle, int icon, String label, String detail, boolean userChecked, int labelColor, int objectColor, String paintStyle, float strokeWidth, float fontSize, @NonNull IOperationHistoryHolder historyHolder) + { + key = id; + this.rect = rect; + this.drawStyle = drawStyle; + this.icon = icon; + this.label = label; + this.detail = detail; + this.userChecked = userChecked; + this.labelColor = labelColor; + this.objectColor = objectColor; + this.paintStyle = paintStyle; + this.strokeWidth = strokeWidth; + this.fontSize = fontSize; + this.historyHolder = historyHolder; + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.NEW_OBJECT, this); + } + + /** + * オブジェクトのキーを取得する + * + */ + public Integer getKey() + { + return (key); + } + + public void setRect(RectF rectF) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.RECTANGLE, rect); + rect = rectF; + } + + public void setRectTop(float value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.RECTANGLE, rect); + rect.top = value; + } + + public void setRectLeft(float value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.RECTANGLE, rect); + rect.left = value; + } + + public void setRectRight(float value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.RECTANGLE, rect); + rect.right = value; + } + + public void setRectBottom(float value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.RECTANGLE, rect); + rect.bottom = value; + } + + public void setDrawStyle(int value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.DRAW_STYLE, drawStyle); + drawStyle = value; + } + + public void setIcon(int value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.ICON, icon); + icon = value; + } + + public void setLabel(String value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.LABEL, label); + label = value; + } + + public void setDetail(String value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.DETAIL, detail); + detail = value; + } + + public void setUserChecked(boolean value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.USER_CHECKED, userChecked); + userChecked = value; + } + + public void setLabelColor(int value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.LABEL_COLOR, labelColor); + labelColor = value; + } + + public void setObjectColor(int value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.OBJECT_COLOR, objectColor); + objectColor = value; + } + + public void setPaintStyle(String value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.PAINT_STYLE, paintStyle); + paintStyle = value; + } + + public void setStrokeWidth(float value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.STROKE_WIDTH, strokeWidth); + strokeWidth = value; + } + + public void setFontSize(float value) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.FONT_SIZE, fontSize); + fontSize = value; + } + + public void setRectOffsetTo(float newLeft, float newTop) + { + historyHolder.addHistory(key, IOperationHistoryHolder.ChangeKind.RECTANGLE, rect); + rect.offsetTo(newLeft, newTop); + } + + public RectF getRect() + { + return (rect); + } + + public int getDrawStyle() + { + return (drawStyle); + } + + public int getIcon() + { + return (icon); + } + + public String getLabel() + { + return (label); + } + + public String getDetail() + { + return (detail); + } + + public boolean getUserChecked() + { + return (userChecked); + } + + public int getLabelColor() + { + return (labelColor); + } + + public int getObjectColor() + { + return (objectColor); + } + + public String getPaintStyle() + { + return (paintStyle); + } + + public float getstrokeWidth() + { + return (strokeWidth); + } + + public float getFontSize() + { + return (fontSize); + } +} diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/fileio/ExternalStorageFileUtility.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/io/ExternalStorageFileUtility.java similarity index 99% rename from app/src/main/java/jp/sourceforge/gokigen/memoma/fileio/ExternalStorageFileUtility.java rename to app/src/main/java/jp/sourceforge/gokigen/memoma/io/ExternalStorageFileUtility.java index 9c059ee..b6cc081 100644 --- a/app/src/main/java/jp/sourceforge/gokigen/memoma/fileio/ExternalStorageFileUtility.java +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/io/ExternalStorageFileUtility.java @@ -1,4 +1,4 @@ -package jp.sourceforge.gokigen.memoma.fileio; +package jp.sourceforge.gokigen.memoma.io; import android.os.Environment; import android.util.Log; diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/fileio/ImageLoader.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/io/ImageLoader.java similarity index 99% rename from app/src/main/java/jp/sourceforge/gokigen/memoma/fileio/ImageLoader.java rename to app/src/main/java/jp/sourceforge/gokigen/memoma/io/ImageLoader.java index d912216..bc57fcd 100644 --- a/app/src/main/java/jp/sourceforge/gokigen/memoma/fileio/ImageLoader.java +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/io/ImageLoader.java @@ -1,4 +1,4 @@ -package jp.sourceforge.gokigen.memoma.fileio; +package jp.sourceforge.gokigen.memoma.io; import java.io.File; import java.io.InputStream; diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/fileio/MeMoMaDataInOutManager.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/io/MeMoMaDataInOutManager.java similarity index 95% rename from app/src/main/java/jp/sourceforge/gokigen/memoma/fileio/MeMoMaDataInOutManager.java rename to app/src/main/java/jp/sourceforge/gokigen/memoma/io/MeMoMaDataInOutManager.java index 8a10131..0f7bf0d 100644 --- a/app/src/main/java/jp/sourceforge/gokigen/memoma/fileio/MeMoMaDataInOutManager.java +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/io/MeMoMaDataInOutManager.java @@ -1,4 +1,4 @@ -package jp.sourceforge.gokigen.memoma.fileio; +package jp.sourceforge.gokigen.memoma.io; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -15,20 +15,18 @@ import android.preference.PreferenceManager; import android.util.Log; import android.widget.Toast; -import jp.sourceforge.gokigen.memoma.GokigenSurfaceView; +import jp.sourceforge.gokigen.memoma.drawers.GokigenSurfaceView; import jp.sourceforge.gokigen.memoma.Main; -import jp.sourceforge.gokigen.memoma.MeMoMaListener; import jp.sourceforge.gokigen.memoma.R; -import jp.sourceforge.gokigen.memoma.SharedIntentInvoker; import jp.sourceforge.gokigen.memoma.drawers.MeMoMaCanvasDrawer; import jp.sourceforge.gokigen.memoma.holders.MeMoMaDataFileHolder; import jp.sourceforge.gokigen.memoma.holders.MeMoMaObjectHolder; public class MeMoMaDataInOutManager implements MeMoMaFileSavingProcess.ISavingStatusHolder, MeMoMaFileSavingProcess.IResultReceiver, MeMoMaFileLoadingProcess.IResultReceiver, ActionBar.OnNavigationListener, ObjectLayoutCaptureExporter.ICaptureLayoutExporter { - private Activity parent = null; + private Activity parent; private MeMoMaObjectHolder objectHolder = null; - private ExternalStorageFileUtility fileUtility = null; + private ExternalStorageFileUtility fileUtility; private MeMoMaDataFileHolder dataFileHolder = null; private boolean isSaving = false; @@ -292,7 +290,7 @@ public class MeMoMaDataInOutManager implements MeMoMaFileSavingProcess.ISavingSt * ファイルのエクスポート結果を受け取る * */ - public void onCaptureLayoutExportedResult(String exportedFileName, String detail) + public void onCaptureLayoutExportedResult(String exportedFileName, String detail, int id) { Log.v(Main.APP_IDENTIFIER, "MeMoMaDataInOutManager::onCaptureExportedResult() '" + objectHolder.getDataTitle() +"' : " + detail); @@ -315,7 +313,7 @@ public class MeMoMaDataInOutManager implements MeMoMaFileSavingProcess.ISavingSt Uri insertedImage = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); if (insertedImage != null) { - shareContent(insertedImage); + shareContent(insertedImage, id); } } catch (Exception e) @@ -331,7 +329,7 @@ public class MeMoMaDataInOutManager implements MeMoMaFileSavingProcess.ISavingSt * エクスポートしたファイルを共有する * */ - private void shareContent(Uri imageName) + private void shareContent(Uri imageName, int id) { String message = ""; try @@ -350,7 +348,7 @@ public class MeMoMaDataInOutManager implements MeMoMaFileSavingProcess.ISavingSt message = message + "number of objects : " + objectHolder.getCount() + "\n"; // Share Intentを発行する。 - SharedIntentInvoker.shareContent(parent, MeMoMaListener.MENU_ID_SHARE, title, message, imageName, "image/png"); + SharedIntentInvoker.shareContent(parent, id, title, message, imageName, "image/png"); } catch (Exception ex) { diff --git a/app/src/main/java/jp/sourceforge/gokigen/memoma/fileio/MeMoMaFileExportCsvProcess.java b/app/src/main/java/jp/sourceforge/gokigen/memoma/io/MeMoMaFileExportCsvProcess.java similarity index 50% rename from app/src/main/java/jp/sourceforge/gokigen/memoma/fileio/MeMoMaFileExportCsvProcess.java rename to app/src/main/java/jp/sourceforge/gokigen/memoma/io/MeMoMaFileExportCsvProcess.java index 572e38c..8a3d3b0 100644 --- a/app/src/main/java/jp/sourceforge/gokigen/memoma/fileio/MeMoMaFileExportCsvProcess.java +++ b/app/src/main/java/jp/sourceforge/gokigen/memoma/io/MeMoMaFileExportCsvProcess.java @@ -1,119 +1,121 @@ -package jp.sourceforge.gokigen.memoma.fileio; +package jp.sourceforge.gokigen.memoma.io; import java.io.File; import java.io.FileWriter; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Enumeration; +import java.util.Locale; import android.app.ProgressDialog; import android.content.Context; +import android.graphics.RectF; import android.os.AsyncTask; import android.util.Log; import jp.sourceforge.gokigen.memoma.Main; import jp.sourceforge.gokigen.memoma.R; import jp.sourceforge.gokigen.memoma.holders.MeMoMaObjectHolder; +import jp.sourceforge.gokigen.memoma.holders.PositionObject; /** * データをファイルに保存するとき用 アクセスラッパ (非同期処理を実行) - * + * * AsyncTask * MeMoMaObjectHolder : 実行時に渡すクラス(Param) * Integer : 途中経過を伝えるクラス(Progress) * String : 処理結果を伝えるクラス(Result) - * + * * @author MRSa * */ public class MeMoMaFileExportCsvProcess extends AsyncTask -{ - private IResultReceiver receiver = null; - private ExternalStorageFileUtility fileUtility = null; - private String exportedFileName = null; - - ProgressDialog savingDialog = null; - - /** - * コンストラクタ - */ +{ + private IResultReceiver receiver; + private ExternalStorageFileUtility fileUtility; + private String exportedFileName = null; + + private ProgressDialog savingDialog; + + /** + * コンストラクタ + */ public MeMoMaFileExportCsvProcess(Context context, ExternalStorageFileUtility utility, IResultReceiver resultReceiver) { - receiver = resultReceiver; - fileUtility = utility; + receiver = resultReceiver; + fileUtility = utility; // プログレスダイアログ(「保存中...」)を表示する。 - savingDialog = new ProgressDialog(context); - savingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); - savingDialog.setMessage(context.getString(R.string.dataSaving)); - savingDialog.setIndeterminate(true); - savingDialog.setCancelable(false); - savingDialog.show(); - - /** ファイルをバックアップするディレクトリを作成する **/ - File dir = new File(fileUtility.getGokigenDirectory() + "/exported"); - dir.mkdir(); - + savingDialog = new ProgressDialog(context); + savingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); + savingDialog.setMessage(context.getString(R.string.dataSaving)); + savingDialog.setIndeterminate(true); + savingDialog.setCancelable(false); + savingDialog.show(); + + // ファイルをバックアップするディレクトリを作成する + File dir = new File(fileUtility.getGokigenDirectory() + "/exported"); + if (!dir.mkdir()) + { + Log.v(toString(), "mkDir() fail. : " + dir.getAbsolutePath()); + } } - + /** * 非同期処理実施前の前処理 - * + * */ @Override protected void onPreExecute() { } - + /** * データを(CSV形式で)保管する。 - * - * @param fileName - * @param objectHolder - * @return + * */ private String exportToCsvFile(String fileName, MeMoMaObjectHolder objectHolder) { - String resultMessage = ""; + String resultMessage = ""; try { - // エクスポートするファイル名を決定する + // エクスポートするファイル名を決定する Calendar calendar = Calendar.getInstance(); - SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss", Locale.US); exportedFileName = fileName + "_" + outFormat.format(calendar.getTime()) + ".csv"; - FileWriter writer = new FileWriter(new File(exportedFileName)); - - // データのタイトルを出力 - String str = ""; - str = "; label,detail,userChecked,shape,style,centerX,centerY,width,height,;!<_$ (';!<_$' is a record Separator)\r\n"; + FileWriter writer = new FileWriter(new File(exportedFileName)); + + // データのタイトルを出力 + String str = "; label,detail,userChecked,shape,style,centerX,centerY,width,height,;!<_$ (';!<_$' is a record Separator)\r\n"; writer.write(str); - - // オブジェクトの出力 (保持しているものをすべて表示する) - Enumeration keys = objectHolder.getObjectKeys(); + + // オブジェクトの出力 (保持しているものをすべて表示する) + Enumeration keys = objectHolder.getObjectKeys(); while (keys.hasMoreElements()) { Integer key = keys.nextElement(); - MeMoMaObjectHolder.PositionObject pos = objectHolder.getPosition(key); + PositionObject pos = objectHolder.getPosition(key); + RectF posRect = pos.getRect(); // TODO: 絞り込み条件がある場合には、その条件に従ってしぼり込む必要あり。 str = ""; - str = str + "\"" + pos.label + "\""; - str = str + ",\"" + pos.detail + "\""; - if (pos.userChecked == true) + str = str + "\"" + pos.getLabel() + "\""; + str = str + ",\"" + pos.getDetail() + "\""; + if (pos.getUserChecked()) { - str = str + ",True"; + str = str + ",True"; } else { - str = str + ",False"; + str = str + ",False"; } - str = str + "," + pos.drawStyle; // オブジェクトの形状 - str = str + "," + pos.paintStyle; // オブジェクトの塗りつぶし状態 - str = str + "," + (Math.round(pos.rect.centerX() * 100.0f) / 100.0f); - str = str + "," + (Math.round(pos.rect.centerY() * 100.0f) / 100.0f); - str = str + "," + (Math.round(pos.rect.width() * 100.0f) / 100.0f); - str = str + "," + (Math.round(pos.rect.height() * 100.0f) / 100.0f); + str = str + "," + pos.getDrawStyle(); // オブジェクトの形状 + str = str + "," + pos.getPaintStyle(); // オブジェクトの塗りつぶし状態 + str = str + "," + (Math.round(posRect.centerX() * 100.0f) / 100.0f); + str = str + "," + (Math.round(posRect.centerY() * 100.0f) / 100.0f); + str = str + "," + (Math.round(posRect.width() * 100.0f) / 100.0f); + str = str + "," + (Math.round(posRect.height() * 100.0f) / 100.0f); str = str + ",;!<_$\r\n"; writer.write(str); } @@ -122,41 +124,41 @@ public class MeMoMaFileExportCsvProcess extends AsyncTask { - private Context parent = null; - private IResultReceiver receiver = null; - private ExternalStorageFileUtility fileUtility = null; + private Context parent; + private IResultReceiver receiver; + private ExternalStorageFileUtility fileUtility; - private MeMoMaObjectHolder.PositionObject position = null; - private MeMoMaConnectLineHolder.ObjectConnector line = null; + private PositionObject position = null; + private ObjectConnector line = null; private String backgroundUri = ""; private String userCheckboxString = ""; @@ -66,37 +69,37 @@ public class MeMoMaFileLoadingProcess extends AsyncTask position.rect.right)||(position.rect.top > position.rect.bottom)) + RectF posRect = position.getRect(); + if ((posRect.left > posRect.right)||(posRect.top > posRect.bottom)) { - Log.v(Main.APP_IDENTIFIER, "RECT IS ILLEGAL. : [" + position.rect.left + "," + position.rect.top + "-[" + position.rect.right + "," + position.rect.bottom + "]"); - position.rect.right = position.rect.left + MeMoMaObjectHolder.OBJECTSIZE_DEFAULT_X; - position.rect.bottom = position.rect.top + MeMoMaObjectHolder.OBJECTSIZE_DEFAULT_Y; + Log.v(Main.APP_IDENTIFIER, "RECT IS ILLEGAL. : [" + posRect.left + "," + posRect.top + "-[" + posRect.right + "," + posRect.bottom + "]"); + position.setRectRight(posRect.left + MeMoMaObjectHolder.OBJECTSIZE_DEFAULT_X); + position.setRectBottom(posRect.top + MeMoMaObjectHolder.OBJECTSIZE_DEFAULT_Y); } - } +/* else if (name.equalsIgnoreCase("line")) { + // //Log.v(Main.APP_IDENTIFIER, "parseEndTag() : LINE"); //objectHolder.getConnectLineHolder().dumpConnectLine(line); } +*/ } catch (Exception e) { @@ -252,10 +263,7 @@ public class MeMoMaFileLoadingProcess extends AsyncTask { + private static final int OUTPUT_EXPORT_SHARE_ID = 1000; private static final int OUTPUT_MARGIN = 8; private static final int OUTPUT_MARGIN_TOP = 50; @@ -146,22 +149,23 @@ public class ObjectLayoutCaptureExporter extends AsyncTask pos.rect.left) + PositionObject pos = objectHolder.getPosition(key); + RectF posRect = pos.getRect(); + if (canvasSize.left > posRect.left) { - canvasSize.left = (int) pos.rect.left; + canvasSize.left = (int) posRect.left; } - if (canvasSize.right < pos.rect.right) + if (canvasSize.right < posRect.right) { - canvasSize.right = (int) pos.rect.right; + canvasSize.right = (int) posRect.right; } - if (canvasSize.top > pos.rect.top) + if (canvasSize.top > posRect.top) { - canvasSize.top = (int) pos.rect.top; + canvasSize.top = (int) posRect.top; } - if (canvasSize.bottom < pos.rect.bottom) + if (canvasSize.bottom < posRect.bottom) { - canvasSize.bottom = (int) pos.rect.bottom; + canvasSize.bottom = (int) posRect.bottom; } } @@ -258,7 +262,7 @@ public class ObjectLayoutCaptureExporter extends AsyncTask { - ProgressDialog executingDialog = null; - IAlignCallback receiver = null; + private ProgressDialog executingDialog; + private IAlignCallback receiver; /** * コンストラクタ */ @@ -68,11 +70,11 @@ public class ObjectAligner extends AsyncTask> 4 ) & 0x03) * 85; int g = ((value >> 2) & 0x03) * 85; int b = (value & 0x03) * 85; @@ -493,8 +494,7 @@ public class ObjectDataInputDialog implements SeekBar.OnSeekBarChangeListener, C /** * 色をプログレスバーの値に変換する * - * @param color - * @return + * */ private int convertProgress(int color) { @@ -508,21 +508,19 @@ public class ObjectDataInputDialog implements SeekBar.OnSeekBarChangeListener, C /** * 背景色を設定する処理 * - * @param progress - * @param fontSize - * @param value + * */ private void setTextColorSample(int progress, float fontSize, boolean value) { if (colorBorderAreaView != null) { int color = convertColor(progress); - int backColor = (value == true) ? color : backgroundColor; + int backColor = (value) ? color : backgroundColor; colorBorderAreaView.setBackgroundColor(backColor); backgroundShape.setStroke(2, color); - if (value == true) + if (value) { // 塗りつぶし時には色を変える color = (color ^ 0x00ffffff); @@ -572,7 +570,7 @@ public class ObjectDataInputDialog implements SeekBar.OnSeekBarChangeListener, C public interface IResultReceiver { - public abstract void finishObjectInput(); - public abstract void cancelObjectInput(); + void finishObjectInput(); + void cancelObjectInput(); } } diff --git a/app/src/main/res/layout/extensionview.xml b/app/src/main/res/layout/extensionview.xml index 85d5bf2..f4de133 100644 --- a/app/src/main/res/layout/extensionview.xml +++ b/app/src/main/res/layout/extensionview.xml @@ -54,7 +54,7 @@