本文整理汇总了Java中ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace类的典型用法代码示例。如果您正苦于以下问题:Java StandalonePluginWorkspace类的具体用法?Java StandalonePluginWorkspace怎么用?Java StandalonePluginWorkspace使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
StandalonePluginWorkspace类属于ro.sync.exml.workspace.api.standalone包,在下文中一共展示了StandalonePluginWorkspace类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。
示例1: showDiff
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
/**
*
* Open the diff files tool with initial left and right URLs to compare.
* The comparison will begin automatically and the content types for the URLs will be auto-detected.
*
* @param pluginWorkspace Entry point for accessing the DITA Maps area.
* @param localFile The location of the current file on disk.
* @param translatedFile The location of the unpacked file. The file from the chosen archive.
*/
private void showDiff(final StandalonePluginWorkspace pluginWorkspace, File localFile, File translatedFile) {
try {
URL leftURL = localFile.toURI().toURL();
URL rightURL = translatedFile.toURI().toURL();
//Check if the url it's a supported Oxygen file
if(!pluginWorkspace.getUtilAccess().isUnhandledBinaryResourceURL(rightURL)){
pluginWorkspace.openDiffFilesApplication(leftURL, rightURL);
} else {
pluginWorkspace.showInformationMessage(messages.getMessage(Tags.PREVIEW_DIALOG_SUPPORTED_OXYFILE));
}
} catch (MalformedURLException e2) {
// Shouldn't happen.
logger.error(e2, e2);
}
}
开发者ID:oxygenxml,项目名称:oxygen-dita-translation-package-builder,代码行数:26,代码来源:PreviewDialog.java
示例2: actionPerformed
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
@Override
public void actionPerformed(ActionEvent e) {
String[] options = new String[] { " Yes ", " No " };
int[] optonsId = new int[] { 0, 1 };
int response = ((StandalonePluginWorkspace) PluginWorkspaceProvider.getPluginWorkspace()).showConfirmDialog(
translator.getTranslation(Tags.CONTEXTUAL_MENU_DISCARD),
translator.getTranslation(Tags.CONTEXTUAL_MENU_DISCARD_CONFIRMATION_MESSAGE), options, optonsId);
if (response == 0) {
for (FileStatus file : fileStatuses) {
if (file.getChangeType() == GitChangeType.ADD
|| file.getChangeType() == GitChangeType.UNTRACKED) {
try {
FileUtils.forceDelete(
new File(OptionsManager.getInstance().getSelectedRepository() + '/' + file.getFileLocation()));
} catch (IOException e1) {
logger.error(e1, e1);
}
} else if (file.getChangeType() == GitChangeType.SUBMODULE) {
GitAccess.getInstance().discardSubmodule();
}
}
stageController.doGitCommand(fileStatuses, GitCommand.DISCARD);
}
}
开发者ID:oxygenxml,项目名称:oxygen-git-plugin,代码行数:25,代码来源:DiscardAction.java
示例3: saveGitCredentials
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
/**
* Saves the user credentials for git push and pull
*
* @param userCredentials
* - the credentials to be saved
*/
public void saveGitCredentials(UserCredentials userCredentials) {
loadOptions();
UserCredentials uc = new UserCredentials();
String encryptedPassword = ((StandalonePluginWorkspace) PluginWorkspaceProvider.getPluginWorkspace())
.getUtilAccess().encrypt(userCredentials.getPassword());
uc.setPassword(encryptedPassword);
uc.setUsername(userCredentials.getUsername());
uc.setHost(userCredentials.getHost());
List<UserCredentials> credentials = options.getUserCredentialsList().getCredentials();
for (Iterator<UserCredentials> iterator = credentials.iterator(); iterator.hasNext();) {
UserCredentials alreadyHere = iterator.next();
if (alreadyHere.getHost().equals(uc.getHost())) {
// Replace.
iterator.remove();
break;
}
}
credentials.add(uc);
saveOptions();
}
开发者ID:oxygenxml,项目名称:oxygen-git-plugin,代码行数:30,代码来源:OptionsManager.java
示例4: getGitCredentials
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
/**
* Loads the user credentials for git push and pull
*
* @return the credentials
*/
public UserCredentials getGitCredentials(String host) {
loadOptions();
List<UserCredentials> userCredentialsList = options.getUserCredentialsList().getCredentials();
String username = null;
String password = null;
for (UserCredentials credential : userCredentialsList) {
if (host.equals(credential.getHost())) {
username = credential.getUsername();
password = credential.getPassword();
break;
}
}
String decryptedPassword = null;
if (OxygenGitPlugin.getInstance() != null) {
decryptedPassword = ((StandalonePluginWorkspace) PluginWorkspaceProvider.getPluginWorkspace()).getUtilAccess()
.decrypt(password);
}
return new UserCredentials(username, decryptedPassword, host);
}
开发者ID:oxygenxml,项目名称:oxygen-git-plugin,代码行数:27,代码来源:OptionsManager.java
示例5: actionPerformed
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
@Override
public void actionPerformed(ActionEvent e) {
WSEditor editorAccess = workspace.getCurrentEditorAccess(StandalonePluginWorkspace.MAIN_EDITING_AREA);
URL url = editorAccess.getEditorLocation();
if (url.toString().startsWith(ArgonConst.ARGON)) {
String protocol = CustomProtocolURLHandlerExtension.protocolFromURL(url);
CustomProtocolURLHandlerExtension handlerExtension = new CustomProtocolURLHandlerExtension();
if (handlerExtension.canCheckReadOnly(protocol) && !handlerExtension.isReadOnly(url)) {
byte[] outputArray = WorkspaceUtils.getEditorByteContent(editorAccess);
WorkspaceUtils.setCursor(WorkspaceUtils.WAIT_CURSOR);
String encoding = ArgonEditorsWatchMap.getInstance().getEncoding(url);
if (!encoding.equals("UTF-8"))
outputArray = IOUtils.convertToUTF8(outputArray, encoding);
updateFile(url, outputArray, encoding);
WorkspaceUtils.setCursor(WorkspaceUtils.DEFAULT_CURSOR);
} else {
workspace.showInformationMessage(Lang.get(Lang.Keys.msg_noupdate1) + " " + url.toString() + ".\n" +
Lang.get(Lang.Keys.msg_noupdate2));
}
}
}
开发者ID:axxepta,项目名称:project-argon,代码行数:22,代码来源:NewVersionAction.java
示例6: checkIn
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
static void checkIn(URL url) {
BaseXSource source = CustomProtocolURLHandlerExtension.sourceFromURL(url);
String path = CustomProtocolURLHandlerExtension.pathFromURL(url);
try (Connection connection = BaseXConnectionWrapper.getConnection()) {
if (connection.lockedByUser(source, path)) {
WSEditor editorAccess = PluginWorkspaceProvider.getPluginWorkspace().
getEditorAccess(url, StandalonePluginWorkspace.MAIN_EDITING_AREA);
ArgonEditorsWatchMap.getInstance().setAskedForCheckIn(url, true);
if (editorAccess != null)
editorAccess.close(true);
connection.unlock(source, path);
}
} catch (IOException ex) {
logger.debug(ex);
}
}
开发者ID:axxepta,项目名称:project-argon,代码行数:17,代码来源:CheckInAction.java
示例7: customizePopUpMenu
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
@Override
public void customizePopUpMenu(Object popUp, AuthorAccess authorAccess) {
String editorURLString = PluginWorkspaceProvider.getPluginWorkspace().
getCurrentEditorAccess(StandalonePluginWorkspace.MAIN_EDITING_AREA).getEditorLocation().toString();
final String selectedText = authorAccess.getEditorAccess().getSelectedText();
if ((selectedText != null) && (!selectedText.equals(""))) {
JMenuItem editorSelectionMenu = createSnippetEditorPopUpAddition();
((JPopupMenu) popUp).add(editorSelectionMenu, 0);
}
if (editorURLString.toLowerCase().startsWith("argon")) {
if (authorAccess.getEditorAccess().isEditable()) {
JMenuItem checkInMenuItem = createCheckInEditorPopUpAddition();
((JPopupMenu) popUp).add(checkInMenuItem, 0);
} else {
JMenuItem checkOutMenuItem = createCheckOutEditorPopUpAddition();
((JPopupMenu) popUp).add(checkOutMenuItem, 0);
}
}
}
开发者ID:axxepta,项目名称:project-argon,代码行数:20,代码来源:ArgonEditorChangeListener.java
示例8: applicationStarted
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
@Override
public void applicationStarted(StandalonePluginWorkspace ws) {
WorkspaceExtension.ws = ws;
//workaround
delayThread = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
doOpen();
} catch (InterruptedException e) {
//ignore
} finally {
delayThread = null;
}
}
});
delayThread.setDaemon(true);
delayThread.start();
}
开发者ID:shabanovd,项目名称:oxygenxml-webdav,代码行数:22,代码来源:WorkspaceExtension.java
示例9: customizePopUpMenu
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
@Override
public void customizePopUpMenu(Object popUp, WSTextEditorPage textPage) {
Object textComponent = textPage.getTextComponent();
if (textComponent instanceof JTextArea) {
int caretOffset = textPage.getCaretOffset();
WSEditor editorAccess = pluginWorkspaceAccess.getCurrentEditorAccess(StandalonePluginWorkspace.MAIN_EDITING_AREA);
HighlightData highlightData = perEditorHighlightData.get(editorAccess);
HighlightInfo hInfo = highlightData.getInfoForCaretOrNull(caretOffset);
if (hInfo != null) {
RuleMatch match = hInfo.ruleMatch;
replaceMenuItems((JPopupMenu) popUp, match, new TextModeApplyReplacementAction(match, textPage, highlightData, editorAccess));
}
} else {
System.err.println("textComponent not of type JTextArea: " + textComponent.getClass().getName());
}
}
开发者ID:danielnaber,项目名称:oxygen-languagetool-plugin,代码行数:17,代码来源:LanguageToolPluginExtension.java
示例10: actionPerformed
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
@Override
public void actionPerformed(@NotNull ActionEvent event) {
WSEditor editorAccess = pluginWorkspaceAccess.getCurrentEditorAccess(StandalonePluginWorkspace.MAIN_EDITING_AREA);
WSAuthorEditorPage authorPageAccess = (WSAuthorEditorPage) editorAccess.getCurrentPage();
AuthorDocumentController controller = authorPageAccess.getDocumentController();
controller.beginCompoundEdit();
try {
boolean deleted = controller.delete(match.getOxygenOffsetStart(), match.getOxygenOffsetEnd());
if (!deleted) {
System.err.println("Could not delete text for match " + match);
} else {
AuthorHighlighter highlighter = authorAccess.getEditorAccess().getHighlighter();
highlighter.removeAllHighlights();
controller.insertText(match.getOxygenOffsetStart(), event.getActionCommand());
checkTextInBackground(highlighter, authorPageAccess);
}
} finally {
controller.endCompoundEdit();
}
}
开发者ID:danielnaber,项目名称:oxygen-languagetool-plugin,代码行数:21,代码来源:LanguageToolPluginExtension.java
示例11: ShowPanelAction
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
/**
* Instantiates a new ShowPanelAction.
*
* @param workspace oXygen's plugin workspace
* @param icon The plugin's icon
* @param viewId The plugin's view ID in oXygen
* @param config The plugin config
*/
public ShowPanelAction(StandalonePluginWorkspace workspace,
String icon, String viewId, MainPanel mainPanel, Config config) {
super("GlyphPicker", new ImageIcon(
ShowPanelAction.class.getResource(icon)));
this.workspace = workspace;
this.viewId = viewId;
this.mainPanel = mainPanel;
String description = I18N.getString(CLASS_NAME + ".description");
putValue(SHORT_DESCRIPTION, description);
putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(config.getShortcut()));
// listen to changes of the shortcut field of the config object
config.addPropertyChangeListener(this);
}
开发者ID:richard-strauss-werke,项目名称:glyphpicker,代码行数:26,代码来源:ShowPanelAction.java
示例12: insertFragment
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
/**
* Inserts a text fragment into a text or author editor pane.
*
* @param workspace oXygen's plugin workspace
* @param d the glyph definition
*/
private void insertFragment(StandalonePluginWorkspace workspace,
GlyphDefinition d) {
WSEditor editorAccess = workspace.getCurrentEditorAccess(
PluginWorkspace.MAIN_EDITING_AREA);
if (editorAccess != null) {
WSEditorPage currentPage = editorAccess.getCurrentPage();
if (currentPage instanceof WSTextEditorPage) {
insertIntoTextEditorPage(d.getXmlString(), (WSTextEditorPage) currentPage);
transferFocus();
return;
} else if (currentPage instanceof WSAuthorEditorPage) {
insertIntoAuthorPage(d.getXmlString(), (WSAuthorEditorPage) currentPage);
transferFocus();
return;
}
}
workspace.showErrorMessage(getI18n().getString("GlyphPickerPluginExtension.noEditorFound"));
}
开发者ID:richard-strauss-werke,项目名称:glyphpicker,代码行数:26,代码来源:GlyphPickerPluginExtension.java
示例13: applicationStarted
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
/**
* On application startup, add SamplePlugin menu to top-level menubar.
*/
public void applicationStarted(
final StandalonePluginWorkspace pwa) {
this.pluginWorkspaceAccess = pwa;
options = new LocalOptions();
pluginWorkspaceAccess.addMenuBarCustomizer(new MenuBarCustomizer() {
public void customizeMainMenu(JMenuBar mainMenuBar) {
// Add the SamplePlugin to the next-to-last spot in the menu
mainMenuBar.add(new JUELPluginMenu(pluginWorkspaceAccess, options),
mainMenuBar.getMenuCount() - 1);
}
});
}
开发者ID:deternitydx,项目名称:IATH-Oxygen-Plugins,代码行数:19,代码来源:JUELPluginExtension.java
示例14: applicationStarted
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
/**
* On application startup, add SamplePlugin menu to top-level menubar.
*/
public void applicationStarted(
final StandalonePluginWorkspace pwa) {
this.pluginWorkspaceAccess = pwa;
options = new LocalOptions();
pluginWorkspaceAccess.addMenuBarCustomizer(new MenuBarCustomizer() {
public void customizeMainMenu(JMenuBar mainMenuBar) {
// Add the SamplePlugin to the next-to-last spot in the menu
mainMenuBar.add(new CBWPluginMenu(pluginWorkspaceAccess, options),
mainMenuBar.getMenuCount() - 1);
}
});
}
开发者ID:deternitydx,项目名称:IATH-Oxygen-Plugins,代码行数:19,代码来源:CBWPluginExtension.java
示例15: applicationStarted
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
/**
* On application startup, add SamplePlugin menu to top-level menubar.
*/
public void applicationStarted(
final StandalonePluginWorkspace pwa) {
this.pluginWorkspaceAccess = pwa;
options = new LocalOptions();
pluginWorkspaceAccess.addMenuBarCustomizer(new MenuBarCustomizer() {
public void customizeMainMenu(JMenuBar mainMenuBar) {
// Add the SamplePlugin to the next-to-last spot in the menu
mainMenuBar.add(new GetIDPluginMenu(pluginWorkspaceAccess, options),
mainMenuBar.getMenuCount() - 1);
}
});
}
开发者ID:deternitydx,项目名称:IATH-Oxygen-Plugins,代码行数:19,代码来源:GetIDPluginExtension.java
示例16: openConfigDialog
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
public static void openConfigDialog (StandalonePluginWorkspace workspace) {
Properties properties = new Properties();
try {
properties.load(ConfigTableTest.class
.getResourceAsStream("/plugin.properties"));
} catch (IOException e) {
e.printStackTrace();
}
ConfigStore configStore = new ConfigStore(workspace, properties);
ConfigDialog configDialog = new ConfigDialog(workspace, configStore,
properties.getProperty("plugin.name"));
String[][] newConfig = configDialog.show();
LOGGER.info(newConfig);
}
开发者ID:aerhard,项目名称:dbTagger,代码行数:21,代码来源:UITest.java
示例17: openSearchDialog
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
public static void openSearchDialog(StandalonePluginWorkspace workspace) {
String url = "https://raw.githubusercontent.com/aerhard/dbTagger/dev/src/test/json/work?q=";
String subUrl = "https://raw.githubusercontent.com/aerhard/dbTagger/dev/src/test/json/";
String searchString = "initial search string";
SearchDialog dialog = new SearchDialog(workspace, "Test Dialog", null, null, url, subUrl, searchString);
String[] result = dialog.showDialog();
if (result == null) {
LOGGER.info("dialog result is null");
} else {
LOGGER.info(result[0]);
}
}
开发者ID:aerhard,项目名称:dbTagger,代码行数:17,代码来源:UITest.java
示例18: generateMilestone
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
/**
* Generates the milestone file in the specified rootDir.
*
* @param pluginWorkspaceAccess Entry point for accessing the DITA Maps area.
* @param rootMap The parent directory of the current ditamap.
* @param milestoneFile The predefined location of the milestone file.
*/
private void generateMilestone(final StandalonePluginWorkspace pluginWorkspaceAccess,
final URL rootMap,
final File milestoneFile,
final JFrame frame,
final boolean isFromAction1) {
final PluginResourceBundle resourceBundle = pluginWorkspaceAccess.getResourceBundle();
// Generate the milestone on thread.
GenerateMilestoneWorker milestoneWorker = new GenerateMilestoneWorker(rootMap);
// Install the progress tracker.
ProgressDialog.install(
milestoneWorker,
(JFrame) pluginWorkspaceAccess.getParentFrame(),
resourceBundle.getMessage(Tags.GENERATING_MILESTONE));
// This listener notifies the user about how the operation ended.
milestoneWorker.addProgressListener(new ProgressChangeAdapter() {
@Override
public void done() {
if(isFromAction1){
pluginWorkspaceAccess.showInformationMessage(resourceBundle.getMessage(Tags.ACTION1_INFO_MESSAGE) + milestoneFile.getPath());
} else {
showReportDialog(pluginWorkspaceAccess, frame, rootMap);
}
}
@Override
public void operationFailed(Exception ex) {
if(!(ex instanceof StoppedByUserException)){
pluginWorkspaceAccess.showErrorMessage(resourceBundle.getMessage(Tags.ACTION1_ERROR_MESSAGE) + ex.getMessage());
}
}
});
milestoneWorker.execute();
}
开发者ID:oxygenxml,项目名称:oxygen-dita-translation-package-builder,代码行数:43,代码来源:TranslationPackageBuilderExtension.java
示例19: generateChangeMilestone
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
/**
* Entry point. Compute a hash for each file in the given directory and store this information
* inside the directory (as a "special file").
*
*
* @param isFromTest True if this method is called by a JUnit test class.
*
* @return The "special file"(translation_builder_milestone.xml).
*
* @throws NoSuchAlgorithmException The MD5 algorithm is not available.
* @throws FileNotFoundException The file/directory doesn't exist.
* @throws IOException Problems reading the file/directory.
* @throws JAXBException Problems with JAXB, serialization/deserialization of a file.
* @throws StoppedByUserException The user pressed the "Cancel" button.
*/
public File generateChangeMilestone(
IRootResource resource,
boolean isFromTest) throws NoSuchAlgorithmException, FileNotFoundException, IOException, JAXBException, StoppedByUserException {
ArrayList<ResourceInfo> list = new ArrayList<ResourceInfo>();
// Add the root map
ResourceInfo rootResourceInfo = resource.getResourceInfo();
if (rootResourceInfo != null) {
list.add(rootResourceInfo);
}
computeResourceInfo(resource, list, new HashSet<URL>());
File milestoneFile = resource.getMilestoneFile();
/**
* TODO Adrian check functionality of the date and time of the milestone creation.
*/
long lastModified = milestoneFile.lastModified();
if (lastModified == 0) {
lastModified = new Date().getTime();
}
MilestoneUtil.storeMilestoneFile(
new InfoResources(list, new Date(lastModified)),
milestoneFile);
if(isCanceled()){
throw new StoppedByUserException();
}
if (!isFromTest) {
PluginResourceBundle resourceBundle = ((StandalonePluginWorkspace)PluginWorkspaceProvider.getPluginWorkspace()).getResourceBundle();
ProgressChangeEvent progress = new ProgressChangeEvent(resourceBundle.getMessage(Tags.CHANGE_MILESTONE_PROGRESS_TEXT) + "...");
fireChangeEvent(progress);
}
return milestoneFile;
}
开发者ID:oxygenxml,项目名称:oxygen-dita-translation-package-builder,代码行数:50,代码来源:ChangePackageGenerator.java
示例20: doInBackground
import ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace; //导入依赖的package包/类
/**
* Main task. Executed in background thread.
*
* @throws JAXBException Problems with JAXB, serialization/deserialization of a file.
* @throws NoSuchAlgorithmException The MD5 algorithm is not available.
* @throws StoppedByUserException The user pressed the Cancel button.
* @throws IOException Problems reading the file.
* @throws NoChangedFilesException No file was changed since the last generation of a milestone file.
*/
@Override
public Void doInBackground() throws IOException, StoppedByUserException, NoSuchAlgorithmException, JAXBException, NoChangedFilesException {
if(packAll){
ArchiveBuilder archiveBuilder = new ArchiveBuilder(listeners);
archiveBuilder.zipDirectory(rootDir, zipDir, false);
} else{
ChangePackageGenerator packageBuilder = new ChangePackageGenerator(listeners);
modifiedFilesNumber = packageBuilder.generateChangedFilesPackage(
rootDir,
zipDir,
modifiedResources,
false);
List<String> filesNotCopied = packageBuilder.getFilesNotCopied();
if (!filesNotCopied.isEmpty()) {
for (String relPath : filesNotCopied) {
StandalonePluginWorkspace pluginWorkspace = (StandalonePluginWorkspace) PluginWorkspaceProvider.getPluginWorkspace();
if (pluginWorkspace != null) {
pluginWorkspace.getResultsManager().
addResult(
pluginWorkspace.getResourceBundle().getMessage(Tags.TRANSLATION_PACKAGE_BUILDER_PLUIGIN_NAME),
new DocumentPositionedInfo(
DocumentPositionedInfo.SEVERITY_INFO,
"File not copied: " + relPath),
ResultType.GENERIC,
true,
false);
}
}
}
}
return null;
}
开发者ID:oxygenxml,项目名称:oxygen-dita-translation-package-builder,代码行数:46,代码来源:ZipWorker.java
注:本文中的ro.sync.exml.workspace.api.standalone.StandalonePluginWorkspace类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论