/** @file SymbolLineLibrary.java
*
* @author marco corvi
* @date dec 2012
*
* @brief TopoDroid drawing: line symbol library
* --------------------------------------------------------
* Copyright This sowftare is distributed under GPL-3.0 or later
* See the file COPYING.
* --------------------------------------------------------
*/
package com.topodroid.DistoX;
import java.util.Locale;
import java.util.ArrayList;
import java.util.TreeSet;
import java.io.File;
import java.io.PrintWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import android.graphics.Paint;
import android.content.res.Resources;
import android.util.Log;
class SymbolLineLibrary extends SymbolLibrary
{
static final String DefaultLines[] = {
"arrow", "border", "pit", "rock-border", "slope"
};
int mLineUserIndex;
int mLineWallIndex;
int mLineSlopeIndex;
int mLineSectionIndex;
SymbolLineLibrary( Resources res )
{
super( "l_" );
mLineUserIndex = 0;
mLineWallIndex = -1;
mLineSlopeIndex = -1;
mLineSectionIndex = -1;
loadSystemLines( res );
loadUserLines();
makeEnabledList();
}
// int size() { return mLine.size(); }
boolean isStyleStraight( int k ) { return ( k < 0 || k >= mSymbolNr )? true : ((SymbolLine)mSymbols.get(k)).mStyleStraight; }
int getStyleX( int k ) { return ( k < 0 || k >= mSymbolNr )? 1 : ((SymbolLine)mSymbols.get(k)).mStyleX; }
String getLineGroup( int k ) { return ( k < 0 || k >= mSymbolNr )? null : ((SymbolLine)mSymbols.get(k)).mGroup; }
Paint getLinePaint( int k, boolean reversed )
{
if ( k < 0 || k >= mSymbolNr ) return null;
SymbolLine s = (SymbolLine)mSymbols.get(k);
return reversed ? s.mRevPaint : s.mPaint;
}
int lineCsxLayer( int k ) { return getSymbolCsxLayer(k); }
int lineCsxType( int k ) { return getSymbolCsxType(k); }
int lineCsxCategory( int k ) { return getSymbolCsxCategory(k); }
int lineCsxPen( int k ) { return getSymbolCsxPen(k); }
// ========================================================================
private void loadSystemLines( Resources res )
{
if ( mSymbols.size() > 0 ) return;
SymbolLine symbol = new SymbolLine( res.getString( R.string.thl_user ), "u:user", "user", "user", 0xffffffff, 1 );
symbol.mCsxLayer = 0; // base
symbol.mCsxType = 1; // free-hand
symbol.mCsxCategory = 0; // cSurvey line cat: NONE
symbol.mCsxPen = 2; // generic border
addSymbol( symbol );
symbol = new SymbolLine( res.getString( R.string.thl_wall ), "wall", "wall", "wall", 0xffff0000, 2 );
symbol.mCsxLayer = 5; //
symbol.mCsxType = 4; // inverted free-hand
symbol.mCsxCategory = 1; // cSurvey line cat: CAVE_BORDER
symbol.mCsxPen = 1; // cave border
addSymbol( symbol );
mSymbolNr = mSymbols.size();
}
void loadUserLines()
{
String locale = "name-" + TopoDroidApp.mLocale.toString().substring(0,2);
String iso = "ISO-8859-1";
// String iso = "UTF-8";
// if ( locale.equals( "name-es" ) ) iso = "ISO-8859-1";
File dir = new File( TDPath.APP_LINE_PATH );
if ( dir.exists() ) {
int systemNr = mSymbols.size();
File[] files = dir.listFiles();
for ( File file : files ) {
SymbolLine symbol = new SymbolLine( file.getPath(), file.getName(), locale, iso );
if ( symbol.mThName == null ) {
TDLog.Error( "line with null ThName " + file.getName() );
continue;
}
if ( ! hasSymbolByFilename( symbol.mThName ) ) {
addSymbol( symbol );
String thname = symbol.mThName;
String name = mPrefix + thname;
boolean enable = false;
if ( ! TopoDroidApp.mData.hasSymbolName( name ) ) {
for ( int k=0; k<DefaultLines.length; ++k ) {
if ( DefaultLines[k].equals( thname ) ) { enable = true; break; }
}
TopoDroidApp.mData.setSymbolEnabled( name, enable );
} else {
enable = TopoDroidApp.mData.getSymbolEnabled( name );
}
symbol.setEnabled( enable );
}
}
// mSymbolNr = mSymbols.size();
sortSymbolByName( systemNr );
} else {
dir.mkdirs( );
}
}
boolean tryLoadMissingLine( String fname )
{
String locale = "name-" + Locale.getDefault().toString().substring(0,2);
String iso = "ISO-8859-1";
// String iso = "UTF-8";
// if ( locale.equals( "name-es" ) ) iso = "ISO-8859-1";
if ( isSymbolEnabled( fname ) ) return true;
Symbol symbol = getSymbolByFilename( fname );
if ( symbol == null ) {
// Log.v( TopoDroidApp.TAG, "load missing line " + fname );
File file = new File( TDPath.APP_SAVE_LINE_PATH + fname );
if ( ! file.exists() ) return false;
symbol = new SymbolLine( file.getPath(), file.getName(), locale, iso );
addSymbol( symbol );
} else {
// Log.v( TopoDroidApp.TAG, "enabling missing line " + fname );
}
if ( symbol == null ) return false;
symbol.setEnabled( true ); // TopoDroidApp.mData.isSymbolEnabled( "a_" + symbol.mThName ) );
makeEnabledList();
return true;
}
@Override
protected void makeEnabledList()
{
// mLine.clear();
super.makeEnabledList();
mLineUserIndex = getSymbolIndexByThName( "user" );
mLineWallIndex = getSymbolIndexByThName( "wall" );
mLineSlopeIndex = getSymbolIndexByThName( "slope" );
mLineSectionIndex = getSymbolIndexByThName( "section" );
}
void makeEnabledListFromPalette( SymbolsPalette palette )
{
makeEnabledListFromStrings( palette.mPaletteLine );
}
}