private void postCreate() {\r
mUpdaterData.addListeners(this);\r
adjustColumnsWidth();\r
+ updateButtonsState();\r
}\r
\r
/**\r
}\r
\r
/**\r
+ * Enable or disable buttons depending on list content and selection\r
+ */\r
+ private void updateButtonsState() {\r
+ ISelection sel = mTableViewerPackages.getSelection();\r
+ boolean hasSelection = sel != null && !sel.isEmpty();\r
+\r
+ mUpdateButton.setEnabled(mTablePackages.getItemCount() > 0);\r
+ mDeleteButton.setEnabled(hasSelection);\r
+ mRefreshButton.setEnabled(true);\r
+ }\r
+\r
+ /**\r
* Called when an item in the package table viewer is selected.\r
* If the items is an {@link IDescription} (as it should), this will display its long\r
* description in the description area. Otherwise when the item is not of the expected\r
* type or there is no selection, it empties the description area.\r
*/\r
private void onTreeSelected() {\r
+ updateButtonsState();\r
+\r
ISelection sel = mTableViewerPackages.getSelection();\r
if (sel instanceof IStructuredSelection) {\r
Object elem = ((IStructuredSelection) sel).getFirstElement();\r
\r
private void onRefreshSelected() {\r
mUpdaterData.reloadSdk();\r
+ updateButtonsState();\r
}\r
\r
public void onSdkChange() {\r
\r
import org.eclipse.jface.viewers.CheckStateChangedEvent;\r
import org.eclipse.jface.viewers.CheckboxTreeViewer;\r
-import org.eclipse.jface.viewers.DoubleClickEvent;\r
import org.eclipse.jface.viewers.ICheckStateListener;\r
-import org.eclipse.jface.viewers.IDoubleClickListener;\r
import org.eclipse.jface.viewers.ISelection;\r
import org.eclipse.jface.viewers.ITreeContentProvider;\r
import org.eclipse.jface.viewers.ITreeSelection;\r
\r
/*\r
* TODO list\r
- * - check source => toggle packages: all, none\r
- * - check package => set source check to tri-state\r
- * - check callback => install enable if has selection\r
- * - select tree item: delete site enable if add-on source\r
- * - select tree item: refresh enable if source\r
* - load add-on sites from pref\r
* - delete site callback, update pref\r
- * - refresh callback\r
- * - install selected callback\r
*/\r
\r
public class RemotePackagesPage extends Composite implements ISdkListener {\r
private TreeColumn mColumnSource;\r
private Group mDescriptionContainer;\r
private Button mAddSiteButton;\r
- private Button mRemoveSiteButton;\r
+ private Button mDeleteSiteButton;\r
private Label mPlaceholder3;\r
private Button mRefreshButton;\r
private Button mInstallSelectedButton;\r
parent.setLayout(new GridLayout(5, false));\r
\r
mTreeViewerSources = new CheckboxTreeViewer(parent, SWT.BORDER);\r
- mTreeViewerSources.addDoubleClickListener(new IDoubleClickListener() {\r
- public void doubleClick(DoubleClickEvent event) {\r
- onTreeDoubleClick(event); //$hide$\r
- }\r
- });\r
mTreeViewerSources.addCheckStateListener(new ICheckStateListener() {\r
public void checkStateChanged(CheckStateChangedEvent event) {\r
onTreeCheckStateChanged(event); //$hide$\r
});\r
mAddSiteButton.setText("Add Site...");\r
\r
- mRemoveSiteButton = new Button(parent, SWT.NONE);\r
- mRemoveSiteButton.addSelectionListener(new SelectionAdapter() {\r
+ mDeleteSiteButton = new Button(parent, SWT.NONE);\r
+ mDeleteSiteButton.addSelectionListener(new SelectionAdapter() {\r
@Override\r
public void widgetSelected(SelectionEvent e) {\r
onRemoveSiteSelected(); //$hide$\r
}\r
});\r
- mRemoveSiteButton.setText("Delete Site...");\r
+ mDeleteSiteButton.setText("Delete Site...");\r
\r
mPlaceholder3 = new Label(parent, SWT.NONE);\r
mPlaceholder3.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1));\r
private void postCreate() {\r
mUpdaterData.addListeners(this);\r
adjustColumnsWidth();\r
+ updateButtonsState();\r
}\r
\r
/**\r
* type or there is no selection, it empties the description area.\r
*/\r
private void onTreeSelected() {\r
+ updateButtonsState();\r
+\r
ISelection sel = mTreeViewerSources.getSelection();\r
if (sel instanceof ITreeSelection) {\r
Object elem = ((ITreeSelection) sel).getFirstElement();\r
* When checking a package, only its compatible archives are checked.\r
*/\r
private void onTreeCheckStateChanged(CheckStateChangedEvent event) {\r
+ updateButtonsState();\r
+\r
boolean b = event.getChecked();\r
Object elem = event.getElement(); // Will be Archive or Package or RepoSource\r
\r
}\r
}\r
\r
- private void onTreeDoubleClick(DoubleClickEvent event) {\r
- // TODO use or remove\r
- }\r
-\r
private void onInstallSelectedArchives() {\r
\r
ArrayList<Archive> archives = new ArrayList<Archive>();\r
if (mUpdaterData != null) {\r
mUpdaterData.refreshSources(false /*forceFetching*/);\r
}\r
+ updateButtonsState();\r
}\r
\r
public void onSdkChange() {\r
onTreeSelected();\r
}\r
\r
+ private void updateButtonsState() {\r
+ // We install archives, so there should be at least one checked archive.\r
+ // Having sites or packages checked does not count.\r
+ boolean hasCheckedArchive = false;\r
+ Object[] checked = mTreeViewerSources.getCheckedElements();\r
+ if (checked != null) {\r
+ for (Object c : checked) {\r
+ if (c instanceof Archive) {\r
+ hasCheckedArchive = true;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ // Is there a selected site Source?\r
+ boolean hasSelectedSource = false;\r
+ ISelection sel = mTreeViewerSources.getSelection();\r
+ if (sel instanceof ITreeSelection) {\r
+ for (Object c : ((ITreeSelection) sel).toList()) {\r
+ if (c instanceof RepoSource) {\r
+ hasSelectedSource = true;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ mAddSiteButton.setEnabled(true);\r
+ mDeleteSiteButton.setEnabled(hasSelectedSource);\r
+ mRefreshButton.setEnabled(true);\r
+ mInstallSelectedButton.setEnabled(hasCheckedArchive);\r
+ }\r
+\r
// End of hiding from SWT Designer\r
//$hide<<$\r
}\r