/*
* Copyright (C) 2009-2011 Geometer Plus <contact@geometerplus.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
package org.geometerplus.android.fbreader;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import org.geometerplus.zlibrary.core.resources.ZLResource;
import org.geometerplus.zlibrary.text.view.ZLTextView;
import org.geometerplus.zlibrary.text.view.ZLTextWordCursor;
import org.geometerplus.zlibrary.ui.androidfly.R;
import org.geometerplus.fbreader.fbreader.FBReaderApp;
final class NavigationButtonPanel extends ControlButtonPanel {
private volatile boolean myIsInProgress;
NavigationButtonPanel(FBReaderApp fbReader) {
super(fbReader);
}
public void runNavigation() {
if (!getVisibility()) {
myIsInProgress = false;
initPosition();
show(true);
}
}
@Override
public void onShow() {
if (myControlPanel != null) {
setupNavigation(myControlPanel);
}
}
@Override
public void updateStates() {
super.updateStates();
if (!myIsInProgress && myControlPanel != null) {
setupNavigation(myControlPanel);
}
}
@Override
public void createControlPanel(FBReader activity, RelativeLayout root) {
myControlPanel = new ControlPanel(activity, root, true);
final View layout = activity.getLayoutInflater().inflate(R.layout.navigate, myControlPanel, false);
final SeekBar slider = (SeekBar)layout.findViewById(R.id.book_position_slider);
final TextView text = (TextView)layout.findViewById(R.id.book_position_text);
slider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
private void gotoPage(int page) {
final ZLTextView view = Reader.getTextView();
if (page == 1) {
view.gotoHome();
} else {
view.gotoPage(page);
}
Reader.repaintView();
}
public void onStopTrackingTouch(SeekBar seekBar) {
myIsInProgress = false;
}
public void onStartTrackingTouch(SeekBar seekBar) {
myIsInProgress = true;
}
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
final int page = progress + 1;
final int pagesNumber = seekBar.getMax() + 1;
text.setText(makeProgressText(page, pagesNumber));
gotoPage(page);
}
}
});
final Button btnOk = (Button)layout.findViewById(android.R.id.button1);
final Button btnCancel = (Button)layout.findViewById(android.R.id.button3);
View.OnClickListener listener = new View.OnClickListener() {
public void onClick(View v) {
final ZLTextWordCursor position = StartPosition;
if (v == btnCancel && position != null) {
Reader.getTextView().gotoPosition(position);
} else if (v == btnOk) {
storePosition();
}
StartPosition = null;
hide(true);
}
};
btnOk.setOnClickListener(listener);
btnCancel.setOnClickListener(listener);
final ZLResource buttonResource = ZLResource.resource("dialog").getResource("button");
btnOk.setText(buttonResource.getResource("ok").getValue());
btnCancel.setText(buttonResource.getResource("cancel").getValue());
myControlPanel.addView(layout);
}
private void setupNavigation(ControlPanel panel) {
final SeekBar slider = (SeekBar)panel.findViewById(R.id.book_position_slider);
final TextView text = (TextView)panel.findViewById(R.id.book_position_text);
final ZLTextView textView = Reader.getTextView();
final int page = textView.computeCurrentPage();
final int pagesNumber = textView.computePageNumber();
if (slider.getMax() != pagesNumber - 1 || slider.getProgress() != page - 1) {
slider.setMax(pagesNumber - 1);
slider.setProgress(page - 1);
text.setText(makeProgressText(page, pagesNumber));
}
}
private static String makeProgressText(int page, int pagesNumber) {
return page + " / " + pagesNumber;
}
}