mirror of
https://github.com/wavetermdev/backup.git
synced 2026-08-05 13:57:07 -07:00
implement new session and switch session
This commit is contained in:
@@ -110,4 +110,18 @@ electron.ipcMain.on("get-id", (event) => {
|
||||
return;
|
||||
});
|
||||
|
||||
function getContextMenu() : any {
|
||||
let menu = new electron.Menu();
|
||||
let menuItem = new electron.MenuItem({label: "Testing", click: () => console.log("click testing!")});
|
||||
menu.append(menuItem);
|
||||
return menu;
|
||||
}
|
||||
|
||||
electron.ipcMain.on("context-screen", (event, {screenId}, {x, y}) => {
|
||||
console.log("context-screen", screenId);
|
||||
let menu = getContextMenu();
|
||||
menu.popup({x, y});
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
+19
-3
@@ -235,6 +235,11 @@ class CmdInput extends React.Component<{}, {}> {
|
||||
setTimeout(() => this.doSubmitCmd(), 0);
|
||||
return;
|
||||
}
|
||||
if (e.code == "Tab") {
|
||||
e.preventDefault();
|
||||
this.setCurLine(this.getCurLine() + "[tab]");
|
||||
return;
|
||||
}
|
||||
if (e.code == "ArrowUp") {
|
||||
e.preventDefault();
|
||||
let hidx = this.historyIndex.get();
|
||||
@@ -561,6 +566,13 @@ class ScreenTabs extends React.Component<{session : Session}, {}> {
|
||||
}
|
||||
GlobalInput.switchScreen(screenId);
|
||||
}
|
||||
|
||||
handleContextMenu(e : any, screenId : string) : void {
|
||||
e.preventDefault();
|
||||
console.log("handle context menu!", screenId);
|
||||
let model = GlobalModel;
|
||||
model.contextScreen(screenId);
|
||||
}
|
||||
|
||||
render() {
|
||||
let {session} = this.props;
|
||||
@@ -572,7 +584,7 @@ class ScreenTabs extends React.Component<{session : Session}, {}> {
|
||||
return (
|
||||
<div className="screen-tabs">
|
||||
<For each="screen" index="index" of={session.screens}>
|
||||
<div key={screen.screenId} className={cn("screen-tab", {"is-active": session.activeScreenId.get() == screen.screenId})} onClick={() => this.handleSwitchScreen(screen.screenId)}>
|
||||
<div key={screen.screenId} className={cn("screen-tab", {"is-active": session.activeScreenId.get() == screen.screenId})} onClick={() => this.handleSwitchScreen(screen.screenId)} onContextMenu={(event) => this.handleContextMenu(event, screen.screenId)}>
|
||||
{screen.name.get()}
|
||||
<If condition={index+1 <= 9}>
|
||||
<div className="tab-index">⌘{index+1}</div>
|
||||
@@ -618,7 +630,11 @@ class MainSideBar extends React.Component<{}, {}> {
|
||||
}
|
||||
|
||||
handleSessionClick(sessionId : string) {
|
||||
console.log("click session", sessionId);
|
||||
GlobalInput.switchSession(sessionId);
|
||||
}
|
||||
|
||||
handleNewSession() {
|
||||
GlobalInput.createNewSession();
|
||||
}
|
||||
|
||||
render() {
|
||||
@@ -645,7 +661,7 @@ class MainSideBar extends React.Component<{}, {}> {
|
||||
<For each="session" of={model.sessionList}>
|
||||
<li key={session.sessionId}><a className={cn({"is-active": activeSessionId == session.sessionId})} onClick={() => this.handleSessionClick(session.sessionId)}>#{session.name.get()}</a></li>
|
||||
</For>
|
||||
<li className="new-session"><a className="new-session"><i className="fa fa-plus"/> New Session</a></li>
|
||||
<li className="new-session"><a className="new-session" onClick={() => this.handleNewSession()}><i className="fa fa-plus"/> New Session</a></li>
|
||||
</If>
|
||||
</ul>
|
||||
<p className="menu-label">
|
||||
|
||||
+38
-7
@@ -30,6 +30,7 @@ type ElectronApi = {
|
||||
onICmd : (callback : (mods : KeyModsType) => void) => void,
|
||||
onBracketCmd : (callback : (event : any, arg : {relative : number}, mods : KeyModsType) => void) => void,
|
||||
onDigitCmd : (callback : (event : any, arg : {digit : number}, mods : KeyModsType) => void) => void,
|
||||
contextScreen : (screenId : string) => void,
|
||||
};
|
||||
|
||||
function getApi() : ElectronApi {
|
||||
@@ -513,6 +514,11 @@ class Model {
|
||||
getApi().onDigitCmd(this.onDigitCmd.bind(this));
|
||||
}
|
||||
|
||||
contextScreen(e : any, screenId : string) {
|
||||
console.log("model", screenId);
|
||||
getApi().contextScreen({screenId: screenId}, {x: e.x, y: e.y});
|
||||
}
|
||||
|
||||
onTCmd(mods : KeyModsType) {
|
||||
console.log("got cmd-t", mods);
|
||||
GlobalInput.createNewScreen();
|
||||
@@ -562,13 +568,18 @@ class Model {
|
||||
mobx.action(() => {
|
||||
let oldActiveScreen = this.getActiveScreen();
|
||||
genMergeData(this.sessionList, sessionUpdateMsg.sessions, (s : Session) => s.sessionId, (sdata : SessionDataType) => sdata.sessionid, (sdata : SessionDataType) => new Session(sdata), (s : Session) => s.sessionIdx.get());
|
||||
let newActiveScreen = this.getActiveScreen();
|
||||
if (oldActiveScreen != newActiveScreen) {
|
||||
if (newActiveScreen == null) {
|
||||
this.activateScreen(this.activeSessionId.get(), null, oldActiveScreen);
|
||||
}
|
||||
else {
|
||||
this.activateScreen(newActiveScreen.sessionId, newActiveScreen.screenId, oldActiveScreen);
|
||||
if (update.activesessionid) {
|
||||
this.activateSession(update.activesessionid);
|
||||
}
|
||||
else {
|
||||
let newActiveScreen = this.getActiveScreen();
|
||||
if (oldActiveScreen != newActiveScreen) {
|
||||
if (newActiveScreen == null) {
|
||||
this.activateScreen(this.activeSessionId.get(), null, oldActiveScreen);
|
||||
}
|
||||
else {
|
||||
this.activateScreen(newActiveScreen.sessionId, newActiveScreen.screenId, oldActiveScreen);
|
||||
}
|
||||
}
|
||||
}
|
||||
})();
|
||||
@@ -749,6 +760,18 @@ class Model {
|
||||
});
|
||||
}
|
||||
|
||||
activateSession(sessionId : string) {
|
||||
let oldActiveSession = this.getActiveSession();
|
||||
if (oldActiveSession.sessionId == sessionId) {
|
||||
return;
|
||||
}
|
||||
let newSession = this.getSessionById(sessionId);
|
||||
if (newSession == null) {
|
||||
return;
|
||||
}
|
||||
this.activateScreen(sessionId, newSession.activeScreenId.get());
|
||||
}
|
||||
|
||||
activateScreen(sessionId : string, screenId : string, oldActiveScreen? : Screen) {
|
||||
if (!oldActiveScreen) {
|
||||
oldActiveScreen = this.getActiveScreen();
|
||||
@@ -842,10 +865,18 @@ class InputClass {
|
||||
constructor() {
|
||||
}
|
||||
|
||||
switchSession(session : string) {
|
||||
GlobalModel.submitCommand("session", null, [session], null);
|
||||
}
|
||||
|
||||
switchScreen(screen : string) {
|
||||
GlobalModel.submitCommand("screen", null, [screen], null);
|
||||
}
|
||||
|
||||
createNewSession() {
|
||||
GlobalModel.submitCommand("session", "open", null, null);
|
||||
}
|
||||
|
||||
createNewScreen() {
|
||||
GlobalModel.submitCommand("screen", "open", null, null);
|
||||
}
|
||||
|
||||
@@ -6,4 +6,5 @@ contextBridge.exposeInMainWorld("api", {
|
||||
onICmd: (callback) => ipcRenderer.on("i-cmd", callback),
|
||||
onBracketCmd: (callback) => ipcRenderer.on("bracket-cmd", callback),
|
||||
onDigitCmd: (callback) => ipcRenderer.on("digit-cmd", callback),
|
||||
contextScreen: (screenOpts, position) => ipcRenderer.send("context-screen", screenOpts, position),
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user