1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-04 18:29:23 +02:00

ZLEnumOption has been introduced; tap & flick scrolling option has been added

This commit is contained in:
Nikolay Pultsin 2011-01-01 20:18:08 +00:00
parent b46a440cbd
commit 8c78a6774a
16 changed files with 168 additions and 34 deletions

View file

@ -449,9 +449,10 @@
</node> </node>
<node name="scrolling" value="Posouvání"> <node name="scrolling" value="Posouvání">
<node name="summary" value="Jak posouvat text"/> <node name="summary" value="Jak posouvat text"/>
<node name="flick" value="Posouvání tahem"> <node name="fingerScrolling" value="Touch screen scrolling" toBeTranslated="true">
<node name="summaryOn" value="Posouvat stránky tahem prstem"/> <node name="byTap" value="Scroll pages by finger tap" toBeTranslated="true"/>
<node name="summaryOff" value="Posouvat stránky klepnutím prstem"/> <node name="byFlick" value="Scroll pages by finger flick" toBeTranslated="true"/>
<node name="byTapAndFlick" value="Scroll pages by finger tap or flick" toBeTranslated="true"/>
</node> </node>
<node name="volumeKeys" value="Posouvání tlačítky ovládání hlasitosti"> <node name="volumeKeys" value="Posouvání tlačítky ovládání hlasitosti">
<node name="summaryOn" value="Použít tlačítka ovládání hlasitosti pro posun"/> <node name="summaryOn" value="Použít tlačítka ovládání hlasitosti pro posun"/>

View file

@ -450,9 +450,10 @@
</node> </node>
<node name="scrolling" value="Blättern"> <node name="scrolling" value="Blättern">
<node name="summary" value="Die Art des Umblätterns festlegen."/> <node name="summary" value="Die Art des Umblätterns festlegen."/>
<node name="flick" value="Wischen"> <node name="fingerScrolling" value="Touch screen scrolling" toBeTranslated="true">
<node name="summaryOn" value="Die Seiten werden mit einem Fingerwisch umgeblättert."/> <node name="byTap" value="Scroll pages by finger tap" toBeTranslated="true"/>
<node name="summaryOff" value="Die Seiten werden durch antippen umgeblättert."/> <node name="byFlick" value="Scroll pages by finger flick" toBeTranslated="true"/>
<node name="byTapAndFlick" value="Scroll pages by finger tap or flick" toBeTranslated="true"/>
</node> </node>
<node name="volumeKeys" value="Umblättern mit den Lautstärketasten"> <node name="volumeKeys" value="Umblättern mit den Lautstärketasten">
<node name="summaryOn" value="Lautstärketasten zum Umblättern verwenden."/> <node name="summaryOn" value="Lautstärketasten zum Umblättern verwenden."/>

View file

@ -448,9 +448,10 @@
</node> </node>
<node name="scrolling" value="Scrolling"> <node name="scrolling" value="Scrolling">
<node name="summary" value="How to scroll text"/> <node name="summary" value="How to scroll text"/>
<node name="flick" value="Flick scrolling"> <node name="fingerScrolling" value="Touch screen scrolling">
<node name="summaryOn" value="Pages will be scrolled by finger flick"/> <node name="byTap" value="Scroll pages by finger tap"/>
<node name="summaryOff" value="Pages will be scrolled by finger tap"/> <node name="byFlick" value="Scroll pages by finger flick"/>
<node name="byTapAndFlick" value="Scroll pages by finger tap or flick"/>
</node> </node>
<node name="volumeKeys" value="Volume keys scrolling"> <node name="volumeKeys" value="Volume keys scrolling">
<node name="summaryOn" value="Use volume keys to scroll"/> <node name="summaryOn" value="Use volume keys to scroll"/>

View file

@ -458,9 +458,10 @@
</node> </node>
<node name="scrolling" value="Navigation"> <node name="scrolling" value="Navigation">
<node name="summary" value="Modalités de défilement du texte"/> <node name="summary" value="Modalités de défilement du texte"/>
<node name="flick" value="Défiler par accoup (Flick)"> <node name="fingerScrolling" value="Touch screen scrolling" toBeTranslated="true">
<node name="summaryOn" value="Faire glisser le doigt pour changer de page"/> <node name="byTap" value="Scroll pages by finger tap" toBeTranslated="true"/>
<node name="summaryOff" value="Une pression du doigt change de page"/> <node name="byFlick" value="Scroll pages by finger flick" toBeTranslated="true"/>
<node name="byTapAndFlick" value="Scroll pages by finger tap or flick" toBeTranslated="true"/>
</node> </node>
<node name="volumeKeys" value="Touches du volume"> <node name="volumeKeys" value="Touches du volume">
<node name="summaryOn" value="Les touches du volume permettent de changer de page"/> <node name="summaryOn" value="Les touches du volume permettent de changer de page"/>

