/** Returns a long description for an {@link IDescription}. */\r
@Override\r
public String getLongDescription() {\r
- return String.format("%1$s.\n%2$s",\r
+ return String.format("%1$s,\nRevision %2$d.",\r
getShortDescription(),\r
- super.getLongDescription());\r
+ getRevision());\r
}\r
\r
/**\r
/** Returns a long description for an {@link IDescription}. */\r
@Override\r
public String getLongDescription() {\r
- return String.format("%1$s.\n%2$s",\r
+ return String.format("%1$s,\nRevision %2$d.",\r
getShortDescription(),\r
- super.getLongDescription());\r
+ getRevision());\r
}\r
\r
/**\r
s += String.format(" (min tools rev.: %1$d)", mMinToolsRevision);\r
}\r
\r
- s += ".\n";\r
- s += super.getLongDescription();\r
+ s += ".";\r
\r
return s;\r
}\r
}\r
\r
/**\r
- * Returns the packages found by the last call to {@link #parseSdk(String, SdkManager, ISdkLog)}.\r
+ * Returns the packages found by the last call to\r
+ * {@link #parseSdk(String, SdkManager, ISdkLog)}.\r
+ * <p/>\r
+ * This returns initially returns null.\r
+ * Once the parseSdk() method has been called, this returns a possibly empty but non-null array.\r
*/\r
public Package[] getPackages() {\r
return mPackages;\r
if (s != null) {\r
sb.append(s);\r
}\r
+ if (sb.length() > 0) {\r
+ sb.append("\n");\r
+ }\r
\r
- sb.append(String.format("\nRevision %1$d", getRevision()));\r
+ sb.append(String.format("Revision %1$d", getRevision()));\r
\r
s = getDescUrl();\r
if (s != null && s.length() > 0) {\r
/** Returns a long description for an {@link IDescription}. */\r
@Override\r
public String getLongDescription() {\r
- return String.format("%1$s.\n%2$s",\r
- getShortDescription(),\r
- super.getLongDescription());\r
+ return getShortDescription() + ".";\r
}\r
\r
/**\r
/** Returns a long description for an {@link IDescription}. */\r
@Override\r
public String getLongDescription() {\r
- return String.format("Android SDK Tools, revision %1$d.\n%2$s",\r
- getRevision(),\r
- super.getLongDescription());\r
+ return getShortDescription() + ".";\r
}\r
\r
/**\r
mDescriptionLabel.setText("Line1\nLine2\nLine3");\r
\r
mAddSiteButton = new Button(parent, SWT.NONE);\r
+ mAddSiteButton.setText("Add Site...");\r
+ mAddSiteButton.setToolTipText("Allows you to enter a new user external site. " +\r
+ "Such site can only contribute add-ons and extra packages.");\r
mAddSiteButton.addSelectionListener(new SelectionAdapter() {\r
@Override\r
public void widgetSelected(SelectionEvent e) {\r
onAddSiteSelected(); //$hide$\r
}\r
});\r
- mAddSiteButton.setText("Add Site...");\r
\r
mDeleteSiteButton = new Button(parent, SWT.NONE);\r
+ mDeleteSiteButton.setText("Delete Site...");\r
+ mDeleteSiteButton.setToolTipText("Allows you to remove an external site. " +\r
+ "Built-in sites cannot be removed.");\r
mDeleteSiteButton.addSelectionListener(new SelectionAdapter() {\r
@Override\r
public void widgetSelected(SelectionEvent e) {\r
onRemoveSiteSelected(); //$hide$\r
}\r
});\r
- mDeleteSiteButton.setText("Delete Site...");\r
\r
mUpdateOnlyCheckBox = new Button(parent, SWT.CHECK);\r
mUpdateOnlyCheckBox.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1));\r
mUpdateOnlyCheckBox.setText("Display updates only");\r
+ mUpdateOnlyCheckBox.setToolTipText("When selected, only compatible update packages are shown in the list above.");\r
mUpdateOnlyCheckBox.setSelection(mUpdaterData.getSettingsController().getShowUpdateOnly());\r
mUpdateOnlyCheckBox.addSelectionListener(new SelectionAdapter() {\r
@Override\r
});\r
\r
mRefreshButton = new Button(parent, SWT.NONE);\r
+ mRefreshButton.setText("Refresh");\r
+ mRefreshButton.setToolTipText("Refreshes the list of packages from open sites.");\r
mRefreshButton.addSelectionListener(new SelectionAdapter() {\r
@Override\r
public void widgetSelected(SelectionEvent e) {\r
onRefreshSelected(); //$hide$\r
}\r
});\r
- mRefreshButton.setText("Refresh");\r
\r
mInstallSelectedButton = new Button(parent, SWT.NONE);\r
+ mInstallSelectedButton.setText("Install Selected");\r
+ mInstallSelectedButton.setToolTipText("Allows you to review all selected packages " +\r
+ "and install them.");\r
mInstallSelectedButton.addSelectionListener(new SelectionAdapter() {\r
@Override\r
public void widgetSelected(SelectionEvent e) {\r
onInstallSelectedArchives(); //$hide$\r
}\r
});\r
- mInstallSelectedButton.setText("Install Selected");\r
}\r
\r
@Override\r
}\r
\r
private void onShowUpdateOnly() {\r
- mUpdaterData.getSettingsController().setShowUpdateOnly(mUpdateOnlyCheckBox.getSelection());\r
+ SettingsController controller = mUpdaterData.getSettingsController();\r
+ controller.setShowUpdateOnly(mUpdateOnlyCheckBox.getSelection());\r
+ controller.saveSettings();\r
mTreeViewerSources.refresh();\r
}\r
\r
mDeleteSiteButton.setEnabled(hasSelectedUserSource);\r
mRefreshButton.setEnabled(true);\r
mInstallSelectedButton.setEnabled(hasCheckedArchive);\r
+\r
+ // set value on the show only update checkbox\r
+ mUpdateOnlyCheckBox.setSelection(mUpdaterData.getSettingsController().getShowUpdateOnly());\r
}\r
\r
// End of hiding from SWT Designer\r
import org.eclipse.jface.viewers.Viewer;\r
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.custom.SashForm;\r
+import org.eclipse.swt.custom.StyleRange;\r
+import org.eclipse.swt.custom.StyledText;\r
import org.eclipse.swt.events.ControlAdapter;\r
import org.eclipse.swt.events.ControlEvent;\r
import org.eclipse.swt.events.SelectionAdapter;\r
import org.eclipse.swt.widgets.Shell;\r
import org.eclipse.swt.widgets.Table;\r
import org.eclipse.swt.widgets.TableColumn;\r
-import org.eclipse.swt.widgets.Text;\r
\r
import java.util.ArrayList;\r
import java.util.Collection;\r
private TableViewer mTableViewPackage;\r
private Table mTablePackage;\r
private TableColumn mTableColum;\r
- private Text mPackageText;\r
+ private StyledText mPackageText;\r
private Button mLicenseRadioAccept;\r
private Button mLicenseRadioReject;\r
private Button mLicenseRadioAcceptAll;\r
\r
/**\r
* Create the dialog.\r
+ * @param parentShell The shell to use, typically updaterData.getWindowShell()\r
* @param updaterData The updater data\r
* @param newToOldUpdates The map [new archive => old archive] of potential updates\r
*/\r
- public UpdateChooserDialog(UpdaterData updaterData, Map<Archive, Archive> newToOldUpdates) {\r
- super(updaterData.getWindowShell(), SWT.APPLICATION_MODAL);\r
+ public UpdateChooserDialog(Shell parentShell,\r
+ UpdaterData updaterData,\r
+ Map<Archive, Archive> newToOldUpdates) {\r
+ super(parentShell,\r
+ SWT.APPLICATION_MODAL);\r
mUpdaterData = updaterData;\r
\r
mNewToOldArchiveMap = new TreeMap<Archive, Archive>(new Comparator<Archive>() {\r
mPackageTextGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1));\r
mPackageTextGroup.setLayout(new GridLayout(1, false/*makeColumnsEqual*/));\r
\r
- mPackageText = new Text(mPackageTextGroup,\r
- SWT.MULTI | SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);\r
+ mPackageText = new StyledText(mPackageTextGroup,\r SWT.MULTI | SWT.READ_ONLY | SWT.WRAP | SWT.V_SCROLL);\r
+ mPackageText.setBackground(\r
+ getParent().getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));\r
mPackageText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));\r
\r
mLicenseRadioAccept = new Button(mPackageRootComposite, SWT.RADIO);\r
mLicenseRadioAccept.setText("Accept");\r
- mLicenseRadioAccept.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));\r
mLicenseRadioAccept.addSelectionListener(new SelectionAdapter() {\r
@Override\r
public void widgetSelected(SelectionEvent e) {\r
\r
mLicenseRadioReject = new Button(mPackageRootComposite, SWT.RADIO);\r
mLicenseRadioReject.setText("Reject");\r
- mLicenseRadioReject.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));\r
mLicenseRadioReject.addSelectionListener(new SelectionAdapter() {\r
@Override\r
public void widgetSelected(SelectionEvent e) {\r
\r
mLicenseRadioAcceptAll = new Button(mPackageRootComposite, SWT.RADIO);\r
mLicenseRadioAcceptAll.setText("Accept All");\r
- mLicenseRadioAcceptAll.setLayoutData(\r
- new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));\r
mLicenseRadioAcceptAll.addSelectionListener(new SelectionAdapter() {\r
@Override\r
public void widgetSelected(SelectionEvent e) {\r
onPackageSelected();\r
}\r
\r
-\r
/**\r
* Creates the icon of the window shell.\r
*/\r
return;\r
}\r
\r
- StringBuilder sb = new StringBuilder();\r
+ mPackageText.setText(""); //$NON-NLS-1$\r
+\r
+ addSectionTitle("Package Description\n");\r
+ addText(a.getParentPackage().getLongDescription(), "\n\n"); //$NON-NLS-1$\r
\r
Archive aold = mNewToOldArchiveMap.get(a);\r
if (aold != null) {\r
- sb.append("*** Existing Package Description:\n");\r
- sb.append(aold.getParentPackage().getLongDescription()).append("\n\n");\r
+ addText(String.format("This update will replace revision %1$s with revision %2$s.\n\n",\r
+ aold.getParentPackage().getRevision(),\r
+ a.getParentPackage().getRevision()));\r
}\r
\r
- sb.append("*** New Package Description:\n");\r
- sb.append(a.getParentPackage().getLongDescription()).append("\n\n");\r
\r
- sb.append("\n*** Archive Description:\n");\r
- sb.append(a.getLongDescription()).append("\n");\r
+ addSectionTitle("Archive Description\n");\r
+ addText(a.getLongDescription(), "\n\n"); //$NON-NLS-1$\r
\r
String license = a.getParentPackage().getLicense();\r
if (license != null) {\r
- sb.append("\n*** Package License:\n");\r
- sb.append(license).append("\n");\r
+ addSectionTitle("License\n");\r
+ addText(license.trim(), "\n"); //$NON-NLS-1$\r
+ }\r
+ }\r
+\r
+ private void addText(String...string) {\r
+ for (String s : string) {\r
+ mPackageText.append(s);\r
}\r
+ }\r
\r
- mPackageText.setText(sb.toString());\r
+ private void addSectionTitle(String string) {\r
+ String s = mPackageText.getText();\r
+ int start = (s == null ? 0 : s.length());\r
+ mPackageText.append(string);\r
+\r
+ StyleRange sr = new StyleRange();\r
+ sr.start = start;\r
+ sr.length = string.length();\r
+ sr.fontStyle = SWT.BOLD;\r
+ sr.underline = true;\r
+ mPackageText.setStyleRange(sr);\r
}\r
\r
private void updateLicenceRadios(Archive a) {\r
\r
/**\r
* Tries to update all the *existing* local packages.\r
- * This first refreshes all sources, then compares the available remote packages when\r
+ * This first refreshes all sources, then compares the available remote packages with\r
* the current local ones and suggest updates to be done to the user. Finally all\r
* selected updates are installed.\r
*\r
// selected archives. If they do not match an update, list them anyway\r
// except they map themselves to null (no "old" archive)\r
for (Archive a : selectedArchives) {\r
- if (!updates.containsValue(a)) {\r
+ if (!updates.containsKey(a)) {\r
updates.put(a, null);\r
}\r
}\r
}\r
\r
- UpdateChooserDialog dialog = new UpdateChooserDialog(this, updates);\r
+ UpdateChooserDialog dialog = new UpdateChooserDialog(getWindowShell(), this, updates);\r
dialog.open();\r
\r
Collection<Archive> result = dialog.getResult();\r
// Map [remote archive => local archive] of suitable update candidates\r
Map<Archive, Archive> result = new HashMap<Archive, Archive>();\r
\r
- // First go thru all sources and make a local list of all available archives\r
+ // First go thru all sources and make a list of all available remote archives\r
// sorted by package class.\r
- HashMap<Class<? extends Package>, ArrayList<Archive>> availPkgs =\r
+ HashMap<Class<? extends Package>, ArrayList<Archive>> availablePkgs =\r
new HashMap<Class<? extends Package>, ArrayList<Archive>>();\r
\r
if (selectedArchives != null) {\r
if (a.isCompatible()) {\r
Class<? extends Package> clazz = a.getParentPackage().getClass();\r
\r
- ArrayList<Archive> list = availPkgs.get(clazz);\r
+ ArrayList<Archive> list = availablePkgs.get(clazz);\r
if (list == null) {\r
- availPkgs.put(clazz, list = new ArrayList<Archive>());\r
+ availablePkgs.put(clazz, list = new ArrayList<Archive>());\r
}\r
\r
list.add(a);\r
for (Package remotePkg : remotePkgs) {\r
Class<? extends Package> clazz = remotePkg.getClass();\r
\r
- ArrayList<Archive> list = availPkgs.get(clazz);\r
+ ArrayList<Archive> list = availablePkgs.get(clazz);\r
if (list == null) {\r
- availPkgs.put(clazz, list = new ArrayList<Archive>());\r
+ availablePkgs.put(clazz, list = new ArrayList<Archive>());\r
}\r
\r
for (Archive a : remotePkg.getArchives()) {\r
\r
for (Package localPkg : localPkgs) {\r
// get the available archive list for this package type\r
- ArrayList<Archive> list = availPkgs.get(localPkg.getClass());\r
+ ArrayList<Archive> list = availablePkgs.get(localPkg.getClass());\r
\r
// if this list is empty, we'll never find anything that matches\r
if (list == null || list.size() == 0) {\r
Archive[] localArchives = localPkg.getArchives();\r
if (localArchives != null && localArchives.length > 0) {\r
Archive localArchive = localArchives[0];\r
- // only consider archive compatible with the current platform\r
+ // only consider archives compatible with the current platform\r
if (localArchive != null && localArchive.isCompatible()) {\r
\r
// We checked all this archive stuff because that's what eventually gets\r