Добавлена возможность перехода к любому месту сценария
This commit is contained in:
parent
8d927c06e8
commit
6a726c08fc
31
res/layout/navigate.xml
Normal file
31
res/layout/navigate.xml
Normal file
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:minWidth="180dp"
|
||||
android:padding="5dp"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/position"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall" />
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/slider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingTop="4dp"
|
||||
android:paddingBottom="4dp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="end" />
|
||||
|
||||
</LinearLayout>
|
@ -2,8 +2,10 @@
|
||||
|
||||
<string name="app_name">RpyPlayer. Everlasting Summer</string>
|
||||
<string name="actions">Действия</string>
|
||||
<string name="navigate">Навигация</string>
|
||||
|
||||
<string-array name="menu_items">
|
||||
<item>@string/navigate</item>
|
||||
</string-array>
|
||||
|
||||
</resources>
|
||||
|
@ -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) {
|
||||
|
@ -24,13 +24,32 @@ public final class Parser {
|
||||
|
||||
|
||||
private final List<Token> tokens;
|
||||
private final int tokensCount;
|
||||
private int position;
|
||||
|
||||
public Parser(List<Token> tokens) {
|
||||
this.tokens = tokens;
|
||||
tokensCount = tokens.size();
|
||||
position = 0;
|
||||
}
|
||||
|
||||
public List<Token> 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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user