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.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;
import jp.sourceforge.gokigen.memoma.holders.OperationModeHolder;
import jp.sourceforge.gokigen.memoma.operations.IObjectSelectionReceiver;
private TextEditDialog editTextDialog; // テキスト編集用ダイアログ
private MeMoMaCanvasDrawer objectDrawer; // 画像の表示
private MeMoMaObjectHolder objectHolder; // オブジェクトの保持クラス
- private MeMoMaConnectLineHolder lineHolder; // オブジェクト間の接続状態保持クラス
- private OperationHistoryHolder historyHolder; // 操作履歴保持クラス
//private SelectFeatureListener featureListener = null; // 機能選択用のリスナ
private MeMoMaDataInOutManager dataInOutManager;
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;
{
parent = argument;
dataInOutManager = inoutManager;
- historyHolder = new OperationHistoryHolder();
- lineHolder = new MeMoMaConnectLineHolder(historyHolder);
- objectHolder = new MeMoMaObjectHolder(argument, lineHolder, historyHolder);
+ objectHolder = new MeMoMaObjectHolder(argument);
editTextDialog = new TextEditDialog(parent, R.drawable.icon);
- //lineHolder = new MeMoMaConnectLineHolder();
- //featureListener = new SelectFeatureListener(parent);
drawModeHolder = new OperationModeHolder(parent);
lineStyleHolder = new LineStyleHolder(parent);
lineSelectionDialog.setResultReceiver(this);
// アイテム選択ダイアログを生成
- commandHolder = new ObjectOperationCommandHolder(argument);
+ ObjectOperationCommandHolder commandHolder = new ObjectOperationCommandHolder(argument);
itemSelectionDialog = new ItemSelectionDialog(argument);
itemSelectionDialog.prepare(this, commandHolder, parent.getString(R.string.object_operation));
{
int id = v.getId();
// int action = event.getAction();
-
//Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::onTouch() " + id);
if (id == R.id.GraphicView)
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 void onPrepareOptionsMenu(Menu menu)
{
menu.findItem(MENU_ID_NEW).setVisible(true);
- menu.findItem(MENU_ID_UNDO).setVisible(false);
+ menu.findItem(MENU_ID_UNDO).setVisible(objectHolder.isHistoryExist());
menu.findItem(MENU_ID_SHARE).setVisible(true);
menu.findItem(MENU_ID_CAPTURE).setVisible(true);
menu.findItem(MENU_ID_ALIGN).setVisible(true);
*/
private boolean undoOperation()
{
- return (false);
+ // undo処理を実行する
+ boolean ret = objectHolder.undo();
+
+ // 画面を再描画する
+ redrawSurfaceview();
+
+ return (ret);
}
/**
{
dataInOutManager.prepare(objectHolder, bar, memomaInfo);
}
-
//dataInOutManager.loadFile((String) parent.getTitle());
}
// ダイアログの準備を行う
objectDataInputDialog.prepareObjectInputDialog(dialog, selectedObjectKey);
-
}
/**
// 画面の倍率と表示位置を初期状態に戻す
if (objectDrawer != null)
{
- final SeekBar zoomBar = (SeekBar) parent.findViewById(R.id.ZoomInOut);
+ final SeekBar zoomBar = parent.findViewById(R.id.ZoomInOut);
objectDrawer.resetScaleAndLocation(zoomBar);
}
- // 操作履歴をクリアする
- historyHolder.reset();
-
/*
// 題名を "無題"に変更し、関係情報をクリアする
String newName = parent.getString(R.string.no_name);
// ファイル名選択ダイアログを開く
showInfoMessageEditDialog();
-
}
/**
*/
private void redrawSurfaceview()
{
- final GokigenSurfaceView surfaceview = parent.findViewById(R.id.GraphicView);
- surfaceview.doDraw();
+ try
+ {
+ final GokigenSurfaceView surfaceView = parent.findViewById(R.id.GraphicView);
+ surfaceView.doDraw();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
}
/**
// 何もしない
}
-
- /**
- * 現在編集中かどうかを知る
- *
- *
- */
- public boolean isEditing()
- {
- return (isEditing);
- }
-
- /**
- * 現在編集中のフラグを更新する
- *
- *
- */
- public void setIsEditing(boolean value)
- {
- isEditing = value;
- }
-
/**
* アイテムが選択された!
*
// ファイル選択リストの更新
dataInOutManager.updateFileList(message, parent.getSupportActionBar());
-
}
catch (Exception e)
{
}
return (true);
}
+
public boolean cancelTextEditDialog()
{
return (false);
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);
+ // Log.v(Main.APP_IDENTIFIER, "MeMoMaListener::finishSelectLineShape() buttonId:" + buttonId);
}
/**
*
- *
*/
public void cancelSelectLineShape()
{
}
-
}
public static final float FONTSIZE_DEFAULT = 12.0f;
- private MeMoMaConnectLineHolder connectLineHolder = null;
+ private final MeMoMaConnectLineHolder connectLineHolder;
- private Hashtable<Integer, PositionObject> objectPoints = null;
+ private Hashtable<Integer, PositionObject> objectPoints;
private Integer serialNumber = 1;
private String dataTitle = "";
private String background = "";
private Context parent;
private final IOperationHistoryHolder historyHolder;
- public MeMoMaObjectHolder(Context context, MeMoMaConnectLineHolder lineHolder, IOperationHistoryHolder historyHolder)
+ public MeMoMaObjectHolder(Context context)
{
- objectPoints = new Hashtable<>();
- connectLineHolder = lineHolder;
- parent = context;
- this.historyHolder = historyHolder;
+ historyHolder = new OperationHistoryHolder(this);
+ connectLineHolder = new MeMoMaConnectLineHolder(historyHolder);
+ objectPoints = new Hashtable<>();
+ parent = context;
}
/**
*/
public boolean isEmpty()
{
- return (((connectLineHolder == null)||(objectPoints == null))||(objectPoints.isEmpty()));
+ return ((objectPoints == null))||(objectPoints.isEmpty());
}
-
+
+ /**
+ * 履歴の有無があるか (trueの場合、履歴あり)
+ *
+ */
+ public boolean isHistoryExist()
+ {
+ return (historyHolder.isHistoryExist());
+ }
+
+ /**
+ * 「ひとつ戻す」処理
+ *
+ */
+ public boolean undo()
+ {
+ return (historyHolder.undo());
+ }
+
public MeMoMaConnectLineHolder getConnectLineHolder()
{
return (connectLineHolder);
{
objectPoints.clear();
serialNumber = 1;
+
+ // 操作履歴をクリアする
+ historyHolder.reset();
}
public void setSerialNumber(int id)
package jp.sourceforge.gokigen.memoma.holders;
-import android.content.Context;
+import android.graphics.RectF;
+import android.support.annotation.NonNull;
import android.util.Log;
public class OperationHistoryHolder implements IOperationHistoryHolder
{
private final String TAG = toString();
+ private final MeMoMaObjectHolder objectHolder;
- public OperationHistoryHolder()
- {
+ private RectF previousRect = null;
+ private int previousKey = -1;
+ public OperationHistoryHolder(@NonNull MeMoMaObjectHolder objectHolder)
+ {
+ this.objectHolder = objectHolder;
}
+ @Override
public void addHistory(int key, ChangeKind kind, Object object)
{
Log.v(TAG, "addHistory() KEY : " + key + " KIND : " + kind.toString() + " OBJ : " + object.toString());
+
+ try
+ {
+ if (kind == ChangeKind.RECTANGLE)
+ {
+ // オブジェクトが移動したとき、1つだけ記録する
+ previousKey = key;
+ previousRect = (RectF) object;
+ Log.v(TAG, " id : " + previousKey + "(" + previousRect.left + "," + previousRect.top + ")-(" + previousRect.right + "," + previousRect.bottom + ")");
+ }
+ else
+ {
+ previousKey = -1;
+ previousRect = null;
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
}
+ @Override
public void reset()
{
Log.v(TAG, "Histry Reset() ");
-
+ previousKey = -1;
+ previousRect = null;
}
- public void undo()
+ @Override
+ public boolean undo()
{
+ boolean ret = false;
Log.v(TAG, "undo() ");
+ try
+ {
+ PositionObject pos = objectHolder.getPosition(previousKey);
+ if (pos != null)
+ {
+ // 移動したオブジェクトを戻す
+ pos.setRect(previousRect);
+ // undo を実行したら、履歴を消す
+ previousKey = -1;
+ previousRect = null;
+ ret = true;
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ return (ret);
+ }
+
+ @Override
+ public boolean isHistoryExist()
+ {
+ return (previousKey != -1);
}
}