Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Integration of components registry in the browser #792

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion bundles/com.espressif.idf.ui/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ Require-Bundle: org.eclipse.core.runtime,
org.eclipse.tools.templates.freemarker,
org.eclipse.embedcdt.ui,
org.eclipse.ltk.ui.refactoring,
org.eclipse.ltk.core.refactoring
org.eclipse.ltk.core.refactoring,
org.eclipse.ui.browser
Automatic-Module-Name: com.espressif.idf.ui
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-11
Expand Down
2 changes: 1 addition & 1 deletion bundles/com.espressif.idf.ui/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -609,7 +609,7 @@
name="%editor.name.0">
</editor>
<editor
class="com.espressif.idf.ui.installcomponents.InstallComponentsEditor"
class="com.espressif.idf.ui.browser.ComponentsBrowserEditor"
default="false"
icon="icons/ESP-IDF_InstallComponents.png"
id="com.espressif.idf.ui.installComponents"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.espressif.idf.ui.browser;

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;


public class ComponentBrowser
{
private String htmltext = "<!DOCTYPE html>\n"
+ "<html lang=\"en\">\n"
+ "\n"
+ "<head>\n"
+ " <meta charset=\"UTF-8\">\n"
+ " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n"
+ " <title>IDF Component Registry</title>\n"
+ " <style>\n"
+ " body {\n"
+ " margin: 0px;\n"
+ " padding: 0px;\n"
+ " overflow: hidden;\n"
+ " }\n"
+ "\n"
+ " iframe {\n"
+ " overflow: hidden;\n"
+ " overflow-x: hidden;\n"
+ " overflow-y: hidden;\n"
+ " height: 100%;\n"
+ " width: 100%;\n"
+ " position: absolute;\n"
+ " top: 0px;\n"
+ " left: 0px;\n"
+ " right: 0px;\n"
+ " bottom: 0px\n"
+ " }\n"
+ " </style>\n"
+ "</head>\n"
+ "\n"
+ "<body>\n"
+ " <iframe src=\"https://components.espressif.com/\" frameborder=\"0\" width=\"100%\" height=\"100%\"></iframe>\n"
+ " <script>\n"
+ " const vscode = acquireVsCodeApi()\n"
+ " window.addEventListener(\"message\", (ev) => {\n"
+ " vscode.postMessage(ev.data);\n"
+ " })\n"
+ " </script>\n"
+ "</body>\n"
+ "\n"
+ "</html>";

public void createBrowser(Composite composite) throws ClassNotFoundException
{
Browser browser = new Browser(composite, SWT.NONE);
browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
browser.setText(htmltext, true);

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
/*******************************************************************************
* Copyright 2023 Espressif Systems (Shanghai) PTE LTD. All rights reserved.
* Use is subject to license terms.
*******************************************************************************/
package com.espressif.idf.ui.browser;

import java.io.IOException;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.part.MultiPageEditorPart;

import com.espressif.idf.core.logging.Logger;

public class ComponentsBrowserEditor extends MultiPageEditorPart
{
public static String EDITOR_ID = "com.espressif.idf.ui.installComponents"; //$NON-NLS-1$

private IFile componentsJsonFile;
private IProject project;

public ComponentsBrowserEditor()
{
}

@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException
{
super.init(site, input);
FileEditorInput editorInput = (FileEditorInput) getEditorInput();
componentsJsonFile = editorInput.getFile();
project = componentsJsonFile.getProject();
setPartName(project.getName());

}

@Override
protected void createPages()
{
String osString = componentsJsonFile.getLocation().toOSString();
Logger.log("Editor input:" + osString); //$NON-NLS-1$

try
{
createComponentsInstallPage();
}
catch (
IOException
| ClassNotFoundException e)
{
Logger.log(e);
}
}

private void createComponentsInstallPage() throws IOException, ClassNotFoundException
{
Composite parent = new Composite(getContainer(), SWT.NONE);
parent.setLayout(new FillLayout(SWT.VERTICAL));
ScrolledComposite scrolledComposite = new ScrolledComposite(parent,
SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FILL);
scrolledComposite.setLayout(new FillLayout(SWT.VERTICAL));
scrolledComposite.setAlwaysShowScrollBars(true);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
scrolledComposite.addListener(SWT.Resize, event -> {
int width = scrolledComposite.getClientArea().width;
scrolledComposite.setMinSize(parent.computeSize(width, SWT.DEFAULT, true));
});
Composite subContainer = new Composite(scrolledComposite, SWT.NONE);
GridLayout gridLayout = new GridLayout(1, true);
subContainer.setLayout(gridLayout);

new ComponentBrowser().createBrowser(subContainer);

scrolledComposite.setContent(subContainer);

int index = addPage(parent);
setPageText(index, "Install Components"); //$NON-NLS-1$
}

@Override
public void doSave(IProgressMonitor monitor)
{
}

@Override
public void doSaveAs()
{
}

@Override
public boolean isDirty()
{
return false;
}

@Override
public boolean isSaveAsAllowed()
{
return false;
}

@Override
public void setFocus()
{
}

@Override
public void dispose()
{
super.dispose();
}
}
Loading