public void saveState() {
   if (isModified() && publisher != null) {
     publisher.onSettingsChanged(new ToolSettings(pathField.getText(), flagsField.getText()));
   }
   for (PropertyField propertyField : propertyFields) {
     propertyField.saveState();
   }
 }
 public boolean isModified() {
   for (PropertyField propertyField : propertyFields) {
     if (propertyField.isModified()) {
       return true;
     }
   }
   return false;
 }
 public void restoreState() {
   for (PropertyField propertyField : propertyFields) {
     propertyField.restoreState();
   }
 }