import * as vscode from "vscode"; import { getWebviewContent } from "./webviewContent"; import { handleUserMessage, insertCodeToEditor, handleReadFile, handleCreateFile, } from "../utils/messageHandler"; /** * 创建并显示IC 侧边栏视图 */ export function showICHelperPanel(content: vscode.ExtensionContext) { // 创建WebView面板 const panel = vscode.window.createWebviewPanel( "icCoder", // 面板ID "IC Coder", // 面板标题 vscode.ViewColumn.Beside, // 显示在旁边 { enableScripts: true, retainContextWhenHidden: true, localResourceRoots: [vscode.Uri.joinPath(content.extensionUri, "media")], } ); // 设置标签页图标 panel.iconPath = vscode.Uri.joinPath( content.extensionUri, "media", "图案(方底).png" ); // 获取页面内图标URI const iconUri = panel.webview.asWebviewUri( vscode.Uri.joinPath(content.extensionUri, "media", "图案(方底).png") ); // 设置HTML内容 panel.webview.html = getWebviewContent(iconUri.toString()); // 处理消息 panel.webview.onDidReceiveMessage( (message) => { switch (message.command) { case "sendMessage": handleUserMessage(panel, message.text); break; case "readFile": handleReadFile(panel, message.filePath); break; case "insertCode": insertCodeToEditor(message.code); break; case "createFile": handleCreateFile( panel, message.filePath, message.content, message.overwrite ); break; case "showInfo": vscode.window.showInformationMessage(message.text); break; } }, undefined, content.subscriptions ); } /** * 侧边栏视图提供者 */ export class ICViewProvider implements vscode.WebviewViewProvider { constructor(private readonly extensionUri: vscode.Uri) {} resolveWebviewView(webviewView: vscode.WebviewView) { webviewView.webview.options = { enableScripts: true, localResourceRoots: [vscode.Uri.joinPath(this.extensionUri, "media")], }; webviewView.webview.html = this.getWebviewContent(webviewView.webview); // 处理侧边栏的消息 webviewView.webview.onDidReceiveMessage((message) => { if (message.command === "openChat") { vscode.commands.executeCommand("ic-coder.openChat"); } }); } private getWebviewContent(webview: vscode.Webview): string { const logoUri = webview.asWebviewUri( vscode.Uri.joinPath(this.extensionUri, "media", "ICCoder主页标志.png") ); return `