/** * @file BookmarkPanelLayout.java * * @revision: none * * @version 0.0.01 * @author: Zenki (zhajun), zenki2001cn@163.com * @date: 2011-6-14 下午01:57:49 */ package com.easyview.ebook.reader.ui.view.stylegrid; import java.util.ArrayList; import java.util.List; import com.easyview.ebook.reader.engine.core.IActionCall; import com.easyview.ebook.reader.engine.model.Book; import com.easyview.ebook.reader.engine.model.IBookMarkCursor; import com.easyview.ebook.reader.engine.model.BookMarkInfo.Bookmark; import com.easyview.ebook.reader.engine.util.Logger; import com.easyview.ebook.reader.ui.controller.EasyViewer; import com.easyview.ebook.reader.ui.controller.IControlCenterService; import com.easyview.ebook.reader.ui.controller.IControlCenterService.COMMAND_TYPE; import com.easyview.ebook.reader.ui.view.ActionDialog; import com.easyview.ebook.reader.ui.view.EVBaseRelativeLayout; import com.easyview.ebook.reader.easyviewer.R; import android.app.AlertDialog; import android.content.Context; import android.util.AttributeSet; import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.AdapterView.OnItemClickListener; import android.widget.TextView; public class BookmarkPanelLayout extends EVBaseRelativeLayout { static private final String TAG = "BookmarkPanelLayout"; private ListView mLvBookmark; private Button mBtnAddBookmark; private Button mBtnCleanBookmark; private View mBookmarkOpsLayout; private TextView mTvBookmarkSummary; private Button mBtnGotoBookmark; private Button mBtnDelBookmark; private BookmarkListAdapter mBookmarkAapter; private ActionDialog mBookmarkOpsDlg; private float mCurrentPosX = 0; private float mCurrentPosY = 0; private int mPosOffsetX = 170; private int mPosOffsetY = 160; private Bookmark mBookmarkTodo; public BookmarkPanelLayout(Context context) { super(context); } public BookmarkPanelLayout(Context context, AttributeSet attrs) { super(context, attrs); } public BookmarkPanelLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onFinishInflate() { initView(); initBookmarkList(); super.onFinishInflate(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { mBookmarkOpsLayout = LayoutInflater.from(getContext()).inflate( R.layout.bookmark_operate_dialog, null); mPosOffsetX = (w / 2 + (mBookmarkOpsLayout.getRight() - mBookmarkOpsLayout.getLeft())); mPosOffsetY = (h / 2 - (mBookmarkOpsLayout.getBottom() - mBookmarkOpsLayout .getTop())); super.onSizeChanged(w, h, oldw, oldh); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { mCurrentPosX = ev.getX(); mCurrentPosY = ev.getY(); return super.dispatchTouchEvent(ev); } private void initView() { mLvBookmark = (ListView) findViewById(R.id.id_bookmark_list); mBtnAddBookmark = (Button) findViewById(R.id.id_bookmark_add); mBtnCleanBookmark = (Button) findViewById(R.id.id_bookmark_clean); mLvBookmark.setOnItemClickListener(cListBookmarkListener); mBtnAddBookmark.setOnClickListener(cBtnAddBookmark); mBtnCleanBookmark.setOnClickListener(cBtnCleanBookmark); } private void initBookmarkList() { List<Bookmark> bookmarkList = getEasyViewer().getBook() .getBookMarkCursor().getBookmarkList(); mBookmarkAapter = new BookmarkListAdapter(getContext(), bookmarkList); mLvBookmark.setAdapter(mBookmarkAapter); } private void addBookmark() { ActionDialog dlg = getActionDialog(); dlg.setMessage(getContext().getString(R.string.bookmark_add)); dlg.setDialogType(ActionDialog.TYPE_ALERT_DIALOG); getErengine().getAction().addBookmark(dlg, iaUpdateBookmarkList); } private void gotoBookmark() { IControlCenterService icc = getControlCenter(); if (icc != null) { icc.runCommand(COMMAND_TYPE.CMD_HIDE_CONTROL_CENTER); } EasyViewer ev = getEasyViewer(); if (ev != null) { ev.gotoBookmark(); } } private void delBookmark() { ActionDialog dlg = getActionDialog(); dlg.setMessage(getContext().getString(R.string.bookmark_del)); dlg.setDialogType(ActionDialog.TYPE_ALERT_DIALOG); getErengine().getAction().deleteBookmark(mBookmarkTodo, dlg, iaUpdateBookmarkList); } IActionCall iaUpdateBookmarkList = new IActionCall() { @Override public boolean action() { getActionDialog().closeDialog(); mBookmarkAapter.notifyDataSetChanged(); return true; } }; private void cleanBookmark() { ActionDialog dlg = getActionDialog(); dlg.setMessage(getContext().getString(R.string.bookmark_clean)); dlg.setDialogType(ActionDialog.TYPE_ALERT_DIALOG); getErengine().getAction().delAllBookmark(dlg, iaUpdateBookmarkList); } private void showBookmarkOpsDialog() { mBookmarkOpsLayout = LayoutInflater.from(getContext()).inflate( R.layout.bookmark_operate_dialog, null); mTvBookmarkSummary = (TextView) mBookmarkOpsLayout.findViewById(R.id.id_dlg_bookmark_summary); mBtnGotoBookmark = (Button) mBookmarkOpsLayout.findViewById(R.id.id_dlg_goto_bookmark); mBtnDelBookmark = (Button) mBookmarkOpsLayout.findViewById(R.id.id_dlg_del_bookmark); mTvBookmarkSummary.setText(mBookmarkTodo.getSummary()); mBtnGotoBookmark.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { gotoBookmark(); mBookmarkOpsDlg.closeDialog(); } }); mBtnDelBookmark.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { delBookmark(); mBookmarkOpsDlg.closeDialog(); } }); mBookmarkOpsDlg = new ActionDialog(getContext()); mBookmarkOpsDlg.setDialogType(ActionDialog.TYPE_CUSTOM_DIALOG); mBookmarkOpsDlg.setContentView(mBookmarkOpsLayout); mBookmarkOpsDlg.setCancelable(true); mBookmarkOpsDlg.setCanceledOnTouchOutside(true); // mBookmarkOpsDlg.setPositionX((int) mCurrentPosX - mPosOffsetX); // mBookmarkOpsDlg.setPositionY((int) mCurrentPosY - mPosOffsetY); mBookmarkOpsDlg.showDialog(); } private OnItemClickListener cListBookmarkListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mBookmarkTodo = (Bookmark) mLvBookmark.getItemAtPosition(position); Book book = getEasyViewer().getBook(); book.getBookMarkCursor().setBookmarkTogo(mBookmarkTodo); showBookmarkOpsDialog(); } }; private OnClickListener cBtnAddBookmark = new OnClickListener() { @Override public void onClick(View v) { addBookmark(); } }; private OnClickListener cBtnCleanBookmark = new OnClickListener() { @Override public void onClick(View v) { cleanBookmark(); } }; public class BookmarkListAdapter extends BaseAdapter { private LayoutInflater mFactory; private List<Bookmark> mListItem; private Context mContext; private String PAGE_FORMAT; public BookmarkListAdapter(Context context, List<Bookmark> objects) { mContext = context; mListItem = objects; mFactory = LayoutInflater.from(context); PAGE_FORMAT = mContext .getString(R.string.bookmark_item_page_format); } @Override public int getCount() { return mListItem.size(); } @Override public Bookmark getItem(int position) { return mListItem.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { view = mFactory.inflate(R.layout.bookmark_item, null); } Bookmark item = (Bookmark) getItem(position); TextView tvSummary = (TextView) view .findViewById(R.id.id_item_summary); TextView tvPageNum = (TextView) view .findViewById(R.id.id_item_page_num); tvSummary.setText(item.getSummary()); tvPageNum.setText(String.format(PAGE_FORMAT, item.getPageNum())); return view; } } }