View file

@ -449,9 +449,10 @@
</node> </node>
<node name="scrolling" value="Lapozás"> <node name="scrolling" value="Lapozás">
<node name="summary" value="Szöveg görgetésének beállításai"/> <node name="summary" value="Szöveg görgetésének beállításai"/>
<node name="flick" value="Kinetikus lapozás"> <node name="fingerScrolling" value="Touch screen scrolling" toBeTranslated="true">
<node name="summaryOn" value="Lapozás ujjmozdulatra"/> <node name="byTap" value="Scroll pages by finger tap" toBeTranslated="true"/>
<node name="summaryOff" value="Lapozás érintésre"/> <node name="byFlick" value="Scroll pages by finger flick" toBeTranslated="true"/>
<node name="byTapAndFlick" value="Scroll pages by finger tap or flick" toBeTranslated="true"/>
</node> </node>
<node name="volumeKeys" value="Lapozás a hangerő gombokkal"> <node name="volumeKeys" value="Lapozás a hangerő gombokkal">
<node name="summaryOn" value="Hangerő gombok használata lapozáshoz"/> <node name="summaryOn" value="Hangerő gombok használata lapozáshoz"/>

View file

@ -449,9 +449,10 @@
</node> </node>
<node name="scrolling" value="Scorrimento"> <node name="scrolling" value="Scorrimento">
<node name="summary" value="How to scroll text" toBeTranslated="true"/> <node name="summary" value="How to scroll text" toBeTranslated="true"/>
<node name="flick" value="Scorrimento al tocco"> <node name="fingerScrolling" value="Touch screen scrolling" toBeTranslated="true">
<node name="summaryOn" value="La navigazione tra le pagine avviene con lo sfioramento delle dita sullo schermo"/> <node name="byTap" value="Scroll pages by finger tap" toBeTranslated="true"/>
<node name="summaryOff" value="La navigazione tra le pagine avviene toccando lo schermo"/> <node name="byFlick" value="Scroll pages by finger flick" toBeTranslated="true"/>
<node name="byTapAndFlick" value="Scroll pages by finger tap or flick" toBeTranslated="true"/>
</node> </node>
<node name="volumeKeys" value="Tasti del volume per lo scorrimento"> <node name="volumeKeys" value="Tasti del volume per lo scorrimento">
<node name="summaryOn" value="Usa i tasti del volume per scorrere"/> <node name="summaryOn" value="Usa i tasti del volume per scorrere"/>

View file

@ -448,9 +448,10 @@
</node> </node>
<node name="scrolling" value="Перелистывание страниц"> <node name="scrolling" value="Перелистывание страниц">
<node name="summary" value="Как листать стрницы"/> <node name="summary" value="Как листать стрницы"/>
<node name="flick" value="Листать движением пальца"> <node name="fingerScrolling" value="Листание пальцем по экрану">
<node name="summaryOn" value="Для перехода на следующую страницу проведите пальцем по экрану"/> <node name="byTap" value="Листать нажатием на экран"/>
<node name="summaryOff" value="Для перехода на следующую страницу коснитесь пальцем экрана"/> <node name="byFlick" value="Листать протягиванием страницы"/>
<node name="byTapAndFlick" value="Листать нажатием на экран либо протягиванием страницы"/>
</node> </node>
<node name="volumeKeys" value="Использовать кнопки регулировки звука"> <node name="volumeKeys" value="Использовать кнопки регулировки звука">
<node name="summaryOn" value="Кнопки увеличения/уменьшения звука перелистывают страницы"/> <node name="summaryOn" value="Кнопки увеличения/уменьшения звука перелистывают страницы"/>

View file

@ -449,9 +449,10 @@
</node> </node>
<node name="scrolling" value="Перегортання сторінок"> <node name="scrolling" value="Перегортання сторінок">
<node name="summary" value="How to scroll text" toBeTranslated="true"/> <node name="summary" value="How to scroll text" toBeTranslated="true"/>
<node name="flick" value="Гортати рухом пальця"> <node name="fingerScrolling" value="Touch screen scrolling" toBeTranslated="true">
<node name="summaryOn" value="Для переходу на наступну сторінку проведіть пальцем по екрану"/> <node name="byTap" value="Scroll pages by finger tap" toBeTranslated="true"/>
<node name="summaryOff" value="Для переходу на наступну сторінку торкніться пальцем до екрану"/> <node name="byFlick" value="Scroll pages by finger flick" toBeTranslated="true"/>
<node name="byTapAndFlick" value="Scroll pages by finger tap or flick" toBeTranslated="true"/>
</node> </node>
<node name="volumeKeys" value="Використання кнопки налаштування звуку"> <node name="volumeKeys" value="Використання кнопки налаштування звуку">
<node name="summaryOn" value="Кнопки збільшення/зменшення звуку перегортають сторінки"/> <node name="summaryOn" value="Кнопки збільшення/зменшення звуку перегортають сторінки"/>

