package com.kedzie.vbox.machine.settings;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import com.actionbarsherlock.app.SherlockFragment;
import com.kedzie.vbox.R;
import com.kedzie.vbox.api.IHost;
import com.kedzie.vbox.api.IMachine;
import com.kedzie.vbox.api.ISystemProperties;
import com.kedzie.vbox.app.BundleBuilder;
import com.kedzie.vbox.app.SliderView;
import com.kedzie.vbox.app.SliderView.OnSliderViewChangeListener;
import com.kedzie.vbox.app.Tuple;
import com.kedzie.vbox.task.DialogTask;
/**
* @apiviz.stereotype fragment
*/
public class DisplayVideoFragment extends SherlockFragment {
class LoadInfoTask extends DialogTask<IMachine, Tuple<ISystemProperties, IHost>> {
public LoadInfoTask() {
super(getSherlockActivity(), _machine.getAPI(), R.string.progress_loading_data_generic);
}
@Override
protected Tuple<ISystemProperties, IHost> work(IMachine... m) throws Exception {
m[0].getVRAMSize();
m[0].getAccelerate2DVideoEnabled();
m[0].getAccelerate3DEnabled();
m[0].getMonitorCount();
ISystemProperties props = _vmgr.getVBox().getSystemProperties();
props.getMaxGuestVRAM();
props.getMinGuestVRAM();
props.getMaxGuestMonitors();
IHost host = _vmgr.getVBox().getHost();
host.getAcceleration3DAvailable();
return new Tuple<ISystemProperties, IHost>(props, host);
}
@Override
protected void onSuccess(Tuple<ISystemProperties, IHost> result) {
_systemProperties = result.first;
_host = result.second;
populateViews(_machine, _systemProperties, _host);
}
}
private IMachine _machine;
private ISystemProperties _systemProperties;
private IHost _host;
private View _view;
private SliderView _videoMemoryBar;
private SliderView _monitorBar;
private CheckBox _acceleration3DBox;
private CheckBox _acceleration2DBox;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_machine = BundleBuilder.getProxy(savedInstanceState!=null ? savedInstanceState : getArguments(), IMachine.BUNDLE, IMachine.class);
if(savedInstanceState!=null) {
_systemProperties = BundleBuilder.getProxy(savedInstanceState, "systemProperties", ISystemProperties.class);
_host = BundleBuilder.getProxy(savedInstanceState, "host", IHost.class);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
_view = inflater.inflate(R.layout.settings_display_video, null);
_videoMemoryBar = (SliderView)_view.findViewById(R.id.videoMemory);
_monitorBar = (SliderView)_view.findViewById(R.id.numMonitors);
_acceleration2DBox = (CheckBox)_view.findViewById(R.id.acceleration2D);
_acceleration3DBox = (CheckBox)_view.findViewById(R.id.acceleration3D);
return _view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(_host!=null && _systemProperties!=null)
populateViews(_machine, _systemProperties, _host);
else
new LoadInfoTask().execute(_machine);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
BundleBuilder.putProxy(outState, IMachine.BUNDLE, _machine);
BundleBuilder.putProxy(outState, "systemProperties", _systemProperties);
BundleBuilder.putProxy(outState, "host", _host);
}
private void populateViews(IMachine m, ISystemProperties sp, IHost host) {
_videoMemoryBar.setMinValue(1);
_videoMemoryBar.setMinValidValue(1);
_videoMemoryBar.setMaxValue(sp.getMaxGuestVRAM());
_videoMemoryBar.setMaxValidValue(sp.getMaxGuestVRAM());
_videoMemoryBar.setValue(m.getVRAMSize());
_videoMemoryBar.setOnSliderViewChangeListener(new OnSliderViewChangeListener() {
@Override
public void onSliderValidValueChanged(int newValue) {
_machine.setVRAMSize(newValue);
}
@Override
public void onSliderInvalidValueChanged(int newValue) {
}
});
_monitorBar.setMinValue(1);
_monitorBar.setMinValidValue(1);
_monitorBar.setMaxValue(sp.getMaxGuestMonitors());
_monitorBar.setMaxValidValue(sp.getMaxGuestMonitors());
_monitorBar.setValue(m.getMonitorCount());
_monitorBar.setOnSliderViewChangeListener(new OnSliderViewChangeListener() {
@Override
public void onSliderValidValueChanged(int newValue) {
_machine.setMonitorCount(newValue);
}
@Override
public void onSliderInvalidValueChanged(int newValue) {
}
});
_acceleration2DBox.setChecked(m.getAccelerate2DVideoEnabled());
_acceleration2DBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, final boolean isChecked) {
_machine.setAccelerate2DVideoEnabled(isChecked);
}
});
_acceleration3DBox.setEnabled(host.getAcceleration3DAvailable());
_acceleration3DBox.setChecked(m.getAccelerate3DEnabled());
_acceleration3DBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, final boolean isChecked) {
_machine.setAccelerate3DEnabled(isChecked);
}
});
}
}