/** @file ItemAdapter.java
*
* @author marco corvi
* @date
*
* @brief TopoDroid
* --------------------------------------------------------
* 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.content.Context;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
// import android.widget.TextView;
import android.view.View;
import android.view.ViewGroup;
// import android.view.LayoutInflater;
// import android.widget.RadioGroup;
import android.view.View.OnClickListener;
// import android.widget.LinearLayout;
import android.util.Log;
class ItemAdapter extends ArrayAdapter< ItemSymbol >
implements OnClickListener
{
private ArrayList< ItemSymbol > mItems;
// private Context mContext;
private IItemPicker mParent;
private int mPos;
private int mType;
private boolean mShowSelected;
/** get the item at a certain position in the list of symbols
*/
ItemSymbol get( int k )
{
// Log.v("DistoX", "ItemAdapter get item at " + k + " of " + mItems.size() );
return ( k < mItems.size() ) ? mItems.get(k) : null ;
}
// void doRecent( SymbolInterface symbol )
// {
// }
public ItemAdapter( Context ctx, IItemPicker parent, int type, int id, ArrayList< ItemSymbol > items )
{
super( ctx, id, items );
mParent = parent;
mPos = -1;
mType = type;
mShowSelected = true;
if ( items != null ) {
mItems = items;
for ( ItemSymbol item : items ) {
item.setOnClickListener( this );
}
} else {
mItems = new ArrayList< ItemSymbol >();
}
}
int size() { return mItems.size(); }
// void rotatePoint( int index, int angle )
// {
// for ( ItemSymbol b : mItems ) {
// if ( b.mIndex == index ) {
// b.rotate( angle );
// return;
// }
// }
// }
void setPointOrientation( int index, int angle )
{
for ( ItemSymbol b : mItems ) {
if ( b.mIndex == index ) {
b.setAngle( angle );
return;
}
}
}
void setShowSelected( boolean s )
{
mShowSelected = s;
if ( mPos >= 0 ) {
mItems.get( mPos ).setChecked( mShowSelected );
}
}
// ItemSymbol get( int pos ) { return mItems.get(pos); }
int getSelectedPos() { return mPos; }
// ItemSymbol getSelectedItem() { return ( mPos >= 0 && mPos < mItems.size() )? mItems.get(mPos) : null; }
// public int size() { return mItems.size(); }
// set selected position from the item index
void setSelectedItem( int index )
{
mPos = -1;
for ( int k=0; k<mItems.size(); ++k ) {
ItemSymbol item = mItems.get(k);
if ( index == item.mIndex ) {
mPos = k;
item.setChecked( true );
} else {
item.setChecked( false );
}
}
if ( mPos == -1 ) {
mPos = ( mItems.size() > 1 )? 1 : 0;
mItems.get( mPos ).setChecked( true );
}
}
// set selected position from the item symbol
void setSelectedItem( Symbol symbol )
{
mPos = -1;
for ( int k=0; k<mItems.size(); ++k ) {
ItemSymbol item = mItems.get(k);
if ( symbol == item.mSymbol ) {
mPos = k;
item.setChecked( true );
} else {
item.setChecked( false );
}
}
if ( mPos == -1 ) {
mPos = ( mItems.size() > 1 )? 1 : 0;
mItems.get( mPos ).setChecked( true );
}
}
// public ItemSymbol get( String name )
// {
// for ( ItemSymbol sym : mItems ) {
// if ( sym.mName.equals( name ) ) return sym;
// }
// return null;
// }
public void add( ItemSymbol item )
{
mItems.add( item );
item.setOnClickListener( this );
}
@Override
public View getView( int pos, View convertView, ViewGroup parent )
{
ItemSymbol b = mItems.get( pos );
if ( b == null ) return convertView;
return b.mView;
}
@Override
public void onClick( View v )
{
// Log.v("DistoX", "ItemAdapter onClick()");
doClick( v );
}
private long mClickMillis = 0;
static final int DOUBLE_CLICK_TIME = 400;
public void doClick( View v )
{
// Log.v("DistoX", "--> ItemAdapter doClick()");
long millis = System.currentTimeMillis();
boolean doubleclick = false;
try {
CheckBox cb = (CheckBox)v;
if ( cb != null ) {
int pos = 0;
for ( ItemSymbol item : mItems ) {
if ( cb == item.mCheckBox ) {
if ( mPos == pos && Math.abs(millis - mClickMillis) < DOUBLE_CLICK_TIME ) doubleclick = true;
mPos = pos; // item.mIndex;
mParent.setTypeAndItem( mType, mPos );
item.setChecked( true );
} else {
item.setChecked( false );
}
++ pos;
}
}
} catch ( ClassCastException e ) {
int pos = 0;
ItemButton ib = (ItemButton)v;
for ( ItemSymbol item : mItems ) {
if ( ib == item.mButton ) {
if ( mPos == pos && Math.abs(millis - mClickMillis) < DOUBLE_CLICK_TIME ) doubleclick = true;
mPos = pos; // item.mIndex;
mParent.setTypeAndItem( mType, mPos );
item.setChecked( true );
} else {
item.setChecked( false );
}
++ pos;
}
}
if ( doubleclick ) mParent.closeDialog();
mClickMillis = millis;
}
}