View file

@ -449,9 +449,10 @@
</node> </node>
<node name="scrolling" value="Cuộn"> <node name="scrolling" value="Cuộn">
<node name="summary" value="How to scroll text" toBeTranslated="true"/> <node name="summary" value="How to scroll text" toBeTranslated="true"/>
<node name="flick" value="Cuộn búng"> <node name="fingerScrolling" value="Touch screen scrolling" toBeTranslated="true">
<node name="summaryOn" value="Trang sẽ cuộn khi búng nhẹ"/> <node name="byTap" value="Scroll pages by finger tap" toBeTranslated="true"/>
<node name="summaryOff" value="Trang sẽ cuộn khi gõ nhẹ ngón tay"/> <node name="byFlick" value="Scroll pages by finger flick" toBeTranslated="true"/>
<node name="byTapAndFlick" value="Scroll pages by finger tap or flick" toBeTranslated="true"/>
</node> </node>
<node name="volumeKeys" value="Cuộn bằng phím âm lượng"> <node name="volumeKeys" value="Cuộn bằng phím âm lượng">
<node name="summaryOn" value="Dùng phím âm lượng để cuộn"/> <node name="summaryOn" value="Dùng phím âm lượng để cuộn"/>

View file

@ -455,9 +455,10 @@
</node> </node>
<node name="scrolling" value="翻阅操作"> <node name="scrolling" value="翻阅操作">
<node name="summary" value="如何滚动文字内容"/> <node name="summary" value="如何滚动文字内容"/>
<node name="flick" value="手指滚动"> <node name="fingerScrolling" value="Touch screen scrolling" toBeTranslated="true">
<node name="summaryOn" value="滑触翻页" /> <node name="byTap" value="Scroll pages by finger tap" toBeTranslated="true"/>
<node name="summaryOff" value="拍击翻页" /> <node name="byFlick" value="Scroll pages by finger flick" toBeTranslated="true"/>
<node name="byTapAndFlick" value="Scroll pages by finger tap or flick" toBeTranslated="true"/>
</node> </node>
<node name="volumeKeys" value="音量键滚动"> <node name="volumeKeys" value="音量键滚动">
<node name="summaryOn" value="使用音量键翻页" /> <node name="summaryOn" value="使用音量键翻页" />

View file

