Skip to content

Commit

Permalink
Provide action to create new terminal widget + some refactoring
Browse files Browse the repository at this point in the history
When tab is moved to IntelliJ editor pane we want be able to create a new
widget detached from the terminal tabs.
  • Loading branch information
trofimander committed Aug 10, 2018
1 parent bd47ce5 commit 3fe7cea
Show file tree
Hide file tree
Showing 9 changed files with 136 additions and 105 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@
import com.intellij.ui.tabs.impl.JBTabsImpl;
import com.intellij.ui.tabs.impl.TabLabel;
import com.intellij.util.ui.UIUtil;
import com.jediterm.terminal.ui.*;
import com.jediterm.terminal.ui.AbstractTabbedTerminalWidget;
import com.jediterm.terminal.ui.AbstractTabs;
import com.jediterm.terminal.ui.TerminalAction;
import com.jediterm.terminal.ui.TerminalWidget;
import com.jediterm.terminal.ui.settings.TabbedSettingsProvider;
import org.jetbrains.annotations.NotNull;

Expand All @@ -22,45 +25,39 @@
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.function.Function;

/**
* @author traff
*/
public class JediTabbedTerminalWidget extends TabbedTerminalWidget implements Disposable {
public class JediTabbedTerminalWidget extends AbstractTabbedTerminalWidget<JediTerminalWidget> implements Disposable {

private final TabbedSettingsProvider mySettingsProvider;
private Disposable myParent;

public JediTabbedTerminalWidget(@NotNull TabbedSettingsProvider settingsProvider,
final @NotNull Predicate<Pair<TerminalWidget, String>> createNewSessionAction, @NotNull Disposable parent) {
super(settingsProvider, new Predicate<TerminalWidget>() {
@Override
public boolean apply(TerminalWidget input) {
return createNewSessionAction.apply(Pair.<TerminalWidget, String>create(input, null));
}
});
final @NotNull Function<Pair<TerminalWidget, String>, JediTerminalWidget> createNewSessionAction, @NotNull Disposable parent) {
super(settingsProvider, input -> createNewSessionAction.apply(Pair.create(input, null)));

mySettingsProvider = settingsProvider;
myParent = parent;


Disposer.register(parent, this);
// Disposer.register(this, settingsProvider);

}


@Override
protected JediTermWidget createInnerTerminalWidget(TabbedSettingsProvider settingsProvider) {
public JediTerminalWidget createInnerTerminalWidget() {
return new JediTerminalWidget(mySettingsProvider, myParent);
}

@Override
protected TerminalTabs createTabbedPane() {
protected JediTerminalTabs createTabbedPane() {
return new JediTerminalTabs(myParent);
}

public class JediTerminalTabs implements TerminalTabs {
public class JediTerminalTabs implements AbstractTabs<JediTerminalWidget> {
private final JBEditorTabs myTabs;

private final CopyOnWriteArraySet<TabChangeListener> myListeners = new CopyOnWriteArraySet<>();
Expand Down Expand Up @@ -137,8 +134,8 @@ private void checkIndex(int index) {


@Override
public JediTermWidget getComponentAt(int i) {
return (JediTermWidget)getTabAt(i).getComponent();
public JediTerminalWidget getComponentAt(int i) {
return (JediTerminalWidget)getTabAt(i).getComponent();
}

@Override
Expand All @@ -152,7 +149,7 @@ public void setTitleAt(int index, String title) {
}

@Override
public void setSelectedComponent(JediTermWidget terminal) {
public void setSelectedComponent(JediTerminalWidget terminal) {
TabInfo info = myTabs.findInfo(terminal);
if (info != null) {
myTabs.select(info, true);
Expand All @@ -170,11 +167,11 @@ public int getTabCount() {
}

@Override
public void addTab(String name, JediTermWidget terminal) {
public void addTab(String name, JediTerminalWidget terminal) {
myTabs.addTab(createTabInfo(name, terminal));
}

private TabInfo createTabInfo(String name, JediTermWidget terminal) {
private TabInfo createTabInfo(String name, JediTerminalWidget terminal) {
TabInfo tabInfo = new TabInfo(terminal).setText(name);
return tabInfo;
}
Expand All @@ -188,7 +185,7 @@ public void removeAll() {
}

@Override
public void remove(JediTermWidget terminal) {
public void remove(JediTerminalWidget terminal) {
TabInfo info = myTabs.findInfo(terminal);
if (info != null) {
myTabs.removeTab(info);
Expand Down
22 changes: 8 additions & 14 deletions JediTerm/src/main/kotlin/com/jediterm/app/JediTermMain.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,20 @@ import com.intellij.util.EncodingEnvironmentUtil
import com.jediterm.pty.PtyProcessTtyConnector
import com.jediterm.terminal.LoggingTtyConnector
import com.jediterm.terminal.TtyConnector
import com.jediterm.terminal.model.StyleState
import com.jediterm.terminal.model.TerminalTextBuffer
import com.jediterm.terminal.ui.*
import com.jediterm.terminal.ui.AbstractTerminalFrame
import com.jediterm.terminal.ui.TerminalWidget
import com.jediterm.terminal.ui.UIUtil
import com.jediterm.terminal.ui.settings.DefaultTabbedSettingsProvider
import com.jediterm.terminal.ui.settings.SettingsProvider
import com.jediterm.terminal.ui.settings.TabbedSettingsProvider
import com.pty4j.PtyProcess
import org.apache.log4j.BasicConfigurator
import org.apache.log4j.ConsoleAppender
import org.apache.log4j.Level
import org.apache.log4j.Logger
import java.awt.KeyboardFocusManager
import java.io.IOException
import java.nio.charset.Charset
import java.util.*
import java.util.function.Function

/**
* Created by traff on 22/08/16.
Expand Down Expand Up @@ -68,14 +67,9 @@ class JediTerm : AbstractTerminalFrame(), Disposable {
// TODO
}

override fun createTabbedTerminalWidget(): TabbedTerminalWidget {
return object : JediTabbedTerminalWidget(DefaultTabbedSettingsProvider(), object : Predicate<Pair<TerminalWidget, String>> {
override fun apply(pair: Pair<TerminalWidget, String>?): Boolean {
openSession(pair?.first)
return true
}
}, this) {
override fun createInnerTerminalWidget(settingsProvider: TabbedSettingsProvider): JediTermWidget {
override fun createTabbedTerminalWidget(): JediTabbedTerminalWidget {
return object : JediTabbedTerminalWidget(DefaultTabbedSettingsProvider(), Function<Pair<TerminalWidget, String>, JediTerminalWidget> { pair -> openSession(pair?.first) as JediTerminalWidget }, this) {
override fun createInnerTerminalWidget(): JediTerminalWidget {
return createTerminalWidget(settingsProvider)
}
}
Expand Down Expand Up @@ -109,7 +103,7 @@ class JediTerm : AbstractTerminalFrame(), Disposable {

}

override fun createTerminalWidget(settingsProvider: TabbedSettingsProvider): JediTermWidget {
override fun createTerminalWidget(settingsProvider: TabbedSettingsProvider): JediTerminalWidget {
val widget = JediTerminalWidget(settingsProvider, this)
widget.addHyperlinkFilter(UrlFilter())
return widget
Expand Down
26 changes: 26 additions & 0 deletions terminal/src/com/jediterm/terminal/TabbedTerminalWidget.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.jediterm.terminal;

import com.jediterm.terminal.ui.*;
import com.jediterm.terminal.ui.settings.TabbedSettingsProvider;
import org.jetbrains.annotations.NotNull;

import java.util.function.Function;

/**
* @author traff
*/
public class TabbedTerminalWidget extends AbstractTabbedTerminalWidget<JediTermWidget> {
public TabbedTerminalWidget(@NotNull TabbedSettingsProvider settingsProvider, @NotNull Function<AbstractTabbedTerminalWidget, JediTermWidget> createNewSessionAction) {
super(settingsProvider, createNewSessionAction::apply);
}

@Override
public JediTermWidget createInnerTerminalWidget() {
return new JediTermWidget(getSettingsProvider());
}

@Override
protected AbstractTabs<JediTermWidget> createTabbedPane() {
return new TerminalTabsImpl();
}
}
Loading

0 comments on commit 3fe7cea

Please sign in to comment.