Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_39073359
jadx
提交
3578f7d6
J
jadx
项目概览
qq_39073359
/
jadx
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jadx
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3578f7d6
编写于
8月 11, 2019
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(gui): use editor font on tabs
上级
7bc01dcf
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
164 addition
and
124 deletion
+164
-124
jadx-gui/src/main/java/jadx/gui/ui/TabComponent.java
jadx-gui/src/main/java/jadx/gui/ui/TabComponent.java
+153
-0
jadx-gui/src/main/java/jadx/gui/ui/TabbedPane.java
jadx-gui/src/main/java/jadx/gui/ui/TabbedPane.java
+11
-124
未找到文件。
jadx-gui/src/main/java/jadx/gui/ui/TabComponent.java
0 → 100644
浏览文件 @
3578f7d6
package
jadx.gui.ui
;
import
java.awt.*
;
import
java.awt.event.MouseAdapter
;
import
java.awt.event.MouseEvent
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
javax.swing.*
;
import
javax.swing.plaf.basic.BasicButtonUI
;
import
jadx.gui.treemodel.JClass
;
import
jadx.gui.treemodel.JNode
;
import
jadx.gui.utils.NLS
;
import
jadx.gui.utils.UiUtils
;
public
class
TabComponent
extends
JPanel
{
private
static
final
long
serialVersionUID
=
-
8147035487543610321L
;
private
static
final
ImageIcon
ICON_CLOSE
=
UiUtils
.
openIcon
(
"cross"
);
private
static
final
ImageIcon
ICON_CLOSE_INACTIVE
=
UiUtils
.
openIcon
(
"cross_grayed"
);
private
final
TabbedPane
tabbedPane
;
private
final
ContentPanel
contentPanel
;
private
JLabel
label
;
public
TabComponent
(
TabbedPane
tabbedPane
,
ContentPanel
contentPanel
)
{
this
.
tabbedPane
=
tabbedPane
;
this
.
contentPanel
=
contentPanel
;
init
();
}
public
void
loadSettings
()
{
label
.
setFont
(
getLabelFont
());
}
private
Font
getLabelFont
()
{
return
tabbedPane
.
getMainWindow
().
getSettings
().
getFont
().
deriveFont
(
Font
.
BOLD
);
}
private
void
init
()
{
JPanel
panel
=
this
;
panel
.
setLayout
(
new
FlowLayout
(
FlowLayout
.
CENTER
,
3
,
0
));
panel
.
setOpaque
(
false
);
JNode
node
=
contentPanel
.
getNode
();
label
=
new
JLabel
(
node
.
makeLongString
());
label
.
setFont
(
getLabelFont
());
String
toolTip
=
contentPanel
.
getTabTooltip
();
if
(
toolTip
!=
null
)
{
label
.
setToolTipText
(
toolTip
);
}
label
.
setBorder
(
BorderFactory
.
createEmptyBorder
(
0
,
0
,
0
,
10
));
label
.
setIcon
(
node
.
getIcon
());
final
JButton
closeBtn
=
new
JButton
();
closeBtn
.
setIcon
(
ICON_CLOSE_INACTIVE
);
closeBtn
.
setRolloverIcon
(
ICON_CLOSE
);
closeBtn
.
setRolloverEnabled
(
true
);
closeBtn
.
setOpaque
(
false
);
closeBtn
.
setUI
(
new
BasicButtonUI
());
closeBtn
.
setContentAreaFilled
(
false
);
closeBtn
.
setFocusable
(
false
);
closeBtn
.
setBorder
(
null
);
closeBtn
.
setBorderPainted
(
false
);
closeBtn
.
addActionListener
(
e
->
tabbedPane
.
closeCodePanel
(
contentPanel
));
MouseAdapter
clickAdapter
=
new
MouseAdapter
()
{
@Override
public
void
mouseClicked
(
MouseEvent
e
)
{
if
(
SwingUtilities
.
isMiddleMouseButton
(
e
))
{
tabbedPane
.
closeCodePanel
(
contentPanel
);
}
else
if
(
SwingUtilities
.
isRightMouseButton
(
e
))
{
JPopupMenu
menu
=
createTabPopupMenu
(
contentPanel
);
menu
.
show
(
e
.
getComponent
(),
e
.
getX
(),
e
.
getY
());
}
else
if
(
SwingUtilities
.
isLeftMouseButton
(
e
))
{
if
(
tabbedPane
.
getSelectedComponent
()
!=
contentPanel
)
{
tabbedPane
.
setSelectedComponent
(
contentPanel
);
}
}
}
};
panel
.
addMouseListener
(
clickAdapter
);
label
.
addMouseListener
(
clickAdapter
);
closeBtn
.
addMouseListener
(
clickAdapter
);
panel
.
add
(
label
);
panel
.
add
(
closeBtn
);
panel
.
setBorder
(
BorderFactory
.
createEmptyBorder
(
4
,
0
,
0
,
0
));
}
private
JPopupMenu
createTabPopupMenu
(
final
ContentPanel
contentPanel
)
{
JPopupMenu
menu
=
new
JPopupMenu
();
String
nodeFullName
=
getNodeFullName
(
contentPanel
);
if
(
nodeFullName
!=
null
)
{
JMenuItem
copyRootClassName
=
new
JMenuItem
(
NLS
.
str
(
"tabs.copy_class_name"
));
copyRootClassName
.
addActionListener
(
actionEvent
->
UiUtils
.
setClipboardString
(
nodeFullName
));
menu
.
add
(
copyRootClassName
);
menu
.
addSeparator
();
}
JMenuItem
closeTab
=
new
JMenuItem
(
NLS
.
str
(
"tabs.close"
));
closeTab
.
addActionListener
(
e
->
tabbedPane
.
closeCodePanel
(
contentPanel
));
menu
.
add
(
closeTab
);
Map
<
JNode
,
ContentPanel
>
openTabs
=
tabbedPane
.
getOpenTabs
();
if
(
openTabs
.
size
()
>
1
)
{
JMenuItem
closeOther
=
new
JMenuItem
(
NLS
.
str
(
"tabs.closeOthers"
));
closeOther
.
addActionListener
(
e
->
{
List
<
ContentPanel
>
contentPanels
=
new
ArrayList
<>(
openTabs
.
values
());
for
(
ContentPanel
panel
:
contentPanels
)
{
if
(
panel
!=
contentPanel
)
{
tabbedPane
.
closeCodePanel
(
panel
);
}
}
});
menu
.
add
(
closeOther
);
JMenuItem
closeAll
=
new
JMenuItem
(
NLS
.
str
(
"tabs.closeAll"
));
closeAll
.
addActionListener
(
e
->
tabbedPane
.
closeAllTabs
());
menu
.
add
(
closeAll
);
menu
.
addSeparator
();
ContentPanel
selectedContentPanel
=
tabbedPane
.
getSelectedCodePanel
();
for
(
final
Map
.
Entry
<
JNode
,
ContentPanel
>
entry
:
openTabs
.
entrySet
())
{
final
ContentPanel
cp
=
entry
.
getValue
();
if
(
cp
==
selectedContentPanel
)
{
continue
;
}
JNode
node
=
entry
.
getKey
();
final
String
clsName
=
node
.
makeLongString
();
JMenuItem
item
=
new
JMenuItem
(
clsName
);
item
.
addActionListener
(
e
->
tabbedPane
.
setSelectedComponent
(
cp
));
item
.
setIcon
(
node
.
getIcon
());
menu
.
add
(
item
);
}
}
return
menu
;
}
private
String
getNodeFullName
(
ContentPanel
contentPanel
)
{
JNode
node
=
contentPanel
.
getNode
();
JClass
jClass
=
node
.
getRootClass
();
if
(
jClass
!=
null
)
{
return
jClass
.
getFullName
();
}
return
node
.
getName
();
}
}
jadx-gui/src/main/java/jadx/gui/ui/TabbedPane.java
浏览文件 @
3578f7d6
package
jadx.gui.ui
;
import
java.awt.*
;
import
java.awt.event.MouseAdapter
;
import
java.awt.event.MouseEvent
;
import
java.util.ArrayList
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
import
javax.swing.*
;
import
javax.swing.plaf.basic.BasicButtonUI
;
import
javax.swing.text.BadLocationException
;
import
org.jetbrains.annotations.Nullable
;
...
...
@@ -19,7 +16,6 @@ import org.slf4j.LoggerFactory;
import
jadx.api.ResourceFile
;
import
jadx.api.ResourceType
;
import
jadx.gui.treemodel.ApkSignature
;
import
jadx.gui.treemodel.JClass
;
import
jadx.gui.treemodel.JNode
;
import
jadx.gui.treemodel.JResource
;
import
jadx.gui.ui.codearea.AbstractCodeArea
;
...
...
@@ -28,17 +24,12 @@ import jadx.gui.ui.codearea.ClassCodeContentPanel;
import
jadx.gui.ui.codearea.CodeContentPanel
;
import
jadx.gui.utils.JumpManager
;
import
jadx.gui.utils.JumpPosition
;
import
jadx.gui.utils.NLS
;
import
jadx.gui.utils.UiUtils
;
public
class
TabbedPane
extends
JTabbedPane
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
TabbedPane
.
class
);
private
static
final
long
serialVersionUID
=
-
8833600618794570904L
;
private
static
final
ImageIcon
ICON_CLOSE
=
UiUtils
.
openIcon
(
"cross"
);
private
static
final
ImageIcon
ICON_CLOSE_INACTIVE
=
UiUtils
.
openIcon
(
"cross_grayed"
);
private
final
transient
MainWindow
mainWindow
;
private
final
transient
Map
<
JNode
,
ContentPanel
>
openTabs
=
new
LinkedHashMap
<>();
private
final
transient
JumpManager
jumps
=
new
JumpManager
();
...
...
@@ -141,7 +132,7 @@ public class TabbedPane extends JTabbedPane {
add
(
contentPanel
);
}
p
rivate
void
closeCodePanel
(
ContentPanel
contentPanel
)
{
p
ublic
void
closeCodePanel
(
ContentPanel
contentPanel
)
{
openTabs
.
remove
(
contentPanel
.
getNode
());
remove
(
contentPanel
);
}
...
...
@@ -186,100 +177,7 @@ public class TabbedPane extends JTabbedPane {
}
private
Component
makeTabComponent
(
final
ContentPanel
contentPanel
)
{
JNode
node
=
contentPanel
.
getNode
();
String
name
=
node
.
makeLongString
();
final
JPanel
panel
=
new
JPanel
(
new
FlowLayout
(
FlowLayout
.
CENTER
,
3
,
0
));
panel
.
setOpaque
(
false
);
final
JLabel
label
=
new
JLabel
(
name
);
String
toolTip
=
contentPanel
.
getTabTooltip
();
if
(
toolTip
!=
null
)
{
label
.
setToolTipText
(
toolTip
);
}
label
.
setBorder
(
BorderFactory
.
createEmptyBorder
(
0
,
0
,
0
,
10
));
label
.
setIcon
(
node
.
getIcon
());
final
JButton
button
=
new
JButton
();
button
.
setIcon
(
ICON_CLOSE_INACTIVE
);
button
.
setRolloverIcon
(
ICON_CLOSE
);
button
.
setRolloverEnabled
(
true
);
button
.
setOpaque
(
false
);
button
.
setUI
(
new
BasicButtonUI
());
button
.
setContentAreaFilled
(
false
);
button
.
setFocusable
(
false
);
button
.
setBorder
(
null
);
button
.
setBorderPainted
(
false
);
button
.
addActionListener
(
e
->
closeCodePanel
(
contentPanel
));
MouseAdapter
clickAdapter
=
new
MouseAdapter
()
{
@Override
public
void
mouseClicked
(
MouseEvent
e
)
{
if
(
SwingUtilities
.
isMiddleMouseButton
(
e
))
{
closeCodePanel
(
contentPanel
);
}
else
if
(
SwingUtilities
.
isRightMouseButton
(
e
))
{
JPopupMenu
menu
=
createTabPopupMenu
(
contentPanel
);
menu
.
show
(
panel
,
e
.
getX
(),
e
.
getY
());
}
else
{
setSelectedComponent
(
contentPanel
);
}
}
};
panel
.
addMouseListener
(
clickAdapter
);
label
.
addMouseListener
(
clickAdapter
);
panel
.
add
(
label
);
panel
.
add
(
button
);
panel
.
setBorder
(
BorderFactory
.
createEmptyBorder
(
4
,
0
,
0
,
0
));
return
panel
;
}
private
JPopupMenu
createTabPopupMenu
(
final
ContentPanel
contentPanel
)
{
JPopupMenu
menu
=
new
JPopupMenu
();
if
(
getNodeFullName
()
!=
null
)
{
JMenuItem
copyRootClassName
=
new
JMenuItem
(
NLS
.
str
(
"tabs.copy_class_name"
));
copyRootClassName
.
addActionListener
(
actionEvent
->
copyRootClassName
());
menu
.
add
(
copyRootClassName
);
menu
.
addSeparator
();
}
JMenuItem
closeTab
=
new
JMenuItem
(
NLS
.
str
(
"tabs.close"
));
closeTab
.
addActionListener
(
e
->
closeCodePanel
(
contentPanel
));
menu
.
add
(
closeTab
);
if
(
openTabs
.
size
()
>
1
)
{
JMenuItem
closeOther
=
new
JMenuItem
(
NLS
.
str
(
"tabs.closeOthers"
));
closeOther
.
addActionListener
(
e
->
{
List
<
ContentPanel
>
contentPanels
=
new
ArrayList
<>(
openTabs
.
values
());
for
(
ContentPanel
panel
:
contentPanels
)
{
if
(
panel
!=
contentPanel
)
{
closeCodePanel
(
panel
);
}
}
});
menu
.
add
(
closeOther
);
JMenuItem
closeAll
=
new
JMenuItem
(
NLS
.
str
(
"tabs.closeAll"
));
closeAll
.
addActionListener
(
e
->
closeAllTabs
());
menu
.
add
(
closeAll
);
menu
.
addSeparator
();
ContentPanel
selectedContentPanel
=
getSelectedCodePanel
();
for
(
final
Map
.
Entry
<
JNode
,
ContentPanel
>
entry
:
openTabs
.
entrySet
())
{
final
ContentPanel
cp
=
entry
.
getValue
();
if
(
cp
==
selectedContentPanel
)
{
continue
;
}
JNode
node
=
entry
.
getKey
();
final
String
clsName
=
node
.
makeLongString
();
JMenuItem
item
=
new
JMenuItem
(
clsName
);
item
.
addActionListener
(
e
->
setSelectedComponent
(
cp
));
item
.
setIcon
(
node
.
getIcon
());
menu
.
add
(
item
);
}
}
return
menu
;
return
new
TabComponent
(
this
,
contentPanel
);
}
public
void
closeAllTabs
()
{
...
...
@@ -289,31 +187,20 @@ public class TabbedPane extends JTabbedPane {
}
}
public
void
copyRootClassName
()
{
String
name
=
getNodeFullName
();
if
(
name
!=
null
)
{
UiUtils
.
setClipboardString
(
name
);
}
}
@Nullable
private
String
getNodeFullName
()
{
ContentPanel
selectedPanel
=
getSelectedCodePanel
();
if
(
selectedPanel
!=
null
)
{
JNode
node
=
selectedPanel
.
getNode
();
JClass
jClass
=
node
.
getRootClass
();
if
(
jClass
!=
null
)
{
return
jClass
.
getFullName
();
}
else
{
return
node
.
getName
();
}
}
return
null
;
public
Map
<
JNode
,
ContentPanel
>
getOpenTabs
()
{
return
openTabs
;
}
public
void
loadSettings
()
{
for
(
ContentPanel
panel
:
openTabs
.
values
())
{
panel
.
loadSettings
();
}
int
tabCount
=
getTabCount
();
for
(
int
i
=
0
;
i
<
tabCount
;
i
++)
{
Component
tabComponent
=
getTabComponentAt
(
i
);
if
(
tabComponent
instanceof
TabComponent
)
{
((
TabComponent
)
tabComponent
).
loadSettings
();
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录