/** @file SymbolPointLibrary.java * * @author marco corvi * @date dec 2012 * * @brief TopoDroid drawing: point 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 android.graphics.Paint; import android.graphics.Path; import android.content.res.Resources; import android.util.Log; class SymbolPointLibrary extends SymbolLibrary { static final String DefaultPoints[] = { "air-draught", "blocks", "clay", "continuation", "debris", "entrance", "sand", "stalactite", "stalagmite", "water-flow" }; // ArrayList< SymbolPoint > mPoint; // enabled points int mPointUserIndex; int mPointLabelIndex; // int mPointDangerIndex; int mPointSectionIndex; SymbolPointLibrary( Resources res ) { super( "p_" ); mPointUserIndex = 0; mPointLabelIndex = -1; // mPointDangerIndex = -1; mPointSectionIndex = -1; loadSystemPoints( res ); loadUserPoints(); makeEnabledList(); } boolean pointHasText( int k ) { return ( k < 0 || k >= mSymbolNr )? false : ((SymbolPoint)mSymbols.get(k)).mHasText; } double getPointOrientation( int k ) { return ( k < 0 || k >= mSymbolNr )? 0.0 : ((SymbolPoint)mSymbols.get(k)).mOrientation; } @Override void resetOrientations() { for ( Symbol sp : mSymbols ) ((SymbolPoint)sp).resetOrientation(); } void rotateGrad( int k, double a ) { if ( k >= 0 && k < mSymbolNr ) ((SymbolPoint)mSymbols.get(k)).rotateGradP( a ); } Path getPointPath( int k ) { { return ( k < 0 || k >= mSymbolNr )? null : ((SymbolPoint)mSymbols.get(k)).getPath( ); } } Path getPointOrigPath( int k ) { return ( k < 0 || k >= mSymbolNr )? null : ((SymbolPoint)mSymbols.get(k)).getOrigPath( ); } int pointCsxLayer( int k ) { return getSymbolCsxLayer( k ); } int pointCsxType( int k ) { return getSymbolCsxType( k ); } int pointCsxCategory( int k ) { return getSymbolCsxCategory( k ); } String pointCsx( int k ) { return ( k < 0 || k >= mSymbolNr )? "" : ((SymbolPoint)mSymbols.get(k)).mCsx; } // ======================================================================== final String p_label = "moveTo 0 3 lineTo 0 -6 lineTo -3 -6 lineTo 3 -6"; // "T" shape final String p_user = "addCircle 0 0 6"; // "o" shape private void loadSystemPoints( Resources res ) { SymbolPoint symbol; // Log.v( TopoDroidApp.TAG, "SymbolPointLibrary::loadSystemPoints()" ); mPointUserIndex = mSymbols.size(); symbol = new SymbolPoint( res.getString(R.string.thp_user), "u:user", "user", 0xffffffff, p_user, false, false ); symbol.mCsxLayer = 6; symbol.mCsxType = 8; symbol.mCsxCategory = 81; addSymbol( symbol ); mPointLabelIndex = mSymbols.size(); symbol = new SymbolPoint( res.getString(R.string.thp_label), "label", "label", 0xffffffff, p_label, true, true ); symbol.mCsxLayer = 6; symbol.mCsxType = 8; symbol.mCsxCategory = 81; addSymbol( symbol ); } void loadUserPoints() { String locale = "name-" + TopoDroidApp.mLocale.toString().substring(0,2); // String iso = "ISO-8859-1"; String iso = "UTF-8"; // if ( locale.equals( "name-de" ) ) iso = "UTF-8"; // if ( locale.equals( "name-es" ) ) iso = "ISO-8859-1"; // Charset.forName("ISO-8859-1") File dir = new File( TDPath.APP_POINT_PATH ); if ( dir.exists() ) { int systemNr = mSymbols.size(); File[] files = dir.listFiles(); for ( File file : files ) { SymbolPoint symbol = new SymbolPoint( file.getPath(), file.getName(), locale, iso ); if ( symbol.mThName == null ) { TDLog.Error( "point with null ThName " + file.getName() ); continue; } if ( ! hasSymbolByFilename( symbol.mThName ) ) { addSymbol( symbol ); String thname = symbol.mThName; String name = "p_" + thname; boolean enable = false; if ( ! TopoDroidApp.mData.hasSymbolName( name ) ) { for ( int k=0; k<DefaultPoints.length; ++k ) { if ( DefaultPoints[k].equals( thname ) ) { enable = true; break; } } TopoDroidApp.mData.setSymbolEnabled( name, enable ); } else { enable = TopoDroidApp.mData.getSymbolEnabled( name ); } symbol.setEnabled( enable ); } } sortSymbolByName( systemNr ); } else { dir.mkdirs( ); } } boolean tryLoadMissingPoint( 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 point " + fname ); File file = new File( TDPath.APP_SAVE_POINT_PATH + fname ); if ( ! file.exists() ) return false; symbol = new SymbolPoint( file.getPath(), file.getName(), locale, iso ); addSymbol( symbol ); } else { // Log.v( TopoDroidApp.TAG, "enabling missing point " + fname ); } if ( symbol == null ) return false; symbol.setEnabled( true ); // TopoDroidApp.mData.isSymbolEnabled( "a_" + symbol.mThName ) ); makeEnabledList(); return true; } // ------------------------------------------------------------------ @Override protected void makeEnabledList() { super.makeEnabledList(); mPointUserIndex = getSymbolIndexByThName( "user" ); mPointLabelIndex = getSymbolIndexByThName( "label" ); // mPointDangerIndex = getSymbolIndexByThName( "danger" ); mPointSectionIndex = getSymbolIndexByThName( "section" ); } void makeEnabledListFromPalette( SymbolsPalette palette ) { makeEnabledListFromStrings( palette.mPalettePoint ); } }