15
15
*/
16
16
package ghidra .app .plugin .core .datamgr .actions ;
17
17
18
+ import javax .swing .*;
18
19
import javax .swing .tree .TreePath ;
19
20
20
21
import docking .ActionContext ;
21
22
import docking .action .DockingAction ;
22
23
import docking .action .MenuData ;
24
+ import docking .widgets .label .GHtmlLabel ;
23
25
import docking .widgets .tree .GTree ;
24
26
import docking .widgets .tree .GTreeNode ;
25
27
import ghidra .app .plugin .core .datamgr .DataTypeManagerPlugin ;
28
30
import ghidra .app .plugin .core .datamgr .archive .DataTypeManagerHandler ;
29
31
import ghidra .app .plugin .core .datamgr .tree .*;
30
32
import ghidra .app .util .datatype .DataTypeSelectionDialog ;
33
+ import ghidra .app .util .datatype .DataTypeSelectionEditor ;
31
34
import ghidra .framework .plugintool .PluginTool ;
32
35
import ghidra .program .model .data .*;
33
36
import ghidra .util .Msg ;
34
37
import ghidra .util .data .DataTypeParser .AllowedDataTypes ;
38
+ import ghidra .util .layout .VerticalLayout ;
35
39
36
40
/**
37
41
* Replace the selected data type with the chosen data type
@@ -41,10 +45,10 @@ public class ReplaceDataTypeAction extends DockingAction {
41
45
private DataTypeManagerPlugin plugin ;
42
46
43
47
public ReplaceDataTypeAction (DataTypeManagerPlugin plugin ) {
44
- super ("Replace Data Type " , plugin .getName ());
48
+ super ("Replace" , plugin .getName ());
45
49
46
50
this .plugin = plugin ;
47
- setPopupMenuData (new MenuData (new String [] { "Replace Data Type ..." }, "Edit" ));
51
+ setPopupMenuData (new MenuData (new String [] { "Replace..." }, "Edit" ));
48
52
}
49
53
50
54
@ Override
@@ -91,24 +95,47 @@ private DataTypeTreeNode getSelectedDataTypeTreeNode(ActionContext context) {
91
95
@ Override
92
96
public void actionPerformed (ActionContext context ) {
93
97
98
+ DataTypeTreeNode node = getSelectedDataTypeTreeNode (context );
99
+ String name = node .getName ();
100
+
94
101
PluginTool tool = plugin .getTool ();
95
102
int noSizeRestriction = -1 ;
96
103
DataTypeSelectionDialog selectionDialog = new DataTypeSelectionDialog (tool ,
97
- plugin .getProgram ().getDataTypeManager (), noSizeRestriction , AllowedDataTypes .ALL );
104
+ plugin .getProgram ().getDataTypeManager (), noSizeRestriction , AllowedDataTypes .ALL ) {
105
+
106
+ @ Override
107
+ protected JComponent createEditorPanel (DataTypeSelectionEditor dtEditor ) {
108
+
109
+ setTitle ("Replace '" + name + "'" );
110
+
111
+ JPanel updatedPanel = new JPanel ();
112
+ updatedPanel .setBorder (BorderFactory .createEmptyBorder (5 , 10 , 10 , 0 ));
113
+ updatedPanel .setLayout (new VerticalLayout (5 ));
114
+
115
+ GHtmlLabel label = new GHtmlLabel ("<html>Choose the relacment data type: " );
116
+ label .setBorder (BorderFactory .createEmptyBorder (5 , 0 , 5 , 0 ));
117
+ updatedPanel .add (label );
118
+
119
+ updatedPanel .add (dtEditor .getEditorComponent ());
120
+
121
+ return updatedPanel ;
122
+ }
123
+
124
+ };
125
+ selectionDialog .setHelpLocation (getHelpLocation ());
98
126
tool .showDialog (selectionDialog );
99
127
DataType newDt = selectionDialog .getUserChosenDataType ();
100
128
if (newDt == null ) {
101
129
return ; // cancelled
102
130
}
103
131
104
- DataTypeTreeNode node = getSelectedDataTypeTreeNode (context );
105
-
106
132
DataTypeManagerHandler dtmHandler = plugin .getDataTypeManagerHandler ();
107
- DataTypeManager dtm = newDt .getDataTypeManager ();
108
- Archive sourceArchive = dtmHandler .getArchive (dtm );
133
+ DataTypeManager newDtm = newDt .getDataTypeManager ();
134
+ Archive sourceArchive = dtmHandler .getArchive (newDtm );
109
135
Archive destinationArchive = findArchive (node );
110
136
111
137
DataType oldDt = ((DataTypeNode ) node ).getDataType ();
138
+ DataTypeManager dtm = oldDt .getDataTypeManager ();
112
139
if (sourceArchive != destinationArchive ) {
113
140
oldDt = oldDt .clone (oldDt .getDataTypeManager ());
114
141
}
0 commit comments