1 package org.coolreader.crengine;
2 
3 import java.util.ArrayList;
4 
5 import org.coolreader.CoolReader;
6 import org.coolreader.Dictionaries;
7 import org.coolreader.R;
8 
9 import android.content.Context;
10 import android.database.DataSetObserver;
11 import android.os.Bundle;
12 import android.util.Log;
13 import android.view.LayoutInflater;
14 import android.view.View;
15 import android.view.ViewGroup;
16 import android.widget.BaseAdapter;
17 import android.widget.ListView;
18 import android.widget.TextView;
19 
20 public class DictsDlg extends BaseDialog {
21 	private CoolReader mCoolReader;
22 	private ReaderView mReaderView;
23 	private LayoutInflater mInflater;
24 	private DictList mList;
25 	private String mSearchText;
26 
27 	//DictsDlg mThis;
28 
29 	public final static int ITEM_POSITION=0;
30 
31 	class DictListAdapter extends BaseAdapter {
areAllItemsEnabled()32 		public boolean areAllItemsEnabled() {
33 			return true;
34 		}
35 
isEnabled(int arg0)36 		public boolean isEnabled(int arg0) {
37 			return true;
38 		}
39 
getCount()40 		public int getCount() {
41 			return Dictionaries.getDictListExt(mCoolReader,true).size();
42 		}
43 
getItem(int position)44 		public Object getItem(int position) {
45 			if ( position<0 || position>=Dictionaries.getDictListExt(mCoolReader,true).size() )
46 				return null;
47 			return Dictionaries.getDictListExt(mCoolReader,true).get(position);
48 		}
49 
getItemId(int position)50 		public long getItemId(int position) {
51 			return position;
52 		}
53 
54 
55 
getItemViewType(int position)56 		public int getItemViewType(int position) {
57 			return ITEM_POSITION;
58 		}
59 
getViewTypeCount()60 		public int getViewTypeCount() {
61 			return 4;
62 		}
63 
getView(int position, View convertView, ViewGroup parent)64 		public View getView(int position, View convertView, ViewGroup parent) {
65 			View view;
66 			int res = R.layout.dict_item;
67 			view = mInflater.inflate(res, null);
68 			TextView labelView = view.findViewById(R.id.dict_item_shortcut);
69 			TextView titleTextView = view.findViewById(R.id.dict_item_title);
70 		 	Dictionaries.DictInfo b = (Dictionaries.DictInfo)getItem(position);
71 			if ( labelView!=null ) {
72 				labelView.setText(String.valueOf(position+1));
73 			}
74 			if ( b!=null ) {
75 				if ( titleTextView!=null )
76 					titleTextView.setText(b.name);
77 			} else {
78 				if ( titleTextView!=null )
79 					titleTextView.setText("");
80 			}
81 			return view;
82 		}
83 
hasStableIds()84 		public boolean hasStableIds() {
85 			return true;
86 		}
87 
isEmpty()88 		public boolean isEmpty() {
89 			return Dictionaries.getDictList().length==0;
90 		}
91 
92 		private ArrayList<DataSetObserver> observers = new ArrayList<>();
93 
registerDataSetObserver(DataSetObserver observer)94 		public void registerDataSetObserver(DataSetObserver observer) {
95 			observers.add(observer);
96 		}
97 
unregisterDataSetObserver(DataSetObserver observer)98 		public void unregisterDataSetObserver(DataSetObserver observer) {
99 			observers.remove(observer);
100 		}
101 	}
102 
103 	class DictList extends BaseListView {
104 
DictList(Context context)105 		public DictList(Context context) {
106 			super(context, true);
107 			setChoiceMode(ListView.CHOICE_MODE_SINGLE);
108 			setLongClickable(true);
109 			setAdapter(new DictListAdapter());
110 			setOnItemLongClickListener((arg0, arg1, position, arg3) -> {
111 				openContextMenu(DictList.this);
112 				return true;
113 			});
114 		}
115 
116 		@Override
performItemClick(View view, int position, long id)117 		public boolean performItemClick(View view, int position, long id) {
118 			//Dict b = mBookInfo.findShortcutDict(position+1);
119 			//if ( b==null ) {
120 			//	mThis.dismiss();
121 			//	return true;
122 			//selectedItem = position;
123 			mCoolReader.mDictionaries.setAdHocDict(Dictionaries.getDictListExt(mCoolReader,true).get(position));
124 			mCoolReader.findInDictionary(mSearchText);
125 			if (!mReaderView.getSettings().getBool(mReaderView.PROP_APP_SELECTION_PERSIST, false))
126 				mReaderView.clearSelection();
127 			dismiss();
128 			return true;
129 		}
130 
131 
132 	}
133 
DictsDlg( CoolReader activity, ReaderView readerView, String search_text )134 	public DictsDlg( CoolReader activity, ReaderView readerView, String search_text )
135 	{
136 		super(activity, activity.getResources().getString(R.string.win_title_dicts), false, true);
137 		//mThis = this; // for inner classes
138 		mInflater = LayoutInflater.from(getContext());
139 		mSearchText = search_text;
140 		mCoolReader = activity;
141 		mReaderView = readerView;
142 		//setPositiveButtonImage(R.drawable.cr3_button_add, R.string.mi_Dict_add);
143 		View frame = mInflater.inflate(R.layout.dict_list_dialog, null);
144 		ViewGroup body = frame.findViewById(R.id.dict_list);
145 		mList = new DictList(activity);
146 		body.addView(mList);
147 		setView(frame);
148 		setFlingHandlers(mList, null, null);
149 	}
150 
151 	@Override
onPositiveButtonClick()152 	protected void onPositiveButtonClick() {
153 		// add Dict
154 		DictsDlg.this.dismiss();
155 	}
156 
157 	@Override
onNegativeButtonClick()158 	protected void onNegativeButtonClick() {
159 		DictsDlg.this.dismiss();
160 	}
161 
162 	@Override
onCreate(Bundle savedInstanceState)163 	protected void onCreate(Bundle savedInstanceState) {
164 		Log.v("cr3", "creating DictsDlg");
165 		//setTitle(mCoolReader.getResources().getString(R.string.win_title_Dicts));
166 		setCancelable(true);
167 		super.onCreate(savedInstanceState);
168 		registerForContextMenu(mList);
169 	}
170 
171 }
172