@ -334,7 +334,7 @@ public class PreferenceActivity extends ZLPreferenceActivity {
final Screen scrollingScreen = createPreferenceScreen("scrolling"); final Screen scrollingScreen = createPreferenceScreen("scrolling");
final ScrollingPreferences scrollingPreferences = ScrollingPreferences.Instance(); final ScrollingPreferences scrollingPreferences = ScrollingPreferences.Instance();
scrollingScreen.addOption(scrollingPreferences.FlickOption, "flick"); scrollingScreen.addOption(scrollingPreferences.FingerScrollingOption, "fingerScrolling");
scrollingScreen.addOption(scrollingPreferences.VolumeKeysOption, "volumeKeys"); scrollingScreen.addOption(scrollingPreferences.VolumeKeysOption, "volumeKeys");
scrollingScreen.addOption(scrollingPreferences.InvertVolumeKeysOption, "invertVolumeKeys"); scrollingScreen.addOption(scrollingPreferences.InvertVolumeKeysOption, "invertVolumeKeys");
scrollingScreen.addOption(scrollingPreferences.AnimateOption, "animated"); scrollingScreen.addOption(scrollingPreferences.AnimateOption, "animated");

View file

@ -0,0 +1,47 @@
/*
* Copyright (C) 2009-2010 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.preferences;
import android.content.Context;
import org.geometerplus.zlibrary.core.options.ZLEnumOption;
import org.geometerplus.zlibrary.core.resources.ZLResource;
class ZLEnumPreference<T extends Enum<T>> extends ZLStringListPreference {
private final ZLEnumOption<T> myOption;
ZLEnumPreference(Context context, ZLResource resource, String resourceKey, ZLEnumOption<T> option) {
super(context, resource, resourceKey);
myOption = option;
final T initialValue = option.getValue();
final Enum[] allValues = initialValue.getClass().getEnumConstants();
final String[] stringValues = new String[allValues.length];
for (int i = 0; i < stringValues.length; ++i) {
stringValues[i] = allValues[i].toString();
}
setList(stringValues);
setInitialValue(initialValue.toString());
}
public void onAccept() {
myOption.setValue((T)Enum.valueOf(myOption.getValue().getClass(), getValue()));
}
}

View file

@ -66,6 +66,14 @@ abstract class ZLPreferenceActivity extends android.preference.PreferenceActivit
return preference; return preference;
} }
public <T extends Enum<T>> ZLPreference addOption(ZLEnumOption<T> option, String resourceKey) {
ZLEnumPreference<T> preference =
new ZLEnumPreference<T>(ZLPreferenceActivity.this, Resource, resourceKey, option);
myScreen.addPreference(preference);
myPreferences.add(preference);
return preference;
}
public void close() { public void close() {
myScreen.getDialog().dismiss(); myScreen.getDialog().dismiss();
ZLPreferenceActivity.this.getListView().invalidateViews(); ZLPreferenceActivity.this.getListView().invalidateViews();

View file

@ -102,7 +102,10 @@ public final class FBView extends ZLTextView {
} }
final ScrollingPreferences preferences = ScrollingPreferences.Instance(); final ScrollingPreferences preferences = ScrollingPreferences.Instance();
if (!preferences.FlickOption.getValue()) { final ScrollingPreferences.FingerScrolling fingerScrolling =
preferences.FingerScrollingOption.getValue();
if (fingerScrolling == ScrollingPreferences.FingerScrolling.byTap ||
fingerScrolling == ScrollingPreferences.FingerScrolling.byTapAndFlick) {
if (preferences.HorizontalOption.getValue()) { if (preferences.HorizontalOption.getValue()) {
if (x <= myContext.getWidth() / 3) { if (x <= myContext.getWidth() / 3) {
doScrollPage(false); doScrollPage(false);
@ -154,7 +157,10 @@ public final class FBView extends ZLTextView {
} }
final ScrollingPreferences preferences = ScrollingPreferences.Instance(); final ScrollingPreferences preferences = ScrollingPreferences.Instance();
if (preferences.FlickOption.getValue()) { final ScrollingPreferences.FingerScrolling fingerScrolling =
preferences.FingerScrollingOption.getValue();
if (fingerScrolling == ScrollingPreferences.FingerScrolling.byFlick ||
fingerScrolling == ScrollingPreferences.FingerScrolling.byTapAndFlick) {
myStartX = x; myStartX = x;
myStartY = y; myStartY = y;
setScrollingActive(true); setScrollingActive(true);

View file

@ -20,6 +20,7 @@
package org.geometerplus.fbreader.fbreader; package org.geometerplus.fbreader.fbreader;
import org.geometerplus.zlibrary.core.options.ZLBooleanOption; import org.geometerplus.zlibrary.core.options.ZLBooleanOption;
import org.geometerplus.zlibrary.core.options.ZLEnumOption;
public class ScrollingPreferences { public class ScrollingPreferences {
private static ScrollingPreferences ourInstance; private static ScrollingPreferences ourInstance;
@ -28,7 +29,14 @@ public class ScrollingPreferences {
return (ourInstance != null) ? ourInstance : new ScrollingPreferences(); return (ourInstance != null) ? ourInstance : new ScrollingPreferences();
} }
public final ZLBooleanOption FlickOption = new ZLBooleanOption("Scrolling", "Flick", true); public enum FingerScrolling {
byTap,
byFlick,
byTapAndFlick
}
public final ZLEnumOption<FingerScrolling> FingerScrollingOption =
new ZLEnumOption<FingerScrolling>("Scrolling", "Finger", FingerScrolling.byTapAndFlick);
public final ZLBooleanOption VolumeKeysOption = new ZLBooleanOption("Scrolling", "VolumeKeys", true); public final ZLBooleanOption VolumeKeysOption = new ZLBooleanOption("Scrolling", "VolumeKeys", true);
public final ZLBooleanOption AnimateOption = new ZLBooleanOption("Scrolling", "ShowAnimated", true); public final ZLBooleanOption AnimateOption = new ZLBooleanOption("Scrolling", "ShowAnimated", true);
public final ZLBooleanOption HorizontalOption = new ZLBooleanOption("Scrolling", "Horizontal", true); public final ZLBooleanOption HorizontalOption = new ZLBooleanOption("Scrolling", "Horizontal", true);

View file

@ -0,0 +1,55 @@
/*
* Copyright (C) 2007-2010 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.zlibrary.core.options;
public final class ZLEnumOption<T extends Enum<T>> extends ZLOption {
private final T myDefaultValue;
private T myValue;
public ZLEnumOption(String group, String optionName, T defaultValue) {
super(group, optionName);
myDefaultValue = defaultValue;
myValue = defaultValue;
}
public T getValue() {
if (!myIsSynchronized) {
final String value = getConfigValue(null);
if (value != null) {
myValue = (T)T.valueOf(myDefaultValue.getClass(), value);
}
myIsSynchronized = true;
}
return myValue;
}
public void setValue(T value) {
if (myIsSynchronized && (myValue == value)) {
return;
}
myValue = value;
myIsSynchronized = true;
if (value == myDefaultValue) {
unsetConfigValue();
} else {
setConfigValue("" + value.toString());
}
}
}