From 6a726c08fcd4c79c4ad2fa8283992196c1c8a2f7 Mon Sep 17 00:00:00 2001 From: Victor Date: Fri, 10 Apr 2015 22:33:28 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20=D0=BA=20=D0=BB=D1=8E=D0=B1=D0=BE=D0=BC=D1=83=20=D0=BC?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D1=83=20=D1=81=D1=86=D0=B5=D0=BD=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- res/layout/navigate.xml | 31 +++++++++++++++ res/values/strings.xml | 2 + .../annimon/everlastingsummer/Dialogs.java | 38 +++++++++++++++++++ src/com/annimon/everlastingsummer/Parser.java | 21 +++++++++- 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 res/layout/navigate.xml diff --git a/res/layout/navigate.xml b/res/layout/navigate.xml new file mode 100644 index 0000000..7a586a8 --- /dev/null +++ b/res/layout/navigate.xml @@ -0,0 +1,31 @@ + + + + + + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index b1c616e..3d77d33 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2,8 +2,10 @@ RpyPlayer. Everlasting Summer Действия + Навигация + @string/navigate diff --git a/src/com/annimon/everlastingsummer/Dialogs.java b/src/com/annimon/everlastingsummer/Dialogs.java index cb875e7..43ef6b7 100644 --- a/src/com/annimon/everlastingsummer/Dialogs.java +++ b/src/com/annimon/everlastingsummer/Dialogs.java @@ -35,6 +35,44 @@ public final class Dialogs { builder.show(); } + public void showNavigate() { + final View root = LayoutInflater.from(context).inflate(R.layout.navigate, null); + final TextView positionIndicator = (TextView) root.findViewById(R.id.position); + final SeekBar slider = (SeekBar) root.findViewById(R.id.slider); + final TextView text = (TextView) root.findViewById(R.id.text); + + final Parser parser = Parser.getInstance(); + positionIndicator.setText(String.valueOf(parser.getPosition())); + slider.setMax(parser.getTokensCount() - 1); + slider.setProgress(parser.getPosition()); + slider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { } + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + positionIndicator.setText(String.valueOf(progress)); + if (progress >= parser.getTokensCount()) return; + text.setText(parser.getTokens().get(progress).getText()); + } + } ); + + builder.setTitle(R.string.navigate); + builder.setView(root); + builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + parser.setPosition(slider.getProgress()); + } + }); + builder.setCancelable(false); + builder.show(); + } + private final DialogInterface.OnClickListener dismissDialog = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { diff --git a/src/com/annimon/everlastingsummer/Parser.java b/src/com/annimon/everlastingsummer/Parser.java index 7eeb6fd..bac15f8 100644 --- a/src/com/annimon/everlastingsummer/Parser.java +++ b/src/com/annimon/everlastingsummer/Parser.java @@ -24,13 +24,32 @@ public final class Parser { private final List tokens; + private final int tokensCount; private int position; public Parser(List tokens) { this.tokens = tokens; + tokensCount = tokens.size(); position = 0; } + public List getTokens() { + return tokens; + } + + public int getTokensCount() { + return tokensCount; + } + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + next(); + } + public void next() { // Команды разделяются на терминальные и нетерминальные. // Нетерминальные подготавливают сцену к выводу. @@ -264,7 +283,7 @@ public final class Parser { } private Token get(int offset) { - if (position + offset >= tokens.size()) return EOF; + if (position + offset >= tokensCount) return EOF; return tokens.get(position + offset); } }