/** @file ItemRecentDialog.java * * @author marco corvi * @date * * @brief TopoDroid drawing * -------------------------------------------------------- * Copyright This sowftare is distributed under GPL-3.0 or later * See the file COPYING. * -------------------------------------------------------- */ package com.topodroid.DistoX; import java.util.ArrayList; import android.os.Bundle; import android.app.Dialog; // import android.app.Activity; import android.content.Context; import android.content.Intent; import android.view.Window; import android.graphics.*; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.AdapterView; // import android.widget.AdapterView.OnItemClickListener; // import android.widget.TextView; import android.widget.ListView; import android.widget.GridView; import android.util.Log; class ItemRecentDialog extends MyDialog implements View.OnClickListener , View.OnLongClickListener // , IItemPicker // , AdapterView.OnItemClickListener { private int mItemType; // items type private int mPointPos; // item point position private int mLinePos; // item line position private int mAreaPos; // item area position private long mPlotType; private Button mBTpoint; private Button mBTline; private Button mBTarea; // private Button mBTok; private SeekBar mSeekBar; // private DrawingWindow mParent; private ItemDrawer mParent; //* private ListView mList = null; private GridView mList = null; private GridView mGrid = null; private ItemAdapter mPointAdapter = null; private ItemAdapter mLineAdapter = null; private ItemAdapter mAreaAdapter = null; private boolean mUseText = false; private ItemAdapter mAdapter = null; // private LinearLayout mRecentLayout; private ItemButton mRecentP[]; private ItemButton mRecentL[]; private ItemButton mRecentA[]; private Button mBTsize; int mScale; int nrRecent; // static int mLinePos; // static int mAreaPos; /** * @param context context * @param parent DrawingWindow parent * @param type drawing type */ ItemRecentDialog( Context context, ItemDrawer parent, long type ) { super( context, R.string.ItemRecentDialog ); mParent = parent; nrRecent = TDSetting.mRecentNr; mPlotType = type; mScale = mParent.getPointScale(); // DrawingPointPath.SCALE_M; } @Override public void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); // requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.item_recent_dialog); getWindow().setLayout( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT ); // mRecentLayout = (LinearLayout) findViewById( R.id.layout_point ); mRecentP = new ItemButton[ nrRecent ]; mRecentL = new ItemButton[ nrRecent ]; mRecentA = new ItemButton[ nrRecent ]; LinearLayout layoutp = (LinearLayout) findViewById( R.id.layout_point ); LinearLayout layoutl = (LinearLayout) findViewById( R.id.layout_line ); LinearLayout layouta = (LinearLayout) findViewById( R.id.layout_area ); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( 0, LinearLayout.LayoutParams.WRAP_CONTENT ); lp.setMargins( 0, 2, 5, 2 ); lp.weight = 16; LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT ); lp2.setMargins( 2, 2, 0, 2 ); lp2.weight = 10; for ( int k=0; k<nrRecent; ++k ) { mRecentP[k] = new ItemButton( mContext ); mRecentL[k] = new ItemButton( mContext ); mRecentA[k] = new ItemButton( mContext ); mRecentP[k].setOnClickListener( this ); mRecentL[k].setOnClickListener( this ); mRecentA[k].setOnClickListener( this ); mRecentP[k].setOnLongClickListener( this ); mRecentL[k].setOnLongClickListener( this ); mRecentA[k].setOnLongClickListener( this ); layoutp.addView( mRecentP[k], lp ); layoutl.addView( mRecentL[k], lp ); layouta.addView( mRecentA[k], lp ); } mBTpoint = new Button( mContext ); mBTpoint.setText(">>"); mBTpoint.setTextSize(14); mBTline = new Button( mContext ); mBTline.setText(">>"); mBTline.setTextSize(14); mBTarea = new Button( mContext ); mBTarea.setText(">>"); mBTarea.setTextSize(14); layoutp.addView( mBTpoint, lp2 ); layoutl.addView( mBTline, lp2 ); layouta.addView( mBTarea, lp2 ); mBTsize = (Button) findViewById(R.id.size ); mSeekBar = (SeekBar) findViewById(R.id.seekbar ); mBTpoint.setOnClickListener( this ); mBTline.setOnClickListener( this ); mBTarea.setOnClickListener( this ); mBTsize.setOnClickListener( this ); mBTsize.setOnLongClickListener( this ); // FIXME how to use the slider ? mSeekBar.setOnSeekBarChangeListener( new OnSeekBarChangeListener() { public void onProgressChanged( SeekBar seekbar, int progress, boolean fromUser) { if ( fromUser ) { setItemAngle( (180 + progress)%360 ); } } public void onStartTrackingTouch(SeekBar seekbar) { } public void onStopTrackingTouch(SeekBar seekbar) { } } ); // requestWindowFeature( Window.FEATURE_NO_TITLE ); // Log.v( TopoDroidApp.TAG, "ItemRecentDialog ... createAdapters" ); updateRecentButtons( ); setSeekBarProgress(); setTheTitle(); } private void setSeekBarProgress() { boolean orientable = false; Symbol symbol = ItemDrawer.mRecentPoint[0]; if ( symbol != null && symbol.isOrientable() ) { mSeekBar.setProgress( (180+symbol.getAngle())%360 ); orientable = true; } // FIXME Most-Recent can orient only points // symbol = ItemDrawer.mRecentArea[0]; // if ( symbol != null && symbol.isOrientable() ) { // mSeekBar.setProgress( (180+symbol.getAngle())%360 ); // orientable = true; // } mSeekBar.setEnabled( orientable ); } private void setItemAngle( int angle ) { Symbol symbol = ItemDrawer.mRecentPoint[0]; if ( symbol != null && symbol.isOrientable() ) { symbol.setAngle( angle ); mRecentP[0].reset( symbol.getPaint(), symbol.getPath(), 1.5f, 1.5f ); mRecentP[0].invalidate(); } // FIXME Most-Recent can orient only points // symbol = ItemDrawer.mRecentArea[0]; } private void setRecentButtons( ItemButton recent[], Symbol symbols[], float sx, float sy ) { for ( int k=0; k<nrRecent; ++k ) { Symbol p = symbols[k]; if ( p == null ) break; recent[k].reset( p.getPaint(), p.getPath(), sx, sy ); recent[k].invalidate(); } } private void updateRecentButtons( ) { // float sx=1.0f, sy=1.0f; setRecentButtons( mRecentP, ItemDrawer.mRecentPoint, 1.5f, 1.5f ); // sx*1.5f, sy*1.5f setRecentButtons( mRecentL, ItemDrawer.mRecentLine, 2.0f, 1.7f ); // sx*2.0f, sy*1.7f setRecentButtons( mRecentA, ItemDrawer.mRecentArea, 2.0f, 1.7f ); // sx*2.0f, sy*1.7f // FIXME Most-Recent can orient only points Symbol p = ItemDrawer.mRecentPoint[0]; mSeekBar.setEnabled( p != null && p.isOrientable() ); } // void rotatePoint( int angle ) // { // if ( mPointAdapter == null ) return; // if ( TDSetting.mLevelOverBasic && mItemType == Symbol.POINT ) { // // Log.v( TopoDroidApp.TAG, "rotate point " + mParent.mCurrentPoint ); // mPointAdapter.rotatePoint( mParent.mCurrentPoint, angle ); // } // } // void setPointOrientation( int angle ) // { // // TODO ??? // } private void setTheTitle() { StringBuilder sb = new StringBuilder(); sb.append( "[" + DrawingPointPath.scaleToStringUC( mScale ) + "] " ); sb.append( (ItemDrawer.mRecentPoint[0] != null)? ItemDrawer.mRecentPoint[0].getName() : "-" ); sb.append( " | " + ((ItemDrawer.mRecentLine[0] != null)? ItemDrawer.mRecentLine[0].getName() : "-") ); sb.append( " | " + ((ItemDrawer.mRecentArea[0] != null)? ItemDrawer.mRecentArea[0].getName() : "-") ); setTitle( sb.toString() ); } private void setFirstPoint( int k ) { // String title = String.format( mContext.getResources().getString( R.string.title_draw_point ), // ((ItemDrawer.mRecentPoint[k] != null)? ItemDrawer.mRecentPoint[k].getName() : "-") ); // setTitle( title ); if ( k <= 0 || k >= nrRecent ) return; ItemDrawer.updateRecentPoint( ItemDrawer.mRecentPoint[k] ); setRecentButtons( mRecentP, ItemDrawer.mRecentPoint, 1.5f, 1.5f ); // sx*1.5f, sy*1.5f Symbol p = ItemDrawer.mRecentPoint[0]; mSeekBar.setEnabled( p != null && p.isOrientable() ); setTheTitle(); } private void setFirstLine( int k ) { // String title = String.format( mContext.getResources().getString( R.string.title_draw_line ), // ((ItemDrawer.mRecentLine[k] != null)? ItemDrawer.mRecentLine[k].getName() : "-") ); // setTitle( title ); if ( k <= 0 || k >= nrRecent ) return; ItemDrawer.updateRecentLine( ItemDrawer.mRecentLine[k] ); setRecentButtons( mRecentL, ItemDrawer.mRecentLine, 2.0f, 1.7f ); setTheTitle(); } private void setFirstArea( int k ) { // String title = String.format( mContext.getResources().getString( R.string.title_draw_area ), // ((ItemDrawer.mRecentArea[k] != null)? ItemDrawer.mRecentArea[k].getName() : "-") ); // setTitle( title ); if ( k <= 0 || k >= nrRecent ) return; ItemDrawer.updateRecentArea( ItemDrawer.mRecentArea[k] ); setRecentButtons( mRecentA, ItemDrawer.mRecentArea, 2.0f, 1.7f ); setTheTitle(); // FIXME Most-Recent can orient only points } private void setPoint( int k ) { int index = BrushManager.mPointLib.getSymbolIndex( ItemDrawer.mRecentPoint[k] ); if ( index >= 0 ) { mParent.mCurrentPoint = index; mParent.pointSelected( index, true ); } } private void setLine( int k ) { int index = BrushManager.mLineLib.getSymbolIndex( ItemDrawer.mRecentLine[k] ); if ( index >= 0 ) { mParent.mCurrentLine = index; mParent.lineSelected( index, true ); } } private void setArea( int k ) { int index = BrushManager.mAreaLib.getSymbolIndex( ItemDrawer.mRecentArea[k] ); if ( index >= 0 ) { mParent.mCurrentArea = index; mParent.areaSelected( index, true ); } } @Override public boolean onLongClick(View view) { Button b = (Button)view; for ( int k=0; k<nrRecent; ++k ) { if ( b == mRecentP[k] ) { setFirstPoint(k); return true; } if ( b == mRecentL[k] ) { setFirstLine(k); return true; } if ( b == mRecentA[k] ) { setFirstArea(k); return true; } } // if ( b == mBTsize ) { // if ( mScale < DrawingPointPath.SCALE_XL ) { // ++ mScale; // mParent.setPointScale( mScale ); // setTheTitle(); // } // return true; // } return false; } @Override public void onClick(View view) { int index = -1; // Log.v("DistoX", "ItemPicker onClick()" ); Button b = (Button)view; if ( b == mBTsize ) { if ( mScale < DrawingPointPath.SCALE_XL ) { ++ mScale; } else { mScale = DrawingPointPath.SCALE_XS; } mParent.setPointScale( mScale ); setTheTitle(); return; } else if ( b == mBTpoint ) { new ItemPickerDialog( mContext, mParent, mPlotType, Symbol.POINT ). show(); } else if ( b == mBTline ) { new ItemPickerDialog( mContext, mParent, mPlotType, Symbol.LINE ). show(); } else if ( b == mBTarea ) { new ItemPickerDialog( mContext, mParent, mPlotType, Symbol.AREA ). show(); } else { for ( int k=0; k<nrRecent; ++k ) { if ( b == mRecentP[k] ) { setPoint(k); break; } if ( b == mRecentL[k] ) { setLine(k); break; } if ( b == mRecentA[k] ) { setArea(k); break; } } } dismiss(); } // implements // public void closeDialog() {} }