use of com.android.tools.idea.ui.properties.swing.TextProperty in project android by JetBrains.
the class DemoWizardLayout method decorate.
@NotNull
@Override
public JPanel decorate(@NotNull ObservableString title, @NotNull JPanel innerPanel) {
myBindings.bind(new TextProperty(myTitle), title);
myInnerContainer.add(innerPanel);
return myRootPanel;
}
use of com.android.tools.idea.ui.properties.swing.TextProperty in project android by JetBrains.
the class AnyCheckedDemo method init.
public void init() {
StringProperty yesNoText = new TextProperty(myYesNoLabel);
myBindings.bind(yesNoText, new YesNoExpression(any(new SelectedProperty(myCheckBox1), new SelectedProperty(myCheckBox2), new SelectedProperty(myCheckBox3), new SelectedProperty(myCheckBox4))));
}
use of com.android.tools.idea.ui.properties.swing.TextProperty in project android by JetBrains.
the class SyncFieldsDemo method init.
public void init() {
// Wrap UI elements in properties
final StringProperty projectText = new TextProperty(myProjectNameField);
final StringProperty activityText = new TextProperty(myActivityNameField);
final BoolProperty isSynced = new SelectedProperty(mySyncActivityNameCheckBox);
final BoolProperty createActivity = new SelectedProperty(myCreateActivityCheckBox);
BoolProperty isActivityEnabled = new EnabledProperty(myActivityNameField);
BoolProperty isLinkEnabled = new EnabledProperty(mySyncActivityNameCheckBox);
projectText.set("MyProject");
// Bind activityText <- nameExpression(projectText), but only if conditions are met
final FormatExpression activityNameExpression = new FormatExpression("%1$sActivity", projectText);
myBindings.bind(activityText, activityNameExpression, isSynced.and(createActivity));
myBindings.bind(isActivityEnabled, createActivity);
myBindings.bind(isLinkEnabled, createActivity);
// Listen to activityText - if it is changed by the user and not its binding, break syncing!
activityText.addListener(new InvalidationListener() {
@Override
public void onInvalidated(@NotNull ObservableValue<?> sender) {
isSynced.set(activityText.get().equals(activityNameExpression.get()));
}
});
}
use of com.android.tools.idea.ui.properties.swing.TextProperty in project android by JetBrains.
the class NewVectorAssetStep method onWizardStarting.
@Override
protected void onWizardStarting(@NotNull ModelWizard.Facade wizard) {
final Runnable onAssetModified = myPreviewUpdater::enqueueUpdate;
loadAssetPath();
SelectedProperty iconSelected = new SelectedProperty(myMaterialIconRadioButton);
myListeners.receiveAndFire(iconSelected, isIconActive -> {
myIconPickerPanel.setVisible(isIconActive);
myBrowserPanel.setVisible(!isIconActive);
myActiveAsset.set(isIconActive ? myIconButton.getAsset() : myBrowser.getAsset());
});
ActionListener assetListener = actionEvent -> {
onAssetModified.run();
saveAssetPath();
};
myIconButton.addAssetListener(assetListener);
myBrowser.addAssetListener(assetListener);
Disposer.register(this, myIconButton);
Disposer.register(this, myBrowser);
final BoolProperty overrideSize = new SelectedProperty(myOverrideSizeCheckBox);
final IntProperty width = new IntValueProperty();
final IntProperty height = new IntValueProperty();
myGeneralBindings.bindTwoWay(new StringToIntAdapterProperty(new TextProperty(myWidthTextField)), width);
myGeneralBindings.bindTwoWay(new StringToIntAdapterProperty(new TextProperty(myHeightTextField)), height);
myGeneralBindings.bind(new EnabledProperty(myWidthTextField), overrideSize);
myGeneralBindings.bind(new EnabledProperty(myHeightTextField), overrideSize);
myListeners.listenAll(overrideSize, myOriginalSize).withAndFire(() -> {
if (!overrideSize.get() || !myOriginalSize.get().isPresent()) {
width.set(DEFAULT_MATERIAL_ICON_SIZE);
height.set(DEFAULT_MATERIAL_ICON_SIZE);
} else {
width.set(myOriginalSize.getValue().width);
height.set(myOriginalSize.getValue().height);
}
});
final IntProperty opacityValue = new SliderValueProperty(myOpacitySlider);
myGeneralBindings.bind(new TextProperty(myOpacityValueLabel), new FormatExpression("%d %%", opacityValue));
final BoolProperty autoMirrored = new SelectedProperty(myEnableAutoMirroredCheckBox);
myListeners.listenAll(myActiveAsset, overrideSize, width, height, opacityValue, autoMirrored).with(onAssetModified);
final StringProperty name = new TextProperty(myOutputNameField);
myListeners.listenAndFire(myActiveAsset, sender -> {
myActiveAssetBindings.releaseAll();
myActiveAssetBindings.bind(name, new Expression<String>(myActiveAsset.get().path()) {
@NotNull
@Override
public String get() {
File path = myActiveAsset.get().path().get();
if (path.exists() && !path.isDirectory()) {
String name1 = FileUtil.getNameWithoutExtension(path).toLowerCase(Locale.getDefault());
if (!name1.startsWith(ICON_PREFIX)) {
name1 = ICON_PREFIX + AndroidResourceUtil.getValidResourceFileName(name1);
}
return AndroidResourceUtil.getValidResourceFileName(name1);
} else {
return "ic_vector_name";
}
}
});
myActiveAssetBindings.bind(myActiveAsset.get().opacity(), opacityValue);
myActiveAssetBindings.bind(myActiveAsset.get().autoMirrored(), autoMirrored);
myActiveAssetBindings.bind(myActiveAsset.get().outputWidth(), width);
myActiveAssetBindings.bind(myActiveAsset.get().outputHeight(), height);
});
// Refresh the asset preview, but fire using invokeLater, as this lets the UI lay itself out,
// which should happen before the "generate preview" logic runs.
ApplicationManager.getApplication().invokeLater(onAssetModified, ModalityState.any());
// Cast VectorAsset -> BaseAsset
myGeneralBindings.bind(myIconGenerator.sourceAsset(), new AsOptionalExpression<>(myActiveAsset));
myGeneralBindings.bind(myIconGenerator.name(), name);
}
use of com.android.tools.idea.ui.properties.swing.TextProperty in project android by JetBrains.
the class ConfigureDeviceOptionsStep method attachBindingsAndValidators.
private void attachBindingsAndValidators() {
final AvdDeviceData deviceModel = getModel().getDeviceData();
myBindings.bindTwoWay(new TextProperty(myDeviceName), deviceModel.name());
myBindings.bind(deviceModel.diagonalScreenSize(), myDiagScreenSizeAdapter);
myBindings.bind(deviceModel.screenResolutionWidth(), myScreenResWidthAdapter);
myBindings.bind(deviceModel.screenResolutionHeight(), myScreenResHeightAdapter);
myBindings.bindTwoWay(myRamField.storage(), deviceModel.ramStorage());
myBindings.bindTwoWay(new SelectedProperty(myHasHardwareButtons), deviceModel.hasHardwareButtons());
myBindings.bindTwoWay(new SelectedProperty(myHasHardwareKeyboard), deviceModel.hasHardwareKeyboard());
myBindings.bindTwoWay(new SelectedItemProperty<>(myNavigationControlsCombo), deviceModel.navigation());
myBindings.bindTwoWay(new SelectedProperty(myIsScreenRound), deviceModel.isScreenRound());
myBindings.bindTwoWay(new SelectedProperty(mySupportsLandscape), deviceModel.supportsLandscape());
myBindings.bindTwoWay(new SelectedProperty(mySupportsPortrait), deviceModel.supportsPortrait());
myBindings.bindTwoWay(new SelectedProperty(myHasBackFacingCamera), deviceModel.hasBackCamera());
myBindings.bindTwoWay(new SelectedProperty(myHasFrontFacingCamera), deviceModel.hasFrontCamera());
myBindings.bindTwoWay(new SelectedProperty(myHasAccelerometer), deviceModel.hasAccelerometer());
myBindings.bindTwoWay(new SelectedProperty(myHasGyroscope), deviceModel.hasGyroscope());
myBindings.bindTwoWay(new SelectedProperty(myHasGps), deviceModel.hasGps());
myBindings.bindTwoWay(new SelectedProperty(myHasProximitySensor), deviceModel.hasProximitySensor());
myBindings.bindTwoWay(new SelectedItemProperty<>(myCustomSkinPath.getComboBox()), deviceModel.customSkinFile());
SelectedItemProperty<IdDisplay> selectedDeviceType = new SelectedItemProperty<>(myDeviceTypeComboBox);
myBindings.bindTwoWay(selectedDeviceType, deviceModel.deviceType());
myListeners.receive(selectedDeviceType, idDisplayOptional -> {
if (idDisplayOptional.isPresent()) {
IdDisplay selectedType = idDisplayOptional.get();
getModel().getDeviceData().isWear().set(selectedType.equals(SystemImage.WEAR_TAG));
getModel().getDeviceData().isTv().set(selectedType.equals(SystemImage.TV_TAG));
myIsScreenRound.setEnabled(selectedType.equals(SystemImage.WEAR_TAG));
myIsScreenRound.setSelected(getModel().getDeviceData().isScreenRound().get());
}
});
myValidatorPanel.registerValidator(deviceModel.name().isEmpty().not(), "Please write a name for the new device.");
myValidatorPanel.registerValidator(myDiagScreenSizeAdapter.inSync().and(deviceModel.diagonalScreenSize().isEqualTo(myDiagScreenSizeAdapter)), "Please enter a non-zero positive floating point value for the screen size.");
myValidatorPanel.registerValidator(myScreenResWidthAdapter.inSync().and(deviceModel.screenResolutionWidth().isEqualTo(myScreenResWidthAdapter)), "Please enter a valid value for the screen width.");
myValidatorPanel.registerValidator(myScreenResHeightAdapter.inSync().and(deviceModel.screenResolutionHeight().isEqualTo(myScreenResHeightAdapter)), "Please enter a valid value for the screen height.");
myValidatorPanel.registerValidator(deviceModel.ramStorage(), value -> (value.getSize() > 0) ? Result.OK : new Result(Validator.Severity.ERROR, "Please specify a non-zero amount of RAM."));
myValidatorPanel.registerValidator(deviceModel.screenDpi().isGreaterThan(0), "The given resolution and screen size specified have a DPI that is too low.");
myValidatorPanel.registerValidator(deviceModel.supportsLandscape().or(deviceModel.supportsPortrait()), "A device must support at least one orientation (Portrait or Landscape).");
myValidatorPanel.registerValidator(deviceModel.customSkinFile(), value -> {
File skinPath = value.orElse(null);
if (skinPath != null && !FileUtil.filesEqual(skinPath, AvdWizardUtils.NO_SKIN) && !skinPath.getPath().equals(skinPath.getName())) {
File layoutFile = new File(skinPath, SdkConstants.FN_SKIN_LAYOUT);
if (!layoutFile.isFile()) {
return new Result(Validator.Severity.ERROR, "The skin directory does not point to a valid skin.");
}
}
return Result.OK;
});
myValidatorPanel.registerValidator(getModel().getDeviceData().compatibleSkinSize(), Validator.Severity.WARNING, "The selected skin is not large enough to view the entire screen.");
}
Aggregations