Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
keyescgm
jadx
提交
94b00b4e
J
jadx
项目概览
keyescgm
/
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,发现更多精彩内容 >>
未验证
提交
94b00b4e
编写于
10月 20, 2021
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat(gui): add option to change line numbers mode (#1223)
上级
48252c3c
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
84 addition
and
18 deletion
+84
-18
jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java
jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java
+9
-0
jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java
...i/src/main/java/jadx/gui/settings/JadxSettingsWindow.java
+8
-0
jadx-gui/src/main/java/jadx/gui/settings/LineNumbersMode.java
...-gui/src/main/java/jadx/gui/settings/LineNumbersMode.java
+8
-0
jadx-gui/src/main/java/jadx/gui/ui/codearea/CodePanel.java
jadx-gui/src/main/java/jadx/gui/ui/codearea/CodePanel.java
+44
-17
jadx-gui/src/main/java/jadx/gui/ui/codearea/LineNumbers.java
jadx-gui/src/main/java/jadx/gui/ui/codearea/LineNumbers.java
+10
-1
jadx-gui/src/main/resources/i18n/Messages_de_DE.properties
jadx-gui/src/main/resources/i18n/Messages_de_DE.properties
+1
-0
jadx-gui/src/main/resources/i18n/Messages_en_US.properties
jadx-gui/src/main/resources/i18n/Messages_en_US.properties
+1
-0
jadx-gui/src/main/resources/i18n/Messages_es_ES.properties
jadx-gui/src/main/resources/i18n/Messages_es_ES.properties
+1
-0
jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties
jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties
+1
-0
jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties
jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties
+1
-0
未找到文件。
jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java
浏览文件 @
94b00b4e
...
...
@@ -78,6 +78,7 @@ public class JadxSettings extends JadxCLIArgs {
private
String
srhResourceFileExt
=
".xml|.html|.js|.json|.txt"
;
private
boolean
keepCommonDialogOpen
=
false
;
private
boolean
smaliAreaShowBytecode
=
false
;
private
LineNumbersMode
lineNumbersMode
=
LineNumbersMode
.
AUTO
;
private
int
mainWindowVerticalSplitterLoc
=
300
;
private
int
debuggerStackFrameSplitterLoc
=
300
;
...
...
@@ -556,6 +557,14 @@ public class JadxSettings extends JadxCLIArgs {
this
.
commentsLevel
=
level
;
}
public
LineNumbersMode
getLineNumbersMode
()
{
return
lineNumbersMode
;
}
public
void
setLineNumbersMode
(
LineNumbersMode
lineNumbersMode
)
{
this
.
lineNumbersMode
=
lineNumbersMode
;
}
private
void
upgradeSettings
(
int
fromVersion
)
{
LOG
.
debug
(
"upgrade settings from version: {} to {}"
,
fromVersion
,
CURRENT_SETTINGS_VERSION
);
if
(
fromVersion
==
0
)
{
...
...
jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java
浏览文件 @
94b00b4e
...
...
@@ -537,6 +537,13 @@ public class JadxSettingsWindow extends JDialog {
}
languageCbx
.
addActionListener
(
e
->
settings
.
setLangLocale
((
LangLocale
)
languageCbx
.
getSelectedItem
()));
JComboBox
<
LineNumbersMode
>
lineNumbersMode
=
new
JComboBox
<>(
LineNumbersMode
.
values
());
lineNumbersMode
.
setSelectedItem
(
settings
.
getLineNumbersMode
());
lineNumbersMode
.
addActionListener
(
e
->
{
settings
.
setLineNumbersMode
((
LineNumbersMode
)
lineNumbersMode
.
getSelectedItem
());
mainWindow
.
loadSettings
();
});
JCheckBox
update
=
new
JCheckBox
();
update
.
setSelected
(
settings
.
isCheckForUpdates
());
update
.
addItemListener
(
e
->
settings
.
setCheckForUpdates
(
e
.
getStateChange
()
==
ItemEvent
.
SELECTED
));
...
...
@@ -557,6 +564,7 @@ public class JadxSettingsWindow extends JDialog {
SettingsGroup
group
=
new
SettingsGroup
(
NLS
.
str
(
"preferences.other"
));
group
.
addRow
(
NLS
.
str
(
"preferences.language"
),
languageCbx
);
group
.
addRow
(
NLS
.
str
(
"preferences.lineNumbersMode"
),
lineNumbersMode
);
group
.
addRow
(
NLS
.
str
(
"preferences.check_for_updates"
),
update
);
group
.
addRow
(
NLS
.
str
(
"preferences.cfg"
),
cfg
);
group
.
addRow
(
NLS
.
str
(
"preferences.raw_cfg"
),
rawCfg
);
...
...
jadx-gui/src/main/java/jadx/gui/settings/LineNumbersMode.java
0 → 100644
浏览文件 @
94b00b4e
package
jadx.gui.settings
;
public
enum
LineNumbersMode
{
DISABLE
,
NORMAL
,
DEBUG
,
AUTO
}
jadx-gui/src/main/java/jadx/gui/ui/codearea/CodePanel.java
浏览文件 @
94b00b4e
...
...
@@ -21,12 +21,15 @@ import javax.swing.SwingUtilities;
import
javax.swing.border.EmptyBorder
;
import
javax.swing.event.PopupMenuEvent
;
import
org.fife.ui.rtextarea.Gutter
;
import
org.fife.ui.rtextarea.RTextScrollPane
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
jadx.api.ICodeInfo
;
import
jadx.core.utils.StringUtils
;
import
jadx.gui.settings.JadxSettings
;
import
jadx.gui.settings.LineNumbersMode
;
import
jadx.gui.ui.MainWindow
;
import
jadx.gui.ui.dialog.SearchDialog
;
import
jadx.gui.utils.CaretPositionFix
;
...
...
@@ -44,12 +47,11 @@ public class CodePanel extends JPanel {
private
final
SearchBar
searchBar
;
private
final
AbstractCodeArea
codeArea
;
private
final
JScrollPane
codeScrollPane
;
private
LineNumbers
lineNumbers
;
public
CodePanel
(
AbstractCodeArea
codeArea
)
{
this
.
codeArea
=
codeArea
;
searchBar
=
new
SearchBar
(
codeArea
);
codeScrollPane
=
codeArea
instanceof
SmaliArea
?
new
RTextScrollPane
(
codeArea
)
:
new
J
ScrollPane
(
codeArea
);
this
.
searchBar
=
new
SearchBar
(
codeArea
);
this
.
codeScrollPane
=
buildCode
ScrollPane
(
codeArea
);
setLayout
(
new
BorderLayout
());
setBorder
(
new
EmptyBorder
(
0
,
0
,
0
,
0
));
...
...
@@ -116,23 +118,43 @@ public class CodePanel extends JPanel {
initLineNumbers
();
}
private
void
initLineNumbers
(
)
{
private
JScrollPane
buildCodeScrollPane
(
AbstractCodeArea
codeArea
)
{
if
(
codeArea
instanceof
SmaliArea
)
{
return
;
return
new
RTextScrollPane
(
codeArea
)
;
}
initLineNumbers
(
isUseSourceLines
());
}
private
void
initLineNumbers
(
boolean
useSourceLines
)
{
lineNumbers
=
new
LineNumbers
(
codeArea
);
lineNumbers
.
setUseSourceLines
(
useSourceLines
);
codeScrollPane
.
setRowHeaderView
(
lineNumbers
);
return
new
JScrollPane
(
codeArea
);
}
private
boolean
isUseSourceLine
s
()
{
private
void
initLineNumber
s
()
{
if
(
codeArea
instanceof
SmaliArea
)
{
return
false
;
return
;
}
LineNumbersMode
mode
=
getSettings
().
getLineNumbersMode
();
boolean
canShowDebugLines
=
canShowDebugLines
();
if
(
mode
==
LineNumbersMode
.
AUTO
)
{
mode
=
canShowDebugLines
?
LineNumbersMode
.
DEBUG
:
LineNumbersMode
.
NORMAL
;
}
else
if
(
mode
==
LineNumbersMode
.
DEBUG
&&
!
canShowDebugLines
)
{
// nothing to show => hide lines view
mode
=
LineNumbersMode
.
DISABLE
;
}
switch
(
mode
)
{
case
DISABLE:
codeScrollPane
.
setRowHeaderView
(
null
);
break
;
case
NORMAL:
Gutter
gutter
=
new
Gutter
(
codeArea
);
gutter
.
setLineNumberFont
(
getSettings
().
getFont
());
codeScrollPane
.
setRowHeaderView
(
gutter
);
break
;
case
DEBUG:
LineNumbers
jadxGutter
=
new
LineNumbers
(
codeArea
);
jadxGutter
.
setUseSourceLines
(
true
);
codeScrollPane
.
setRowHeaderView
(
jadxGutter
);
break
;
}
}
private
boolean
canShowDebugLines
()
{
ICodeInfo
codeInfo
=
codeArea
.
getNode
().
getCodeInfo
();
if
(
codeInfo
==
null
)
{
return
false
;
...
...
@@ -141,8 +163,8 @@ public class CodePanel extends JPanel {
if
(
lineMapping
.
isEmpty
())
{
return
false
;
}
Set
<
Integer
>
unique
Source
Lines
=
new
HashSet
<>(
lineMapping
.
values
());
return
unique
Source
Lines
.
size
()
>
3
;
Set
<
Integer
>
unique
Debug
Lines
=
new
HashSet
<>(
lineMapping
.
values
());
return
unique
Debug
Lines
.
size
()
>
3
;
}
public
SearchBar
getSearchBar
()
{
...
...
@@ -161,11 +183,16 @@ public class CodePanel extends JPanel {
JViewport
viewport
=
getCodeScrollPane
().
getViewport
();
Point
viewPosition
=
viewport
.
getViewPosition
();
codeArea
.
refresh
();
initLineNumbers
(
lineNumbers
.
isUseSourceLines
()
);
initLineNumbers
();
SwingUtilities
.
invokeLater
(()
->
{
viewport
.
setViewPosition
(
viewPosition
);
caretFix
.
restore
();
});
}
private
JadxSettings
getSettings
()
{
return
this
.
codeArea
.
getContentPanel
().
getTabbedPane
()
.
getMainWindow
().
getSettings
();
}
}
jadx-gui/src/main/java/jadx/gui/ui/codearea/LineNumbers.java
浏览文件 @
94b00b4e
...
...
@@ -92,7 +92,7 @@ public class LineNumbers extends JPanel implements CaretListener {
private
void
setPreferredWidth
()
{
Element
root
=
codeArea
.
getDocument
().
getDefaultRootElement
();
int
lines
=
root
.
getElementCount
();
int
digits
=
Math
.
max
(
String
.
valueOf
(
lines
).
length
(),
4
);
int
digits
=
Math
.
max
(
numberLength
(
lines
),
numberLength
(
getMaxDebugLine
())
);
if
(
lastDigits
!=
digits
)
{
lastDigits
=
digits
;
FontMetrics
fontMetrics
=
getFontMetrics
(
getFont
());
...
...
@@ -109,6 +109,10 @@ public class LineNumbers extends JPanel implements CaretListener {
}
}
private
int
numberLength
(
int
value
)
{
return
String
.
valueOf
(
value
).
length
();
}
@SuppressWarnings
(
"deprecation"
)
@Override
public
void
paintComponent
(
Graphics
g
)
{
...
...
@@ -255,6 +259,11 @@ public class LineNumbers extends JPanel implements CaretListener {
return
String
.
valueOf
(
sourceLine
);
}
private
int
getMaxDebugLine
()
{
return
codeInfo
.
getLineMapping
().
keySet
().
stream
()
.
mapToInt
(
Integer:
:
intValue
).
max
().
orElse
(
0
);
}
@Override
public
void
caretUpdate
(
CaretEvent
e
)
{
int
caretPosition
=
codeArea
.
getCaretPosition
();
...
...
jadx-gui/src/main/resources/i18n/Messages_de_DE.properties
浏览文件 @
94b00b4e
...
...
@@ -119,6 +119,7 @@ preferences.decompile=Dekompilierung
preferences.project
=
Projekt
preferences.other
=
Andere
preferences.language
=
Sprachen
#preferences.lineNumbersMode=Editor line numbers mode
preferences.check_for_updates
=
Nach Updates beim Start suchen
preferences.fallback
=
Zwischencode ausgeben (einfacher Speicherauszug)
preferences.showInconsistentCode
=
Inkonsistenten Code anzeigen
...
...
jadx-gui/src/main/resources/i18n/Messages_en_US.properties
浏览文件 @
94b00b4e
...
...
@@ -119,6 +119,7 @@ preferences.decompile=Decompilation
preferences.project
=
Project
preferences.other
=
Other
preferences.language
=
Language
preferences.lineNumbersMode
=
Editor line numbers mode
preferences.check_for_updates
=
Check for updates on startup
preferences.fallback
=
Fallback mode (simple dump)
preferences.showInconsistentCode
=
Show inconsistent code
...
...
jadx-gui/src/main/resources/i18n/Messages_es_ES.properties
浏览文件 @
94b00b4e
...
...
@@ -119,6 +119,7 @@ preferences.decompile=Descompilación
#preferences.project=
preferences.other
=
Otros
preferences.language
=
Idioma
#preferences.lineNumbersMode=Editor line numbers mode
preferences.check_for_updates
=
Buscar actualizaciones al iniciar
preferences.fallback
=
Modo fallback (simple dump)
preferences.showInconsistentCode
=
Mostrar código inconsistente
...
...
jadx-gui/src/main/resources/i18n/Messages_ko_KR.properties
浏览文件 @
94b00b4e
...
...
@@ -119,6 +119,7 @@ preferences.decompile=디컴파일
preferences.project
=
프로젝트
preferences.other
=
기타
preferences.language
=
언어
#preferences.lineNumbersMode=Editor line numbers mode
preferences.check_for_updates
=
시작시 업데이트 확인
preferences.fallback
=
대체 모드 (단순 덤프)
preferences.showInconsistentCode
=
디컴파일 안된 코드 표시
...
...
jadx-gui/src/main/resources/i18n/Messages_zh_CN.properties
浏览文件 @
94b00b4e
...
...
@@ -119,6 +119,7 @@ preferences.decompile=反编译
preferences.project
=
项目
preferences.other
=
其他
preferences.language
=
语言
#preferences.lineNumbersMode=Editor line numbers mode
preferences.check_for_updates
=
启动时检查更新
preferences.fallback
=
输出中间代码
preferences.showInconsistentCode
=
显示不一致的代码
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录