diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/bookmark/DBTraceBookmarkManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/bookmark/DBTraceBookmarkManager.java index e8d2df46ba..3745a39f12 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/bookmark/DBTraceBookmarkManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/bookmark/DBTraceBookmarkManager.java @@ -21,7 +21,7 @@ import java.util.*; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; -import javax.swing.ImageIcon; +import javax.swing.Icon; import db.DBHandle; import ghidra.program.model.address.*; @@ -236,7 +236,7 @@ public class DBTraceBookmarkManager extends AbstractDBTraceSpaceBasedManager bookmarkView; - public DBTraceBookmarkType(DBTraceBookmarkManager manager, String name, ImageIcon icon, + public DBTraceBookmarkType(DBTraceBookmarkManager manager, String name, Icon icon, Color color, int priority) { this.manager = manager; this.name = name; @@ -62,7 +63,7 @@ public class DBTraceBookmarkType implements TraceBookmarkType { } @Override - public ImageIcon getIcon() { + public Icon getIcon() { return icon; } diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewBookmarkManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewBookmarkManager.java index 87e223097c..1b4ec34311 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewBookmarkManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramViewBookmarkManager.java @@ -19,7 +19,7 @@ import java.awt.Color; import java.util.*; import java.util.function.Predicate; -import javax.swing.ImageIcon; +import javax.swing.Icon; import org.apache.commons.collections4.IteratorUtils; @@ -52,7 +52,7 @@ public class DBTraceProgramViewBookmarkManager implements TraceProgramViewBookma } @Override - public BookmarkType defineType(String type, ImageIcon icon, Color color, int priority) { + public BookmarkType defineType(String type, Icon icon, Color color, int priority) { return bookmarkManager.defineBookmarkType(type, icon, color, priority); } @@ -284,11 +284,11 @@ public class DBTraceProgramViewBookmarkManager implements TraceProgramViewBookma * {@link IteratorUtils#filteredIterator(Iterator, org.apache.commons.collections4.Predicate)}. * * This one understands that the predicate will be testing things of the (possibly - * more-specific) type of elements in the original iterator, not thatof the returned iterator. + * more-specific) type of elements in the original iterator, not that of the returned iterator. * - * @param it - * @param predicate - * @return + * @param it the iterator + * @param predicate the predicate + * @return the iterator */ @SuppressWarnings("unchecked") protected static Iterator filteredIterator(Iterator it, diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/bookmark/TraceBookmarkManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/bookmark/TraceBookmarkManager.java index ff7601f29d..07a5175dc0 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/bookmark/TraceBookmarkManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/bookmark/TraceBookmarkManager.java @@ -18,7 +18,7 @@ package ghidra.trace.model.bookmark; import java.awt.Color; import java.util.Collection; -import javax.swing.ImageIcon; +import javax.swing.Icon; import ghidra.program.model.address.AddressSpace; import ghidra.trace.model.stack.TraceStackFrame; @@ -45,7 +45,7 @@ public interface TraceBookmarkManager extends TraceBookmarkOperations { * the same location * @return the newly-defined type */ - TraceBookmarkType defineBookmarkType(String name, ImageIcon icon, Color color, int priority); + TraceBookmarkType defineBookmarkType(String name, Icon icon, Color color, int priority); /** * Get the defined bookmark types. diff --git a/Ghidra/Features/Base/certification.manifest b/Ghidra/Features/Base/certification.manifest index f1f4d828b8..1af2bdf6af 100644 --- a/Ghidra/Features/Base/certification.manifest +++ b/Ghidra/Features/Base/certification.manifest @@ -16,6 +16,7 @@ data/ElfFunctionsThatDoNotReturn||GHIDRA||||END| data/ExtensionPoint.manifest||GHIDRA||||END| data/MachOFunctionsThatDoNotReturn||GHIDRA||||END| data/PEFunctionsThatDoNotReturn||GHIDRA||||END| +data/base.icons.theme.properties||GHIDRA||||END| data/base.listing.theme.properties||GHIDRA||||END| data/base.programgraph.theme.properties||GHIDRA||||END| data/base.theme.properties||GHIDRA||||END| @@ -1101,6 +1102,7 @@ src/main/resources/images/mem_chip3.png||GHIDRA||reviewed||END| src/main/resources/images/memory16.gif||GHIDRA||||END| src/main/resources/images/menu16.gif||GHIDRA||||END| src/main/resources/images/move.png||GHIDRA||||END| +src/main/resources/images/no_small.png||GHIDRA||||END| src/main/resources/images/notF.gif||GHIDRA||||END| src/main/resources/images/notes.gif||GHIDRA||||END| src/main/resources/images/nuvola/16x16/cdimage.png||Nuvola Icons - LGPL 2.1|||Nuvola icon set|END| diff --git a/Ghidra/Features/Base/data/base.icons.theme.properties b/Ghidra/Features/Base/data/base.icons.theme.properties new file mode 100644 index 0000000000..222ce7940a --- /dev/null +++ b/Ghidra/Features/Base/data/base.icons.theme.properties @@ -0,0 +1,399 @@ + +[Defaults] + +icon.base.delete = icon.delete +icon.base.plus = icon.add +icon.base.edit.bytes = editbytes.gif +icon.base.pinned = pin.png +icon.base.hover.off = hoverOff.gif +icon.base.hover.on = hoverOn.gif +icon.base.lock = lock.gif +icon.base.unlock = unlock.gif + +icon.base.search.marker = searchm_obj.gif + +icon.base.application.home = GhidraIcon16.png +icon.base.application.16 = GhidraIcon16.png +icon.base.application.24 = GhidraIcon24.png +icon.base.application.32 = GhidraIcon32.png +icon.base.application.40 = GhidraIcon40.png +icon.base.application.48 = GhidraIcon48.png +icon.base.application.64 = GhidraIcon64.png +icon.base.application.128 = GhidraIcon128.png +icon.base.application.256 = GhidraIcon256.png + +icon.provider.clone = camera-photo.png + +icon.plugin.datatypes.built.in = package_development.png +icon.plugin.datatypes.built.in.disabled = package_development.png [disabled] +icon.plugin.datatypes.default = defaultDt.gif +icon.plugin.datatypes.default.disabled = disabledCode.gif +icon.plugin.datatypes.enum = enum.png +icon.plugin.datatypes.pointer = fingerPointer.png +icon.plugin.datatypes.function = functionDef.png +icon.plugin.datatypes.union = cUnion.png +icon.plugin.datatypes.typedef = typedef.png +icon.plugin.datatypes.structure = cstruct.png + +icon.plugin.assembler.question = question_zero.png + +icon.plugin.bookmark.add = icon.check +icon.plugin.bookmark.delete = icon.base.delete +icon.plugin.bookmark.select = text_align_justify.png +icon.plugin.bookmark.type.note = notes.gif +icon.plugin.bookmark.type.info = icon.information +icon.plugin.bookmark.type.warning = icon.warning +icon.plugin.bookmark.type.error = icon.base.delete +icon.plugin.bookmark.type.analysis = applications-system.png +icon.plugin.bookmark.type.default = unknown.gif + +icon.plugin.calltree.provider = +icon.plugin.calltree.function = FunctionScope.gif +icon.plugin.calltree.recursive = arrow_rotate_clockwise.png +icon.plugin.calltree.refresh = icon.refresh +icon.plugin.calltree.refresh.not.needed = icon.plugin.calltree.refresh [disabled] +icon.plugin.calltree.filter.duplicates = application_double.png +icon.plugin.calltree.filter.select.source = text_align_justify.png +icon.plugin.calltree.node.dead.end = stopNode.png +icon.plugin.calltree.node.external = package.png + +icon.plugin.checksum.compute = icon.refresh +icon.plugin.checksum.select = NextSelectionBlock16.gif +icon.plugin.checksum.show.hex = hexData.png +icon.plugin.checksum.xor = xor.png +icon.plugin.checksum.carry = carry.png +icon.plugin.checksum.ones.complement = onesComplement.png +icon.plugin.checksum.twos.complement = twosComplement.png + +icon.plugin.clipboard.copy = icon.copy +icon.plugin.clipboard.paste = icon.paste + +icon.plugin.codebrowser.cursor.location = cursor_arrow_flipped.gif +icon.plugin.codebrowser.cursor.marker = searchm_obj.gif +icon.plugin.codebrowser.format.collapse =field.header.up.png +icon.plugin.codebrowser.format.expand = field.header.down.png +icon.plugin.codebrowser.hover.off = icon.base.hover.off +icon.plugin.codebrowser.hover.on = icon.base.hover.on +icon.plugin.codebrowser.provider = Browser.gif +icon.plugin.codebrowser.mark.and.select.armed = MarkSelection.png {media-playback-start.png[size(12,12)][move(4,4)]} +icon.plugin.codebrowser.mark.and.select.unarmed = MarkSelection.png {media-playback-stop.png[size(12,12)][move(4,4)]} + +icon.plugin.composite.editor.provider = accessories-text-editor.png +icon.plugin.composite.editor.provider.structure = icon.plugin.datatypes.structure +icon.plugin.composite.editor.provider.union = cUnion.png +icon.plugin.composite.editor.apply = disk.png +icon.plugin.composite.editor.array = Array.png +icon.plugin.composite.editor.bit.field.dialog.add = icon.base.plus +icon.plugin.composite.editor.bit.field.dialog.delete = icon.base.delete +icon.plugin.composite.editor.bit.field.dialog.edit = move.png +icon.plugin.composite.editor.bit.field.editor.decrement = Minus.png +icon.plugin.composite.editor.bit.field.editor.increment = icon.base.plus +icon.plugin.composite.editor.clear = icon.clear +icon.plugin.composite.editor.create = icon.plugin.datatypes.structure +icon.plugin.composite.editor.delete = icon.base.delete +icon.plugin.composite.editor.duplicate = DuplicateData.png +icon.plugin.composite.editor.duplicate.multiple = MultiDuplicateData.png +icon.plugin.composite.editor.insert.undefined = icon.base.plus +icon.plugin.composite.editor.move.down = down.png +icon.plugin.composite.editor.move.up = up.png +icon.plugin.composite.editor.search.next = go-down.tango.16.png [size(16,16)] +icon.plugin.composite.editor.search.previous = go-up.tango.16.png [size(16,16)] +icon.plugin.composite.editor.show.type = icon.home +icon.plugin.composite.editor.unpackage = Unpackage.gif + +icon.plugin.enum.editor.provider = icon.plugin.datatypes.enum +icon.plugin.enum.editor.add = icon.base.plus +icon.plugin.enum.editor.apply = icon.save +icon.plugin.enum.editor.delete = icon.base.delete +icon.plugin.enum.editor.home = icon.home + +icon.plugin.console.provider = monitor.png +icon.plugin.console.clear = icon.clear +icon.plugin.console.scroll.lock = lock.png + +icon.plugin.datatypes.provider = dataTypes.png +icon.plugin.datatypes.commit.single.type = smallRightArrow.png +icon.plugin.datatypes.associate.single.type = smallLeftArrow.png +icon.plugin.datatypes.conflict.mode.rename.and.add = conflictRename.png +icon.plugin.datatypes.conflict.mode.use.existing = conflictKeep.png +icon.plugin.datatypes.conflict.mode.replace.existing = conflictReplace.png +icon.plugin.datatypes.conflict.mode.replace.or.rename = conflictReplaceOrRename.png +icon.plugin.datatypes.filter.arrays.off = Array.png +icon.plugin.datatypes.filter.arrays.on = FilterArrays.png +icon.plugin.datatypes.filter.pointers.off = fingerPointer.png +icon.plugin.datatypes.filter.pointers.on = FilterPointers.png +icon.plugin.datatypes.archive.built.in.closed = closedBookBrown.png +icon.plugin.datatypes.archive.built.in.open = openBookBrown.png +icon.plugin.datatypes.archive.file.closed = closedBookGreen.png +icon.plugin.datatypes.archive.file.open = openBookGreen.png +icon.plugin.datatypes.archive.invalid =closedFolderInvalid.png +icon.plugin.datatypes.archive.program.closed = closedBookRed.png +icon.plugin.datatypes.archive.program.open = openBookRed.png +icon.plugin.datatypes.archive.project.closed = closedBookBlue.png +icon.plugin.datatypes.archive.project.open = openBookBlue.png + +icon.plugin.datatypes.tree.conflict = doubleArrow.png +icon.plugin.datatypes.tree.change.local = smallRightArrow.png +icon.plugin.datatypes.tree.change.source = smallLeftArrow.png +icon.plugin.datatypes.tree.missing = redQuestionMark.png +icon.plugin.datatypes.tree.node.archive.file.checked.out = icon.check +icon.plugin.datatypes.tree.node.archive.file.checked.out.exclusive = checkex.png +icon.plugin.datatypes.tree.node.archive.file.checked.out.not.latest = checkNotLatest.gif +icon.plugin.datatypes.tree.node.archive.file.hijacked = small_hijack.gif +icon.plugin.datatypes.tree.node.archive.file.read.only = user-busy.png [size(10,10)] + +icon.plugin.datatypes.util.root = BookShelf.png +icon.plugin.datatypes.util.open.root = BookShelfOpen.png +icon.plugin.datatypes.util.open.archive = openFolderArchive.png +icon.plugin.datatypes.util.open.folder = openFolder.png +icon.plugin.datatypes.util.open.folder.disabled = disabledOpenFolder.png +icon.plugin.datatypes.util.open.folder.locked = openFolderCheckedOut.png +icon.plugin.datatypes.util.closed.archive = closedFolderArchive.png +icon.plugin.datatypes.util.closed.folder = closedFolder.png +icon.plugin.datatypes.util.closed.folder.disabled = disabledClosedFolder.png +icon.plugin.datatypes.util.closed.folder.locked = closedFolderCheckedOut.png +icon.plugin.datatypes.util.favorite = emblem-favorite.png +icon.plugin.datatypes.util.favorite.disabled = emblem-favorite.png [disabled] + +icon.plugin.datawindow.provider = dataW.gif + +icon.plugin.functiontags.add = 2rightarrow.png [size(16,16)] +icon.plugin.functiontags.remove = 2leftarrow.png [size(16,16)] + +icon.plugin.functioncompare.new = page_white_c.png {bullet_star.png [size(16,16)][move(4,-4)]} +icon.plugin.functioncompare.function.next = arrow_down.png [move(3,1)] {FunctionScope.gif [move(-5,-2)]} +icon.plugin.functioncompare.function.previous = arrow_up.png [move(3,1)] {FunctionScope.gif [move(-5,-2)]} +icon.plugin.functioncompare.function.remove = edit-delete.png [move(3,3)] {FunctionScope.gif [move(-5,-2)]} +icon.plugin.functioncompare.open.function.table = page_white_c.png {icon.add [size(10,10)][move(10,10)]} +icon.plugin.functioncompare.scroll.lock = icon.base.lock +icon.plugin.functioncompare.scroll.unlock = icon.base.unlock + +icon.plugin.functionwindow.provider = functions.gif + +icon.plugin.instructiontable.address = DOSA_A.png +icon.plugin.instructiontable.scalar = DOSA_S.png +icon.plugin.instructiontable.operand = DOSA_O.png +icon.plugin.instructiontable.undefined = DOSA_D.png +icon.plugin.instructiontable.manual.entry = icon.base.edit.bytes +icon.plugin.instructiontable.binary = binaryData.gif +icon.plugin.instructiontable.hex = hexData.png + +icon.plugin.interpreter.provider = monitor.png + +icon.plugin.locationreferences.highlight = tag_yellow.png + +icon.plugin.memorymap.provider = memory16.gif +icon.plugin.memorymap.add = icon.add +icon.plugin.memorymap.move = move.png +icon.plugin.memorymap.split = verticalSplit.png +icon.plugin.memorymap.expand.up = icon.toggle.collapse +icon.plugin.memorymap.expand.down = icon.toggle.expand +icon.plugin.memorymap.merge = Merge.png +icon.plugin.memorymap.delete = icon.delete +icon.plugin.memorymap.image.base = house.png + +icon.plugin.merge = Merge.png +icon.plugin.merge.changed = changed16.gif +icon.plugin.merge.conflict.collapse = icon.toggle.collapse +icon.plugin.merge.conflict.expand = icon.toggle.expand +icon.plugin.merge.conflict.lock = lock.gif +icon.plugin.merge.conflict.unlock = unlock.gif +icon.plugin.merge.status.pending = bullet_green.png +icon.plugin.merge.status.in.progress = right.png +icon.plugin.merge.status.complete = checkmark_green.gif + +icon.plugin.myprogramchanges.merge = vcMerge.png +icon.plugin.myprogramchanges.checkin = vcCheckIn.png + +icon.plugin.navigation.bookmark = B.gif [size(16,16)] +icon.plugin.navigation.bookmark.analysis = applications-system.png +icon.plugin.navigation.bookmark.error = icon.error +icon.plugin.navigation.bookmark.info = icon.information +icon.plugin.navigation.bookmark.note = notes.gif +icon.plugin.navigation.bookmark.warning = icon.warning +icon.plugin.navigation.bookmark.unknown = unknown.gif +icon.plugin.navigation.bytes = V.png +icon.plugin.navigation.data = D.gif +icon.plugin.navigation.function = F.gif +icon.plugin.navigation.instruction = I.gif +icon.plugin.navigation.label = L.gif +icon.plugin.navigation.undefined = U.gif +icon.plugin.navigation.highlight.range.next = NextHighlightBlock16.gif +icon.plugin.navigation.highlight.range.previous = PreviousHighlightBlock16.gif +icon.plugin.navigation.selection.range.next = NextSelectionBlock16.gif +icon.plugin.navigation.selection.range.previous = PreviousSelectionBlock16.gif +icon.plugin.navigation.location.next = icon.right +icon.plugin.navigation.location.previous = icon.left + +icon.plugin.bundlemanager.disable = media-playback-stop.png +icon.plugin.bundlemanager.enable = media-playback-start.png + +icon.plugin.overview.provider = x-office-document-template.png + +icon.plugin.programmanager.empty.small = empty8x16.png +icon.plugin.programmanager.close = x.gif +icon.plugin.programmanager.close.highlight = pinkX.gif +icon.plugin.programmanager.list = VCRFastForward.gif +icon.plugin.programmanager.transient = link.png +icon.plugin.programmanager.busy = icon.base.edit.bytes + +icon.plugin.programtree.docs = openBookBlue.png +icon.plugin.programtree.fragment = codeNotInView.gif +icon.plugin.programtree.fragment.empty = emptyFragment.gif +icon.plugin.programtree.fragment.viewed = codeInView.gif +icon.plugin.programtree.fragment.viewed.empty = emptyFragmentInView.gif +icon.plugin.programtree.fragment.closed.folder = closedFolderInView.png +icon.plugin.programtree.fragment.open.folder = openFolderInView.png +icon.plugin.programtree.fragment.viewed.closed.folder.with.description = closedDescendantsInView.png +icon.plugin.programtree.closed.folder = closedFolder.png +icon.plugin.programtree.open.folder = openFolder.png +icon.plugin.programtree.open.tree = icon.folder.open +icon.plugin.programtree.new.tree = layout_add.png +icon.plugin.programtree.drag.copy = dragMoveCursor.gif +icon.plugin.programtree.drag.move = dragCopyCursor.gif + +icon.plugin.reachability.provider = function_graph_curvey.png [rotate(90)] + +icon.plugin.register = registerIcon.png +icon.plugin.register.group = registerGroup.png +icon.plugin.register.provider = icon.plugin.register.group + +icon.plugin.scalartable.provider = dataW.gif + +icon.plugin.scriptmanager.provider = play.png +icon.plugin.scriptmanager.run = play.png +icon.plugin.scriptmanager.run.again = play_again.png +icon.plugin.scriptmanager.edit = accessories-text-editor.png +icon.plugin.scriptmanager.edit.eclipse = eclipse.png +icon.plugin.scriptmanager.keybinding = key.png +icon.plugin.scriptmanager.delete = icon.delete +icon.plugin.scriptmanager.rename = icon.rename +icon.plugin.scriptmanager.new = script_add.png +icon.plugin.scriptmanager.manage = text_list_bullets.png +icon.plugin.scriptmanager.api = red-cross.png + +icon.plugin.stringtable.provider = kmessedwords.png +icon.plugin.stringtable.defined = font.png +icon.plugin.stringtable.defined.partial = dialog-warning.png +icon.plugin.stringtable.undefined = magnifier.png +icon.plugin.stringtable.words = view-filter.png +icon.plugin.stringtable.conflicts = dialog-warning_red.png + +icon.plugin.symboltree.provider = sitemap_color.png +icon.plugin.symboltree.goto = icon.base.search.marker +icon.plugin.symboltree.set.external = icon.base.edit.bytes +icon.plugin.symboltree.node.root = bullet_green.png +icon.plugin.symboltree.node.class = class.png +icon.plugin.symboltree.node.code = label.png +icon.plugin.symboltree.node.code.pinned = icon.base.pinned +icon.plugin.symboltree.node.code.external = ExternalData.gif +icon.plugin.symboltree.node.function = FunctionScope.gif +icon.plugin.symboltree.node.function.external = ExternalFunction.gif +icon.plugin.symboltree.node.function.thunk = ThunkFunction.gif +icon.plugin.symboltree.node.library = package.png +icon.plugin.symboltree.node.local.variable = LocalVariable.gif +icon.plugin.symboltree.node.parameter = Parameter.gif +icon.plugin.symboltree.node.namespace = Namespace.gif +icon.plugin.symboltree.node.organization.closed = closedFolderGroup.png +icon.plugin.symboltree.node.organization.open = openFolderGroup.png +icon.plugin.symboltree.node.category.classes.closed = closedFolderClasses.png +icon.plugin.symboltree.node.category.classes.open = openFolderClasses.png +icon.plugin.symboltree.node.category.function.closed = closedFolderFunctions.png +icon.plugin.symboltree.node.category.function.open = openFolderFunctions.png +icon.plugin.symboltree.node.category.exports.closed = closedFolder.png +icon.plugin.symboltree.node.category.exports.open = openFolder.png +icon.plugin.symboltree.node.category.imports.closed = closedFolderExternals.png +icon.plugin.symboltree.node.category.imports.open = openFolderExternals.png +icon.plugin.symboltree.node.category.label.closed = closedFolderLabels.png +icon.plugin.symboltree.node.category.label.open = openFolderLabels.png +icon.plugin.symboltree.node.category.namespace.closed = closedFolderNamespaces.png +icon.plugin.symboltree.node.category.namespace.open = openFolderNamespaces.png +icon.plugin.symboltree.node.group.folder.closed = closedFolderGroup.png +icon.plugin.symboltree.node.group.folder.open = openFolderGroup.png + +icon.plugin.symboltable.provider = table.png +icon.plugin.symboltable.references.to =references_to.gif +icon.plugin.symboltable.instructions.from = I.gif +icon.plugin.symboltable.data.from = D.gif +icon.plugin.symboltable.referencetable.provider = table_go.png + +icon.plugin.table.service = magnifier.png +icon.plugin.table.service.marker = icon.base.search.marker +icon.plugin.table.delete.row = table_delete.png + +icon.plugin.totd.provider = help-hint.png + +icon.plugin.viewstrings.provider = dataW.gif + +icon.plugin.debug.dbviewer.provider = zoom.png +icon.plugin.debug.domaineventviewer.provider = monitor.png +icon.plugin.debug.propertymanager.provider = document-properties.png +icon.plugin.debug.propertymanager.marker = searchm_pink.gif + +icon.plugin.fsbrowser.copy = icon.copy +icon.plugin.fsbrowser.cut = icon.cut +icon.plugin.fsbrowser.delete = page_delete.png +icon.plugin.fsbrowser.font = icon.font +icon.plugin.fsbrowser.locked = icon.base.lock +icon.plugin.fsbrowser.new = page_add.png +icon.plugin.fsbrowser.paste = icon.paste +icon.plugin.fsbrowser.redo = icon.redo +icon.plugin.fsbrowser.rename = icon.rename +icon.plugin.fsbrowser.refresh = icon.refresh +icon.plugin.fsbrowser.save = icon.save +icon.plugin.fsbrowser.save.as = icon.save.as +icon.plugin.fsbrowser.undo = icon.undo +icon.plugin.fsbrowser.unlocked = icon.base.unlock +icon.plugin.fsbrowser.close = images/famfamfam_silk_icons_v013/door.png +icon.plugin.fsbrowser.collapse.all = images/famfamfam_silk_icons_v013/arrow_in.png +icon.plugin.fsbrowser.compress = images/famfamfam_silk_icons_v013/compress.png +icon.plugin.fsbrowser.create.firmware = media-flash.png +icon.plugin.fsbrowser.expand.all = images/famfamfam_silk_icons_v013/arrow_inout.png +icon.plugin.fsbrowser.extract = package_green.png +icon.plugin.fsbrowser.info = icon.information +icon.plugin.fsbrowser.open = images/famfamfam_silk_icons_v013/door_open.png +icon.plugin.fsbrowser.open.as.binary = images/famfamfam_silk_icons_v013/controller.png +icon.plugin.fsbrowser.open.in.listing = images/famfamfam_silk_icons_v013/folder_table.png +icon.plugin.fsbrowser.open.file.system = images/famfamfam_silk_icons_v013/folder_brick.png +icon.plugin.fsbrowser.photo = images/famfamfam_silk_icons_v013/photo.png +icon.plugin.fsbrowser.view.as.image = images/oxygen/16x16/games-config-background.png +icon.plugin.fsbrowser.view.as.text = format-text-bold.png +icon.plugin.fsbrowser.eclipse = eclipse.png +icon.plugin.fsbrowser.jar = images/famfamfam_silk_icons_v013/page_white_cup.png +icon.plugin.fsbrowser.import = images/famfamfam_silk_icons_v013/application_get.png +icon.plugin.fsbrowser.ios = images/famfamfam_silk_icons_v013/phone.png +icon.plugin.fsbrowser.open.all = images/famfamfam_silk_icons_v013/application_cascade.png +icon.plugin.fsbrowser.list.mounted = downArrow.png + +icon.base.util.fixed.bit.size.field = icon.pulldown + +icon.base.util.viewer.fieldfactory.label = icon.base.pinned [move(0,4)] +icon.base.util.viewer.fieldfactory.openclose.closed = small_plus.png +icon.base.util.viewer.fieldfactory.openclose.open = small_minus.png +icon.base.util.viewer.fieldfactory.variable = icon.warning + +icon.base.util.listingcompare.provider = table_relationship.png +icon.base.util.listingcompare.cursor = cursor_arrow_flipped.gif +icon.base.util.listingcompare.diff.next = view-sort-ascending.png +icon.base.util.listingcompare.previous.next = view-sort-descending.png +icon.base.util.listingcompare.area.markers.all = text_list_bullets.png +icon.base.util.listingcompare.area.markers.unmatched = icon.navigate.in +icon.base.util.listingcompare.area.markers.diff = table_relationship.png +icon.base.util.listingcompare.hover.off = icon.base.hover.off +icon.base.util.listingcompare.hover.on = icon.base.hover.on + +icon.base.util.listingdiff.diffs.not = no_small.png +icon.base.util.listingdiff.diffs.byte = binaryData.gif +icon.base.util.listingdiff.diffs.constants = class.png +icon.base.util.listingdiff.diffs.registers = registerGroup.png + +icon.base.util.xml.functions.bookmark = imported_bookmark.gif + +icon.base.util.datatree.version.control.archive.dt.checkout.undo = vcUndoCheckOut.png + + + + + + +[Dark Defaults] \ No newline at end of file diff --git a/Ghidra/Features/Base/data/base.theme.properties b/Ghidra/Features/Base/data/base.theme.properties index 2b44fadba5..98fe2c5c59 100644 --- a/Ghidra/Features/Base/data/base.theme.properties +++ b/Ghidra/Features/Base/data/base.theme.properties @@ -159,6 +159,8 @@ color.bg.plugin.windowlocation.window.selected = rgba(0, 255, 0, 200) color.fg.plugin.windowlocation.window.text = gray + + [Dark Defaults] color.bg = rgb(40, 42, 46) // TODO this should be in a more generic module diff --git a/Ghidra/Features/Base/ghidra_scripts/AssemblyThrasherDevScript.java b/Ghidra/Features/Base/ghidra_scripts/AssemblyThrasherDevScript.java index 21e05789c3..ea96dff9b4 100644 --- a/Ghidra/Features/Base/ghidra_scripts/AssemblyThrasherDevScript.java +++ b/Ghidra/Features/Base/ghidra_scripts/AssemblyThrasherDevScript.java @@ -22,7 +22,7 @@ import java.io.PrintStream; import java.util.HashSet; import java.util.Set; -import javax.swing.ImageIcon; +import javax.swing.Icon; import org.apache.commons.lang3.StringUtils; @@ -40,7 +40,7 @@ import ghidra.program.model.listing.Instruction; import ghidra.program.model.mem.ByteMemBufferImpl; import ghidra.program.model.mem.MemBuffer; import ghidra.util.NumericUtilities; -import resources.ResourceManager; +import resources.Icons; public class AssemblyThrasherDevScript extends GhidraScript { public static final String BOOKMARK_FAIL = "AssemblyFailure"; @@ -104,7 +104,7 @@ public class AssemblyThrasherDevScript extends GhidraScript { clearBackgroundColor(currentProgram.getMemory().getAllInitializedAddressSet()); BookmarkManager bm = currentProgram.getBookmarkManager(); - ImageIcon myIcon = ResourceManager.loadImage("images/warning.png"); + Icon myIcon = Icons.WARNING_ICON; bm.defineType(BOOKMARK_FAIL, myIcon, Palette.YELLOW, 0); bm.removeBookmarks(BOOKMARK_FAIL); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeManagerProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeManagerProvider.java index d323b5a605..ef1f0e0736 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeManagerProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeManagerProvider.java @@ -26,6 +26,7 @@ import docking.options.editor.ButtonPanelFactory; import docking.util.image.ToolIconURL; import docking.widgets.OptionDialog; import docking.widgets.label.*; +import generic.theme.GIcon; import ghidra.app.context.ListingActionContext; import ghidra.app.merge.tool.ListingMergePanel; import ghidra.app.nav.Navigatable; @@ -36,7 +37,6 @@ import ghidra.framework.plugintool.ComponentProviderAdapter; import ghidra.program.util.ProgramLocation; import ghidra.util.HelpLocation; import ghidra.util.layout.VerticalLayout; -import resources.ResourceManager; /** * Component that displays merge components as needed. @@ -59,7 +59,7 @@ class MergeManagerProvider extends ComponentProviderAdapter { private JButton cancelButton; private boolean wasCanceled; - private ImageIcon MERGE_ICON = ResourceManager.loadImage("images/Merge.png"); + private Icon MERGE_ICON = new GIcon("icon.plugin.merge"); private JPanel mainPanel; public MergeManagerProvider(MergeManagerPlugin plugin, String title) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeProgressPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeProgressPanel.java index 3e9ea8b861..4528cdd672 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeProgressPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/MergeProgressPanel.java @@ -17,16 +17,17 @@ package ghidra.app.merge; import java.awt.BorderLayout; import java.util.HashMap; +import java.util.Map; import javax.swing.*; import javax.swing.border.Border; import docking.widgets.label.GIconLabel; import docking.widgets.label.GLabel; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors.Palette; import ghidra.util.Msg; import ghidra.util.layout.VerticalLayout; -import resources.ResourceManager; /** * The MergeProgressPanel displays the name of each merge phase along with an icon indicating @@ -34,11 +35,10 @@ import resources.ResourceManager; */ public class MergeProgressPanel extends JPanel { - public static ImageIcon DEFINED_ICON = ResourceManager.loadImage("images/bullet_green.png"); - public static ImageIcon IN_PROGRESS_ICON = ResourceManager.loadImage("images/right.png"); - public static ImageIcon COMPLETED_ICON = - ResourceManager.loadImage("images/checkmark_green.gif"); - private HashMap imageMap = new HashMap<>(); + public static Icon DEFINED_ICON = new GIcon("icon.plugin.merge.status.pending"); + public static Icon IN_PROGRESS_ICON = new GIcon("icon.plugin.merge.status.in.progress"); + public static Icon COMPLETED_ICON = new GIcon("icon.plugin.merge.status.complete"); + private Map imageMap = new HashMap<>(); private static int INDENT_IN_PIXELS = 20; /** diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/PhaseProgressPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/PhaseProgressPanel.java index 8d0247b923..a1ea20516b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/PhaseProgressPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/PhaseProgressPanel.java @@ -17,14 +17,12 @@ package ghidra.app.merge; import java.awt.BorderLayout; import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import javax.swing.*; import docking.widgets.label.GDLabel; import docking.widgets.label.GIconLabel; -import resources.ResourceManager; +import resources.Icons; /** * The PhaseProgressPanel provides a title, progress bar and message for the current phase that is @@ -33,7 +31,7 @@ import resources.ResourceManager; public class PhaseProgressPanel extends JPanel { private final static String DEFAULT_INFO = "Merge programs in progress..."; - private ImageIcon INFORM_ICON = ResourceManager.loadImage("images/information.png"); + private Icon INFORM_ICON = Icons.INFO_ICON; private JLabel titleLabel; private JProgressBar progressBar; @@ -105,12 +103,7 @@ public class PhaseProgressPanel extends JPanel { doSetMessage(DEFAULT_INFO); // Sets up the timer for updating the GUI. - updateTimer = new Timer(250, new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - update(); - } - }); + updateTimer = new Timer(250, e -> update()); } // Method for use by the timer to update the progress bar or message. diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/DataTypeMergePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/DataTypeMergePanel.java index 98f2478ddc..fc6004f353 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/DataTypeMergePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/DataTypeMergePanel.java @@ -30,7 +30,7 @@ import ghidra.app.merge.MergeConstants; import ghidra.app.merge.util.ConflictCountPanel; import ghidra.framework.data.DomainObjectMergeManager; import ghidra.program.model.data.*; -import resources.ResourceManager; +import resources.Icons; /** * Panel to select a data type in order to resolve a conflict. @@ -86,9 +86,6 @@ class DataTypeMergePanel extends JPanel { buttonGroup.add(originalRB); } - /** - * - */ int getSelectedOption() { if (latestRB.isSelected()) { return DataTypeMergeManager.OPTION_LATEST; @@ -105,13 +102,10 @@ class DataTypeMergePanel extends JPanel { private void create() { buttonGroup = new ButtonGroup(); - ItemListener listener = new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - if (e.getStateChange() == ItemEvent.SELECTED) { - mergeManager.clearStatusText(); - mergeManager.setApplyEnabled(true); - } + ItemListener listener = e -> { + if (e.getStateChange() == ItemEvent.SELECTED) { + mergeManager.clearStatusText(); + mergeManager.setApplyEnabled(true); } }; @@ -180,7 +174,7 @@ class DataTypeMergePanel extends JPanel { private JPanel createInfoPanel() { - Icon icon = ResourceManager.loadImage("images/information.png"); + Icon icon = Icons.INFO_ICON; JLabel imageLabel = new GIconLabel(icon); MultiLineLabel label = diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/SourceArchiveMergePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/SourceArchiveMergePanel.java index 1fd2d12f61..0130697b7c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/SourceArchiveMergePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/datatypes/SourceArchiveMergePanel.java @@ -30,7 +30,7 @@ import ghidra.app.merge.MergeConstants; import ghidra.app.merge.util.ConflictCountPanel; import ghidra.framework.data.DomainObjectMergeManager; import ghidra.program.model.data.SourceArchive; -import resources.ResourceManager; +import resources.Icons; /** * Panel to select a source archive in order to resolve a conflict. @@ -104,13 +104,10 @@ class SourceArchiveMergePanel extends JPanel { private void create() { buttonGroup = new ButtonGroup(); - ItemListener listener = new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - if (e.getStateChange() == ItemEvent.SELECTED) { - mergeManager.clearStatusText(); - mergeManager.setApplyEnabled(true); - } + ItemListener listener = e -> { + if (e.getStateChange() == ItemEvent.SELECTED) { + mergeManager.clearStatusText(); + mergeManager.setApplyEnabled(true); } }; @@ -175,7 +172,7 @@ class SourceArchiveMergePanel extends JPanel { private JPanel createInfoPanel() { - Icon icon = ResourceManager.loadImage("images/information.png"); + Icon icon = Icons.INFO_ICON; JLabel imageLabel = new GIconLabel(icon); MultiLineLabel label = new MultiLineLabel( diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalAddConflictPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalAddConflictPanel.java index 09c68737e8..0a22b15bcc 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalAddConflictPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalAddConflictPanel.java @@ -26,6 +26,7 @@ import docking.widgets.button.GRadioButton; import docking.widgets.fieldpanel.FieldPanel; import docking.widgets.fieldpanel.internal.FieldPanelCoordinator; import docking.widgets.label.GIconLabel; +import generic.theme.GIcon; import ghidra.app.merge.MergeConstants; import ghidra.app.merge.MergeManager; import ghidra.app.merge.util.ConflictCountPanel; @@ -45,7 +46,6 @@ import ghidra.program.model.address.Address; import ghidra.program.model.address.AddressSet; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.ExternalLocation; -import resources.ResourceManager; import resources.icons.EmptyIcon; /** @@ -60,8 +60,8 @@ class ExternalAddConflictPanel extends JPanel implements CodeFormatService { public static final String MERGE_BOTH_BUTTON_NAME = ExternalFunctionMerger.MERGE_BOTH_BUTTON_NAME; - private static Icon hideIcon = ResourceManager.loadImage("images/collapse.gif"); - private static Icon showIcon = ResourceManager.loadImage("images/expand.gif"); + private static final Icon HIDE_ICON = new GIcon("icons.base.listing.conflict.collapse"); + private static final Icon SHOW_ICON = new GIcon("icons.base.listing.conflict.expand"); private DomainObjectMergeManager mergeManager; private int totalConflicts; @@ -291,18 +291,18 @@ class ExternalAddConflictPanel extends JPanel implements CodeFormatService { class ShowHeaderButton extends EmptyBorderButton { ShowHeaderButton() { - super(showIcon); + super(SHOW_ICON); setFocusable(false); setToolTipText("Toggle Format Header"); addActionListener(e -> { if (isSelected()) { setSelected(false); - setIcon(showIcon); + setIcon(SHOW_ICON); latestPanel.showHeader(false); } else { setSelected(true); - setIcon(hideIcon); + setIcon(HIDE_ICON); latestPanel.showHeader(true); } }); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tool/ListingMergePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tool/ListingMergePanel.java index 7786c510cc..61622fbf08 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tool/ListingMergePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tool/ListingMergePanel.java @@ -28,6 +28,7 @@ import docking.widgets.checkbox.GCheckBox; import docking.widgets.fieldpanel.FieldPanel; import docking.widgets.fieldpanel.internal.FieldPanelCoordinator; import docking.widgets.fieldpanel.support.BackgroundColorModel; +import generic.theme.GIcon; import ghidra.app.merge.MergeConstants; import ghidra.app.nav.Navigatable; import ghidra.app.plugin.core.codebrowser.hover.*; @@ -54,12 +55,11 @@ import ghidra.util.datastruct.WeakDataStructureFactory; import ghidra.util.datastruct.WeakSet; import ghidra.util.exception.NotYetImplementedException; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; public class ListingMergePanel extends JPanel implements MergeConstants, FocusListener, CodeFormatService { - private static Icon hideIcon = ResourceManager.loadImage("images/collapse.gif"); - private static Icon showIcon = ResourceManager.loadImage("images/expand.gif"); + private static final Icon HIDE_ICON = new GIcon("icons.base.listing.conflict.collapse"); + private static final Icon SHOW_ICON = new GIcon("icons.base.listing.conflict.expand"); private JComponent topComp; private JComponent bottomComp; @@ -297,9 +297,8 @@ public class ListingMergePanel extends JPanel } /** - * Color the background of all 4 listings to the indicated color for - * the indicated addresses. - * @param addrSet + * Color the background of all 4 listings to the indicated color for the indicated addresses. + * @param addrSet the addresses */ public void paintAllBackgrounds(AddressSetView addrSet) { backgroundColorModel.setAddressSet(addrSet); @@ -509,18 +508,18 @@ public class ListingMergePanel extends JPanel private class ShowHeaderButton extends EmptyBorderButton { ShowHeaderButton() { - super(showIcon); + super(SHOW_ICON); setFocusable(false); setToolTipText("Toggle Format Header"); addActionListener(e -> { if (isSelected()) { setSelected(false); - setIcon(showIcon); + setIcon(SHOW_ICON); listingPanels[RESULT].showHeader(false); } else { setSelected(true); - setIcon(hideIcon); + setIcon(HIDE_ICON); listingPanels[RESULT].showHeader(true); } }); @@ -616,14 +615,12 @@ public class ListingMergePanel extends JPanel } class LockComponent extends GCheckBox { - private static final Icon lock = ResourceManager.loadImage("images/lock.gif"); - private static final Icon unlock = ResourceManager.loadImage("images/unlock.gif"); LockComponent() { - super(unlock); + super(new GIcon("icon.plugin.merge.conflict.unlock")); setToolTipText("Lock/Unlock with other views"); setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 0)); - setSelectedIcon(lock); + setSelectedIcon(new GIcon("icon.plugin.merge.conflict.lock")); setSelected(true); } @@ -635,26 +632,3 @@ class LockComponent extends GCheckBox { setSelected(lock); } } -/*** -// class LockComponent extends ToolbarButton { -// private static final Icon lock = ResourceManager.loadImage("images/lock.gif"); -// private static final Icon unlock = ResourceManager.loadImage("images/unlock.gif"); -// LockComponent() { -// super(unlock); -// setBorder(BorderFactory.createEmptyBorder(0,2,0,2)); -// setSelectedIcon(lock); -// setSelected(true); -// addActionListener(new ActionListener() { -// public void actionPerformed(ActionEvent e) { -// setSelected(!isSelected()); -// } -// }); -// } -// boolean isLocked() { -// return isSelected(); -// } -// void setLocked(boolean lock) { -// setSelected(lock); -// } -// } - ***/ diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/NameConflictsPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/NameConflictsPanel.java index a1195cd901..0240c47d96 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/NameConflictsPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/NameConflictsPanel.java @@ -16,7 +16,6 @@ package ghidra.app.merge.tree; import java.awt.BorderLayout; -import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.*; @@ -27,7 +26,7 @@ import docking.widgets.label.GDLabel; import docking.widgets.label.GIconLabel; import ghidra.app.merge.MergeConstants; import ghidra.program.model.listing.Program; -import resources.ResourceManager; +import resources.Icons; /** * Panel to get user input to resolve name conflicts when private name of tree @@ -129,7 +128,7 @@ class NameConflictsPanel extends JPanel { iconPanel.setLayout(new BoxLayout(iconPanel, BoxLayout.X_AXIS)); conflictsLabel = new GDLabel("'My' name already exists in Latest Version"); - ImageIcon icon = ResourceManager.loadImage("images/information.png"); + Icon icon = Icons.INFO_ICON; iconPanel.add(new GIconLabel(icon)); iconPanel.add(Box.createHorizontalStrut(5)); iconPanel.add(conflictsLabel); @@ -158,12 +157,9 @@ class NameConflictsPanel extends JPanel { panel.add(rbPanel, BorderLayout.CENTER); add(panel); - ItemListener itemListener = new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - if (listener != null) { - listener.stateChanged(null); - } + ItemListener itemListener = e -> { + if (listener != null) { + listener.stateChanged(null); } }; keepOtherRB.addItemListener(itemListener); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/TreeChangePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/TreeChangePanel.java index 6e153decfa..8edc137bd5 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/TreeChangePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/tree/TreeChangePanel.java @@ -21,10 +21,11 @@ import javax.swing.*; import docking.widgets.label.GDLabel; import docking.widgets.label.GIconLabel; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors; import generic.theme.GThemeDefaults.Colors.Messages; import ghidra.util.layout.PairLayout; -import resources.ResourceManager; +import resources.Icons; /** * Panel to show whether tree name and tree structure changed. @@ -41,9 +42,8 @@ class TreeChangePanel extends JPanel { private JLabel nameIconLabel; private JLabel structureIconLabel; - private final static ImageIcon CHANGED_ICON = ResourceManager.loadImage("images/changed16.gif"); - private final static ImageIcon NO_CHANGE_ICON = - ResourceManager.loadImage("images/EmptyIcon16.gif"); + private final static Icon CHANGED_ICON = new GIcon("icon.plugin.merge.changed"); + private final static Icon NO_CHANGE_ICON = Icons.EMPTY_ICON; private final static Color CHANGED_COLOR = Colors.FOREGROUND; private final static Color NO_CHANGE_COLOR = Messages.HINT; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/nav/NavigatableIconFactory.java b/Ghidra/Features/Base/src/main/java/ghidra/app/nav/NavigatableIconFactory.java index e4b00cd957..8899e862ac 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/nav/NavigatableIconFactory.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/nav/NavigatableIconFactory.java @@ -21,6 +21,7 @@ import java.awt.Point; import javax.swing.Icon; import javax.swing.ImageIcon; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors.Palette; import resources.MultiIcon; import resources.ResourceManager; @@ -29,8 +30,7 @@ import resources.icons.TranslateIcon; public class NavigatableIconFactory { - private static final ImageIcon SNAPSHOT_ICON = - ResourceManager.loadImage("images/camera-photo.png"); + private static final Icon SNAPSHOT_ICON = new GIcon("icon.provider.clone"); public static ImageIcon createSnapshotOverlayIcon(Icon primaryIcon) { MultiIcon newOuterIcon = new MultiIcon(primaryIcon); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/assembler/AssemblyDualTextField.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/assembler/AssemblyDualTextField.java index 9e99207530..32d6e328ef 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/assembler/AssemblyDualTextField.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/assembler/AssemblyDualTextField.java @@ -28,6 +28,7 @@ import docking.widgets.autocomplete.*; import docking.widgets.label.GDLabel; import docking.widgets.textfield.TextFieldLinker; import generic.theme.GColor; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors; import ghidra.GhidraApplicationLayout; import ghidra.GhidraLaunchable; @@ -43,7 +44,6 @@ import ghidra.program.model.address.Address; import ghidra.program.model.lang.LanguageID; import ghidra.program.model.listing.Instruction; import ghidra.util.NumericUtilities; -import resources.ResourceManager; /** * A pair of text fields suitable for guided assembly @@ -336,7 +336,7 @@ public class AssemblyDualTextField { @Override protected void addContent(JPanel content) { Box controls = Box.createHorizontalBox(); - Icon icon = ResourceManager.loadImage("images/question_zero.png"); + Icon icon = new GIcon("icon.plugin.assembler.question"); EmptyBorderToggleButton button = new EmptyBorderToggleButton(icon); button.setToolTipText("Exhaust unspecified bits, otherwise zero them"); button.addActionListener((e) -> { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/BookmarkNavigator.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/BookmarkNavigator.java index 4a52a9030b..bf29ce1268 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/BookmarkNavigator.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/BookmarkNavigator.java @@ -17,11 +17,12 @@ package ghidra.app.plugin.core.bookmark; import java.awt.Color; -import javax.swing.ImageIcon; +import javax.swing.Icon; import org.apache.commons.lang3.StringUtils; import generic.theme.GColor; +import generic.theme.GIcon; import ghidra.app.services.*; import ghidra.program.model.address.Address; import ghidra.program.model.address.AddressSet; @@ -29,7 +30,6 @@ import ghidra.program.model.listing.*; import ghidra.program.util.MarkerLocation; import ghidra.util.HTMLUtilities; import ghidra.util.Swing; -import resources.ResourceManager; /** * Handles navigation/display of bookmarks in the browser marker margins. @@ -38,13 +38,12 @@ public class BookmarkNavigator { private static final int BIG_CHANGE = 1000; - final static ImageIcon NOTE_ICON = ResourceManager.loadImage("images/notes.gif"); - final static ImageIcon INFO_ICON = ResourceManager.loadImage("images/information.png"); - final static ImageIcon WARNING_ICON = ResourceManager.loadImage("images/warning.png"); - final static ImageIcon ERROR_ICON = ResourceManager.loadImage("images/edit-delete.png"); - final static ImageIcon ANALYSIS_ICON = - ResourceManager.loadImage("images/applications-system.png"); - final static ImageIcon DEFAULT_ICON = ResourceManager.loadImage("images/unknown.gif"); + final static Icon NOTE_ICON = new GIcon("icon.plugin.bookmark.type.note"); + final static Icon INFO_ICON = new GIcon("icon.plugin.bookmark.type.info"); + final static Icon WARNING_ICON = new GIcon("icon.plugin.bookmark.type.warning"); + final static Icon ERROR_ICON = new GIcon("icon.plugin.bookmark.type.error"); + final static Icon ANALYSIS_ICON = new GIcon("icon.plugin.bookmark.type.analysis"); + final static Icon DEFAULT_ICON = new GIcon("icon.plugin.bookmark.type.default"); final static int NOTE_PRIORITY = MarkerService.BOOKMARK_PRIORITY; final static int ERROR_PRIORITY = MarkerService.BOOKMARK_PRIORITY + BIG_CHANGE; @@ -81,7 +80,7 @@ public class BookmarkNavigator { priority = DEFAULT_PRIORITY; } - ImageIcon icon = bmt.getIcon(); + Icon icon = bmt.getIcon(); if (icon == null) { icon = DEFAULT_ICON; } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/BookmarkPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/BookmarkPlugin.java index 7759366a64..0fa54915d9 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/BookmarkPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/BookmarkPlugin.java @@ -26,6 +26,7 @@ import docking.Tool; import docking.action.*; import docking.actions.PopupActionProvider; import docking.widgets.table.GTable; +import generic.theme.GIcon; import ghidra.app.CorePluginPackage; import ghidra.app.events.ProgramSelectionPluginEvent; import ghidra.app.plugin.PluginCategoryNames; @@ -43,7 +44,8 @@ import ghidra.program.util.*; import ghidra.util.Msg; import ghidra.util.table.SelectionNavigationAction; import ghidra.util.task.SwingUpdateManager; -import resources.*; +import resources.Icons; +import resources.MultiIconBuilder; /** * Plugin to for adding/deleting/editing bookmarks. @@ -115,7 +117,7 @@ public class BookmarkPlugin extends ProgramPlugin tool.addAction(addAction); MultiIconBuilder builder = new MultiIconBuilder(Icons.CONFIGURE_FILTER_ICON); - builder.addLowerRightIcon(ResourceManager.loadImage("images/check.png")); + builder.addLowerRightIcon(new GIcon("icon.plugin.bookmark.add")); Icon filterTypesChanged = builder.build(); Icon filterTypesUnchanged = Icons.CONFIGURE_FILTER_ICON; DockingAction filterAction = new DockingAction("Filter Bookmarks", getName()) { @@ -150,7 +152,7 @@ public class BookmarkPlugin extends ProgramPlugin provider.delete(); } }; - Icon icon = ResourceManager.loadImage("images/edit-delete.png"); + Icon icon = new GIcon("icon.plugin.bookmark.delete"); deleteAction.setKeyBindingData(new KeyBindingData(KeyEvent.VK_DELETE, 0)); deleteAction.setPopupMenuData(new MenuData(new String[] { "Delete" }, icon)); deleteAction.setDescription("Delete Selected Bookmarks"); @@ -164,7 +166,7 @@ public class BookmarkPlugin extends ProgramPlugin select(provider.getBookmarkLocations()); } }; - icon = ResourceManager.loadImage("images/text_align_justify.png"); + icon = new GIcon("icon.plugin.bookmark.select"); selectionAction.setPopupMenuData( new MenuData(new String[] { "Select Bookmark Locations" }, icon)); selectionAction.setToolBarData(new ToolBarData(icon)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/CreateBookmarkDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/CreateBookmarkDialog.java index ec815e7a67..986bd75627 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/CreateBookmarkDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/bookmark/CreateBookmarkDialog.java @@ -49,10 +49,6 @@ public class CreateBookmarkDialog extends DialogComponentProvider { private JTextField commentTextField; private JCheckBox selectionCB; - /** - * Creates new CreateBookmarkDialog - * - */ CreateBookmarkDialog(BookmarkPlugin plugin, CodeUnit cu, boolean hasSelection) { super(BookmarkType.NOTE + " Bookmark", true, true, true, false); @@ -71,6 +67,7 @@ public class CreateBookmarkDialog extends DialogComponentProvider { setHelpLocation(new HelpLocation("BookmarkPlugin", "CreateBookmarkDialog")); } + @Override public void dispose() { this.plugin = null; this.program = null; @@ -202,7 +199,7 @@ public class CreateBookmarkDialog extends DialogComponentProvider { gbc.anchor = GridBagConstraints.WEST; mainPanel.add(commentTextField, gbc); - ImageIcon icon = BookmarkNavigator.NOTE_ICON; + Icon icon = BookmarkNavigator.NOTE_ICON; JLabel imageLabel = new GIconLabel(icon); imageLabel.setPreferredSize( new Dimension(icon.getIconWidth() + 20, icon.getIconHeight() + 20)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/CallTreePlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/CallTreePlugin.java index 61a457b56b..797ffd5954 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/CallTreePlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/CallTreePlugin.java @@ -23,6 +23,7 @@ import javax.swing.Icon; import docking.ActionContext; import docking.action.DockingAction; import docking.action.MenuData; +import generic.theme.GIcon; import ghidra.app.CorePluginPackage; import ghidra.app.context.ListingActionContext; import ghidra.app.plugin.PluginCategoryNames; @@ -37,7 +38,6 @@ import ghidra.program.model.symbol.ReferenceManager; import ghidra.program.util.ProgramLocation; import ghidra.util.HelpLocation; import resources.Icons; -import resources.ResourceManager; /** * Assuming a function foo, this plugin will show all callers of foo and all @@ -58,9 +58,8 @@ import resources.ResourceManager; public class CallTreePlugin extends ProgramPlugin { static final Icon PROVIDER_ICON = Icons.ARROW_DOWN_RIGHT_ICON; - static final Icon FUNCTION_ICON = ResourceManager.loadImage("images/FunctionScope.gif"); - static final Icon RECURSIVE_ICON = - ResourceManager.loadImage("images/arrow_rotate_clockwise.png"); + static final Icon FUNCTION_ICON = new GIcon("icon.plugin.calltree.function"); + static final Icon RECURSIVE_ICON = new GIcon("icon.plugin.calltree.recursive"); private List providers = new ArrayList<>(); private DockingAction showCallTreeFromMenuAction; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/CallTreeProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/CallTreeProvider.java index 058c67bb9d..52ee26081e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/CallTreeProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/CallTreeProvider.java @@ -33,6 +33,7 @@ import docking.widgets.tree.*; import docking.widgets.tree.support.GTreeSelectionEvent.EventOrigin; import docking.widgets.tree.support.GTreeSelectionListener; import docking.widgets.tree.tasks.GTreeExpandAllTask; +import generic.theme.GIcon; import ghidra.app.events.ProgramLocationPluginEvent; import ghidra.app.events.ProgramSelectionPluginEvent; import ghidra.app.services.GoToService; @@ -51,18 +52,18 @@ import ghidra.util.exception.CancelledException; import ghidra.util.task.SwingUpdateManager; import ghidra.util.task.TaskMonitor; import resources.Icons; -import resources.ResourceManager; public class CallTreeProvider extends ComponentProviderAdapter implements DomainObjectListener { static final String EXPAND_ACTION_NAME = "Fully Expand Selected Nodes"; static final String TITLE = "Function Call Trees"; - private static final Icon EMPTY_ICON = ResourceManager.loadImage("images/EmptyIcon16.gif"); + private static final Icon EMPTY_ICON = Icons.EMPTY_ICON; private static final Icon EXPAND_ICON = Icons.EXPAND_ALL_ICON; private static final Icon COLLAPSE_ICON = Icons.COLLAPSE_ALL_ICON; - private static Icon REFRESH_ICON = Icons.REFRESH_ICON; - private static Icon REFRESH_NOT_NEEDED_ICON = ResourceManager.getDisabledIcon(REFRESH_ICON, 60); + private static Icon REFRESH_ICON = new GIcon("icon.plugin.calltree.refresh"); + private static Icon REFRESH_NOT_NEEDED_ICON = + new GIcon("icon.plugin.calltree.refresh.not.needed"); private static final String RECURSE_DEPTH_PROPERTY_NAME = "call.tree.recurse.depth"; private static final String DEFAULT_RECURSE_DEPTH = "5"; @@ -365,9 +366,9 @@ public class CallTreeProvider extends ComponentProviderAdapter implements Domain doUpdate(); } }; - filterDuplicates.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/application_double.png"), - filterOptionsToolbarGroup, "1")); + filterDuplicates + .setToolBarData(new ToolBarData(new GIcon("icon.plugin.calltree.filter.duplicates"), + filterOptionsToolbarGroup, "1")); filterDuplicates.setSelected(true); filterDuplicates .setHelpLocation(new HelpLocation(plugin.getName(), "Call_Tree_Action_Filter")); @@ -503,7 +504,7 @@ public class CallTreeProvider extends ComponentProviderAdapter implements Domain return true; } }; - ImageIcon icon = ResourceManager.loadImage("images/text_align_justify.png"); + Icon icon = new GIcon("icon.plugin.calltree.filter.select.source"); selectSourceAction.setPopupMenuData( new MenuData(new String[] { "Select Call Source" }, icon, selectionMenuGroup)); selectSourceAction.setHelpLocation( @@ -581,8 +582,7 @@ public class CallTreeProvider extends ComponentProviderAdapter implements Domain return currentFunction != null; } }; - homeAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/go-home.png"), homeToolbarGroup)); + homeAction.setToolBarData(new ToolBarData(Icons.HOME_ICON, homeToolbarGroup)); homeAction.setHelpLocation(new HelpLocation(plugin.getName(), "Call_Tree_Action_Home")); tool.addLocalAction(this, homeAction); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/DeadEndNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/DeadEndNode.java index 96e19bb588..bce14bc4f6 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/DeadEndNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/DeadEndNode.java @@ -15,6 +15,14 @@ */ package ghidra.app.plugin.core.calltree; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +import javax.swing.Icon; + +import docking.widgets.tree.GTreeNode; +import generic.theme.GIcon; import ghidra.program.model.address.Address; import ghidra.program.model.listing.Function; import ghidra.program.model.listing.Program; @@ -23,18 +31,9 @@ import ghidra.program.util.ProgramLocation; import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - -import javax.swing.Icon; - -import resources.ResourceManager; -import docking.widgets.tree.GTreeNode; - public class DeadEndNode extends CallNode { - private static final Icon ICON = ResourceManager.loadImage("images/stopNode.png"); + private static final Icon ICON = new GIcon("icon.plugin.calltree.node.dead.end"); private final Reference reference; private String name; @@ -100,6 +99,6 @@ public class DeadEndNode extends CallNode { @Override public List generateChildren(TaskMonitor monitor) throws CancelledException { - return new ArrayList(); + return new ArrayList<>(); } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/ExternalCallNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/ExternalCallNode.java index 8e9fbc8655..d4269e8791 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/ExternalCallNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/calltree/ExternalCallNode.java @@ -22,6 +22,7 @@ import java.util.concurrent.atomic.AtomicInteger; import javax.swing.Icon; import docking.widgets.tree.GTreeNode; +import generic.theme.GIcon; import ghidra.program.model.address.Address; import ghidra.program.model.listing.Function; import ghidra.program.util.FunctionSignatureFieldLocation; @@ -29,12 +30,11 @@ import ghidra.program.util.ProgramLocation; import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; import resources.MultiIcon; -import resources.ResourceManager; import resources.icons.TranslateIcon; public class ExternalCallNode extends CallNode { - private static final Icon EXTERNAL_ICON = ResourceManager.loadImage("images/package.png"); + private static final Icon EXTERNAL_ICON = new GIcon("icon.plugin.calltree.node.external"); private final Icon EXTERNAL_FUNCTION_ICON; private final Icon baseIcon; @@ -77,7 +77,7 @@ public class ExternalCallNode extends CallNode { @Override public List generateChildren(TaskMonitor monitor) throws CancelledException { - return new ArrayList(); + return new ArrayList<>(); } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/checksums/ComputeChecksumsProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/checksums/ComputeChecksumsProvider.java index 26564cb033..6b06ef4886 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/checksums/ComputeChecksumsProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/checksums/ComputeChecksumsProvider.java @@ -24,6 +24,7 @@ import javax.swing.*; import docking.ActionContext; import docking.action.*; import docking.widgets.label.GDLabel; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors; import ghidra.app.context.ProgramContextAction; import ghidra.framework.plugintool.ComponentProviderAdapter; @@ -31,8 +32,6 @@ import ghidra.util.HelpLocation; import ghidra.util.classfinder.ClassSearcher; import ghidra.util.table.GhidraTable; import ghidra.util.task.TaskLauncher; -import resources.Icons; -import resources.ResourceManager; /** * Provider to invoke computation of various checksums and display them in a table. @@ -233,7 +232,8 @@ public class ComputeChecksumsProvider extends ComponentProviderAdapter { }; computeAction.setHelpLocation(new HelpLocation("ComputeChecksumsPlugin", "compute")); computeAction.setEnabled(true); - computeAction.setToolBarData(new ToolBarData(Icons.REFRESH_ICON, null)); + computeAction + .setToolBarData(new ToolBarData(new GIcon("icon.plugin.checksum.compute"), null)); computeAction.setDescription("Refreshes checksums"); selectionAction = new ToggleDockingAction("On Selection", plugin.getName()) { @@ -251,7 +251,7 @@ public class ComputeChecksumsProvider extends ComponentProviderAdapter { selectionAction.setHelpLocation(new HelpLocation("ComputeChecksumsPlugin", "On_Selection")); selectionAction.setEnabled(plugin.hasSelection()); selectionAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/NextSelectionBlock16.gif"), null)); + new ToolBarData(new GIcon("icon.plugin.checksum.select"), null)); selectionAction.setDescription("When toggled, generates checksums on " + "selection. Otherwise checksums are generated over the entire program"); @@ -269,7 +269,7 @@ public class ComputeChecksumsProvider extends ComponentProviderAdapter { showHexAction.setHelpLocation(new HelpLocation("ComputeChecksumsPlugin", "As_Hex")); showHexAction.setEnabled(true); showHexAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/hexData.png"), null)); + new ToolBarData(new GIcon("icon.plugin.checksum.show.hex"), null)); showHexAction.setDescription("Toggle to show the hex values instead of decimal values."); xorAction = new ToggleDockingAction("XOR Checksum Values", plugin.getName()) { @@ -289,7 +289,7 @@ public class ComputeChecksumsProvider extends ComponentProviderAdapter { xorAction.setHelpLocation(new HelpLocation("ComputeChecksumsPlugin", "xor")); xorAction.setEnabled(true); xorAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/xor.png"), null)); + new ToolBarData(new GIcon("icon.plugin.checksum.xor"), null)); xorAction.setDescription("Toggle to recompute values with a xor operation."); carryAction = new ToggleDockingAction("Carry Checksum Values", plugin.getName()) { @@ -310,7 +310,7 @@ public class ComputeChecksumsProvider extends ComponentProviderAdapter { carryAction.setHelpLocation(new HelpLocation("ComputeChecksumsPlugin", "carry")); carryAction.setEnabled(true); carryAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/carry.png"), null)); + new ToolBarData(new GIcon("icon.plugin.checksum.carry"), null)); carryAction.setDescription("Toggle to recompute values with a carry operation."); onesCompAction = new ToggleDockingAction("Ones Complement", plugin.getName()) { @@ -330,7 +330,7 @@ public class ComputeChecksumsProvider extends ComponentProviderAdapter { onesCompAction.setHelpLocation(new HelpLocation("ComputeChecksumsPlugin", "ones_comp")); onesCompAction.setEnabled(true); onesCompAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/onesComplement.png"), null)); + new ToolBarData(new GIcon("icon.plugin.checksum.ones.complement"), null)); onesCompAction.setDescription("Toggle to recompute values with a one's complement."); twosCompAction = new ToggleDockingAction("Twos Complement", plugin.getName()) { @@ -350,7 +350,7 @@ public class ComputeChecksumsProvider extends ComponentProviderAdapter { twosCompAction.setHelpLocation(new HelpLocation("ComputeChecksumsPlugin", "twos_comp")); twosCompAction.setEnabled(true); twosCompAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/twosComplement.png"), null)); + new ToolBarData(new GIcon("icon.plugin.checksum.twos.complement"), null)); twosCompAction.setDescription("Toggle to recompute values with a two's complement."); tool.addLocalAction(this, onesCompAction); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clipboard/ClipboardPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clipboard/ClipboardPlugin.java index 31f5717463..8f37c8a0b0 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clipboard/ClipboardPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clipboard/ClipboardPlugin.java @@ -29,6 +29,7 @@ import javax.swing.event.ChangeListener; import docking.*; import docking.action.*; import docking.dnd.GClipboard; +import generic.theme.GIcon; import ghidra.app.CorePluginPackage; import ghidra.app.context.ListingActionContext; import ghidra.app.plugin.PluginCategoryNames; @@ -43,7 +44,6 @@ import ghidra.program.model.listing.Program; import ghidra.util.HelpLocation; import ghidra.util.Msg; import ghidra.util.task.*; -import resources.ResourceManager; //@formatter:off @PluginInfo( @@ -361,7 +361,7 @@ public class ClipboardPlugin extends ProgramPlugin implements ClipboardOwner, Cl this.clipboardService = clipboardService; setPopupMenuData(new MenuData(new String[] { "Copy" }, "Clipboard")); - setToolBarData(new ToolBarData(ResourceManager.loadImage("images/page_white_copy.png"), + setToolBarData(new ToolBarData(new GIcon("icon.plugin.clipboard.copy"), "Clipboard")); setKeyBindingData(new KeyBindingData(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK)); setHelpLocation(new HelpLocation("ClipboardPlugin", "Copy")); @@ -395,7 +395,7 @@ public class ClipboardPlugin extends ProgramPlugin implements ClipboardOwner, Cl setPopupMenuData(new MenuData(new String[] { "Paste" }, "Clipboard")); setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/page_paste.png"), "Clipboard")); + new ToolBarData(new GIcon("icon.plugin.clipboard.paste"), "Clipboard")); setKeyBindingData(new KeyBindingData(KeyEvent.VK_V, InputEvent.CTRL_DOWN_MASK)); setHelpLocation(new HelpLocation("ClipboardPlugin", "Paste")); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/AbstractCodeBrowserPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/AbstractCodeBrowserPlugin.java index 72774ff971..92df240190 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/AbstractCodeBrowserPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/AbstractCodeBrowserPlugin.java @@ -20,7 +20,7 @@ import java.math.BigInteger; import java.util.ArrayList; import java.util.List; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -31,6 +31,7 @@ import docking.widgets.fieldpanel.field.Field; import docking.widgets.fieldpanel.support.FieldLocation; import docking.widgets.fieldpanel.support.FieldSelection; import generic.theme.GColor; +import generic.theme.GIcon; import ghidra.GhidraOptions; import ghidra.app.events.ProgramHighlightPluginEvent; import ghidra.app.events.ProgramSelectionPluginEvent; @@ -56,7 +57,6 @@ import ghidra.program.model.listing.Program; import ghidra.program.util.ProgramLocation; import ghidra.program.util.ProgramSelection; import ghidra.util.*; -import resources.ResourceManager; public abstract class AbstractCodeBrowserPlugin

extends Plugin implements CodeViewerService, CodeFormatService, OptionsChangeListener, FormatModelListener, @@ -74,8 +74,8 @@ public abstract class AbstractCodeBrowserPlugin

ex //@formatter:on // - Icon - - private ImageIcon CURSOR_LOC_ICON = - ResourceManager.loadImage("images/cursor_arrow_flipped.gif"); + private static final Icon CURSOR_LOC_ICON = + new GIcon("icon.plugin.codebrowser.cursor.location"); protected final P connectedProvider; protected List

disconnectedProviders = new ArrayList<>(); protected FormatManager formatMgr; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/CodeBrowserSelectionPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/CodeBrowserSelectionPlugin.java index 50860c6f18..ed427d83e5 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/CodeBrowserSelectionPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/CodeBrowserSelectionPlugin.java @@ -15,10 +15,11 @@ */ package ghidra.app.plugin.core.codebrowser; -import javax.swing.ImageIcon; +import javax.swing.Icon; import docking.action.builder.ActionBuilder; import docking.tool.ToolConstants; +import generic.theme.GIcon; import ghidra.GhidraOptions; import ghidra.app.CorePluginPackage; import ghidra.app.plugin.PluginCategoryNames; @@ -38,7 +39,6 @@ import ghidra.util.datastruct.Accumulator; import ghidra.util.exception.CancelledException; import ghidra.util.table.*; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; /** * Plugin for adding some basic selection actions for Code Browser Listings. @@ -129,7 +129,7 @@ public class CodeBrowserSelectionPlugin extends Plugin { GhidraProgramTableModel

model = createTableModel(program, codeUnits, selection); String title = "Selection Table"; - ImageIcon markerIcon = ResourceManager.loadImage("images/searchm_obj.gif"); + Icon markerIcon = new GIcon("icon.plugin.codebrowser.cursor.marker"); TableComponentProvider
tableProvider = tableService.showTableWithMarkers(title + " " + model.getName(), "Selection", model, PluginConstants.SEARCH_HIGHLIGHT_COLOR, markerIcon, title, null); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/CodeViewerProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/CodeViewerProvider.java index e506d03b6d..4804043d6a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/CodeViewerProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/CodeViewerProvider.java @@ -37,6 +37,7 @@ import docking.widgets.fieldpanel.FieldPanel; import docking.widgets.fieldpanel.HoverHandler; import docking.widgets.fieldpanel.internal.FieldPanelCoordinator; import docking.widgets.fieldpanel.support.*; +import generic.theme.GIcon; import ghidra.app.nav.*; import ghidra.app.plugin.core.clipboard.CodeBrowserClipboardProvider; import ghidra.app.plugin.core.codebrowser.actions.*; @@ -56,7 +57,6 @@ import ghidra.program.model.listing.*; import ghidra.program.util.*; import ghidra.util.HelpLocation; import ghidra.util.Swing; -import resources.ResourceManager; public class CodeViewerProvider extends NavigatableComponentProviderAdapter implements ProgramLocationListener, ProgramSelectionListener, Draggable, Droppable, @@ -67,12 +67,12 @@ public class CodeViewerProvider extends NavigatableComponentProviderAdapter private static final String TITLE = NAME + ": "; private static final Icon LISTING_FORMAT_EXPAND_ICON = - ResourceManager.loadImage("images/field.header.down.png"); + new GIcon("icon.plugin.codebrowser.format.expand"); private static final Icon LISTING_FORMAT_COLLAPSE_ICON = - ResourceManager.loadImage("images/field.header.up.png"); + new GIcon("icon.plugin.codebrowser.format.collapse"); - private static final Icon HOVER_ON_ICON = ResourceManager.loadImage("images/hoverOn.gif"); - private static final Icon HOVER_OFF_ICON = ResourceManager.loadImage("images/hoverOff.gif"); + private static final Icon HOVER_ON_ICON = new GIcon("icon.plugin.codebrowser.hover.on"); + private static final Icon HOVER_OFF_ICON = new GIcon("icon.plugin.codebrowser.hover.off"); private static final String HOVER_MODE = "Hover Mode"; private static final String DIVIDER_LOCATION = "DividerLocation"; @@ -130,7 +130,7 @@ public class CodeViewerProvider extends NavigatableComponentProviderAdapter ComponentProvider.registerProviderNameOwnerChange(OLD_NAME, owner, NAME, owner); setConnected(isConnected); - setIcon(ResourceManager.loadImage("images/Browser.gif")); + setIcon(new GIcon("icon.plugin.codebrowser.provider")); if (!isConnected) { setTransient(); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/MarkAndSelectionAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/MarkAndSelectionAction.java index e16ec4d06c..edcfe3a23a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/MarkAndSelectionAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/MarkAndSelectionAction.java @@ -16,11 +16,11 @@ package ghidra.app.plugin.core.codebrowser; import javax.swing.Icon; -import javax.swing.ImageIcon; import docking.ActionContext; import docking.action.*; import docking.tool.ToolConstants; +import generic.theme.GIcon; import ghidra.app.context.NavigatableActionContext; import ghidra.app.nav.Navigatable; import ghidra.app.util.HelpTopics; @@ -28,8 +28,6 @@ import ghidra.program.model.address.Address; import ghidra.program.util.ProgramLocation; import ghidra.program.util.ProgramSelection; import ghidra.util.HelpLocation; -import resources.MultiIconBuilder; -import resources.ResourceManager; /** * Actions for creating a selection using two distinct steps. The first time the action @@ -61,17 +59,8 @@ public class MarkAndSelectionAction extends ToggleDockingAction { } private void buildIcons() { - ImageIcon baseImage = ResourceManager.loadImage("images/MarkSelection.png"); - ImageIcon mediaStart = ResourceManager.loadImage("images/media-playback-start.png"); - ImageIcon mediaStop = ResourceManager.loadImage("images/media-playback-stop.png"); - - MultiIconBuilder builder = new MultiIconBuilder(baseImage); - builder.addLowerRightIcon(mediaStart, 12, 12); - unarmedIcon = builder.build(); - - builder = new MultiIconBuilder(baseImage); - builder.addLowerRightIcon(mediaStop, 12, 12); - armedIcon = builder.build(); + unarmedIcon = new GIcon("icon.plugin.codebrowser.mark.and.select.unarmed"); + armedIcon = new GIcon("icon.plugin.codebrowser.mark.and.select.armed"); } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/actions/CloneCodeViewerAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/actions/CloneCodeViewerAction.java index 968754cf06..ffec11468f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/actions/CloneCodeViewerAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/actions/CloneCodeViewerAction.java @@ -15,19 +15,17 @@ */ package ghidra.app.plugin.core.codebrowser.actions; - -import ghidra.app.context.ProgramActionContext; -import ghidra.app.plugin.core.codebrowser.CodeViewerProvider; -import ghidra.util.HelpLocation; - import java.awt.event.InputEvent; import java.awt.event.KeyEvent; -import javax.swing.ImageIcon; +import javax.swing.Icon; -import resources.ResourceManager; import docking.ActionContext; import docking.action.*; +import generic.theme.GIcon; +import ghidra.app.context.ProgramActionContext; +import ghidra.app.plugin.core.codebrowser.CodeViewerProvider; +import ghidra.util.HelpLocation; public class CloneCodeViewerAction extends DockingAction { @@ -36,27 +34,26 @@ public class CloneCodeViewerAction extends DockingAction { public CloneCodeViewerAction(String owner, CodeViewerProvider provider) { super("Code Viewer Clone", owner); this.provider = provider; - ImageIcon image = ResourceManager.loadImage("images/camera-photo.png"); - setToolBarData( new ToolBarData( image, "zzzz" ) ); + Icon image = new GIcon("icon.provider.clone"); + setToolBarData(new ToolBarData(image, "zzzz")); setDescription("Create a snapshot (disconnected) copy of this Listing window "); setHelpLocation(new HelpLocation("Snapshots", "Snapshots_Start")); - setKeyBindingData( new KeyBindingData( KeyEvent.VK_T, - InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK ) ); + setKeyBindingData(new KeyBindingData(KeyEvent.VK_T, + InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK)); } - + @Override - public boolean isEnabledForContext( ActionContext context ) { + public boolean isEnabledForContext(ActionContext context) { if (context instanceof ProgramActionContext) { - ProgramActionContext programContext = (ProgramActionContext)context; + ProgramActionContext programContext = (ProgramActionContext) context; return programContext.getProgram() != null; } return false; } - + @Override public void actionPerformed(ActionContext context) { provider.cloneWindow(); } } - diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ApplyAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ApplyAction.java index cbae61492c..0f4f4fcefb 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ApplyAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ApplyAction.java @@ -15,12 +15,12 @@ */ package ghidra.app.plugin.core.compositeeditor; -import javax.swing.ImageIcon; +import javax.swing.Icon; import docking.ActionContext; +import generic.theme.GIcon; import ghidra.app.util.datatype.EmptyCompositeException; import ghidra.program.model.data.InvalidDataTypeException; -import resources.ResourceManager; /** * ApplyAction is an action for applying editor changes. @@ -29,7 +29,7 @@ public class ApplyAction extends CompositeEditorTableAction { public final static String ACTION_NAME = "Apply Editor Changes"; private final static String GROUP_NAME = BASIC_ACTION_GROUP; - private final static ImageIcon ICON = ResourceManager.loadImage("images/disk.png"); + private final static Icon ICON = new GIcon("icon.plugin.composite.editor.apply"); private final static String[] POPUP_PATH = new String[] { "Apply Edits" }; public ApplyAction(CompositeEditorProvider provider) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ArrayAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ArrayAction.java index 2f94329ad0..124f21eb65 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ArrayAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ArrayAction.java @@ -17,13 +17,13 @@ package ghidra.app.plugin.core.compositeeditor; import java.awt.event.KeyEvent; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.KeyStroke; import docking.ActionContext; import docking.action.KeyBindingData; +import generic.theme.GIcon; import ghidra.util.exception.UsrException; -import resources.ResourceManager; /** * Action for use in the composite data type editor. @@ -31,7 +31,7 @@ import resources.ResourceManager; */ public class ArrayAction extends CompositeEditorTableAction { - private final static ImageIcon ICON = ResourceManager.loadImage("images/Array.png"); + private final static Icon ICON = new GIcon("icon.plugin.composite.editor.array"); public final static String ACTION_NAME = "Create Array"; private final static String GROUP_NAME = COMPONENT_ACTION_GROUP; private final static String DESCRIPTION = "Create an array"; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/BitFieldEditorDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/BitFieldEditorDialog.java index adf37c72ae..e0db5a1d77 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/BitFieldEditorDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/BitFieldEditorDialog.java @@ -23,16 +23,18 @@ import docking.*; import docking.action.*; import docking.menu.DockingCheckboxMenuItemUI; import docking.widgets.OptionDialog; +import generic.theme.GIcon; import ghidra.app.services.DataTypeManagerService; import ghidra.program.model.data.*; import ghidra.util.HelpLocation; -import resources.ResourceManager; public class BitFieldEditorDialog extends DialogComponentProvider { - private static final Icon ADD_ICON = ResourceManager.loadImage("images/Plus.png"); - private static final Icon EDIT_ICON = ResourceManager.loadImage("images/move.png"); - private static final Icon DELETE_ICON = ResourceManager.loadImage("images/edit-delete.png"); + //@formatter:off + private static final Icon ADD_ICON = new GIcon("icon.plugin.composite.editor.bit.field.dialog.add"); + private static final Icon EDIT_ICON = new GIcon("icon.plugin.composite.editor.bit.field.dialog.edit"); + private static final Icon DELETE_ICON = new GIcon("icon.plugin.composite.editor.bit.field.dialog.delete"); + //@formatter:on private DataTypeManagerService dtmService; private Composite composite; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/BitFieldEditorPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/BitFieldEditorPanel.java index 3a631a1533..00fe100de6 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/BitFieldEditorPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/BitFieldEditorPanel.java @@ -28,6 +28,7 @@ import docking.ActionContext; import docking.widgets.DropDownSelectionTextField; import docking.widgets.OptionDialog; import docking.widgets.label.GDLabel; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors; import ghidra.app.plugin.core.compositeeditor.BitFieldPlacementComponent.BitAttributes; import ghidra.app.plugin.core.compositeeditor.BitFieldPlacementComponent.BitFieldAllocation; @@ -38,7 +39,6 @@ import ghidra.program.model.data.*; import ghidra.program.model.data.Composite; import ghidra.util.data.DataTypeParser.AllowedDataTypes; import ghidra.util.layout.*; -import resources.ResourceManager; /** * BitFieldEditorPanel provides the ability to add or modify bitfields @@ -46,8 +46,10 @@ import resources.ResourceManager; */ public class BitFieldEditorPanel extends JPanel { - private static final Icon DECREMENT_ICON = ResourceManager.loadImage("images/Minus.png"); - private static final Icon INCREMENT_ICON = ResourceManager.loadImage("images/Plus.png"); + //@formatter:off + private static final Icon DECREMENT_ICON = new GIcon("icon.plugin.composite.editor.bit.field.editor.decrement"); + private static final Icon INCREMENT_ICON = new GIcon("icon.plugin.composite.editor.bit.field.editor.increment"); + //@formatter:on private DataTypeManagerService dtmService; private Composite composite; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ClearAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ClearAction.java index f7ac6bf4c6..a75a0af547 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ClearAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ClearAction.java @@ -17,20 +17,19 @@ package ghidra.app.plugin.core.compositeeditor; import java.awt.event.KeyEvent; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.KeyStroke; import docking.ActionContext; import docking.action.KeyBindingData; -import ghidra.util.Msg; +import generic.theme.GIcon; import ghidra.util.exception.UsrException; -import resources.ResourceManager; public class ClearAction extends CompositeEditorTableAction { public final static String ACTION_NAME = "Clear Components"; private final static String GROUP_NAME = COMPONENT_ACTION_GROUP; - private final static ImageIcon ICON = ResourceManager.loadImage("images/erase16.png"); + private final static Icon ICON = new GIcon("icon.plugin.composite.editor.clear"); private final static String[] POPUP_PATH = new String[] { "Clear" }; private final static KeyStroke KEY_STROKE = KeyStroke.getKeyStroke(KeyEvent.VK_C, 0); @@ -47,10 +46,6 @@ public class ClearAction extends CompositeEditorTableAction { try { model.clearSelectedComponents(); } - catch (OutOfMemoryError memExc) { - String errMsg = "Couldn't clear components. Out of memory."; - Msg.showError(this, null, "Out of Memory", errMsg, memExc); - } catch (UsrException ue) { model.setStatus(ue.getMessage()); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CompositeEditorProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CompositeEditorProvider.java index ca55101824..9fe4c4e392 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CompositeEditorProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CompositeEditorProvider.java @@ -22,6 +22,7 @@ import javax.swing.*; import docking.ActionContext; import docking.ComponentProvider; import docking.widgets.OptionDialog; +import generic.theme.GIcon; import ghidra.app.context.ProgramActionContext; import ghidra.app.services.DataTypeManagerService; import ghidra.app.util.datatype.EmptyCompositeException; @@ -33,7 +34,6 @@ import ghidra.util.HelpLocation; import ghidra.util.datastruct.WeakDataStructureFactory; import ghidra.util.datastruct.WeakSet; import ghidra.util.exception.AssertException; -import resources.ResourceManager; /** * Editor provider for a Composite Data Type. @@ -41,8 +41,7 @@ import resources.ResourceManager; public abstract class CompositeEditorProvider extends ComponentProviderAdapter implements EditorProvider, EditorActionListener { - protected static final ImageIcon EDITOR_ICON = - ResourceManager.loadImage("images/accessories-text-editor.png"); + protected static final Icon EDITOR_ICON = new GIcon("icon.plugin.composite.editor.provider"); protected Plugin plugin; protected Category category; @@ -56,9 +55,6 @@ public abstract class CompositeEditorProvider extends ComponentProviderAdapter /** * Construct a new stack editor provider. * @param plugin owner of this provider - * @param program program for data type; may be null if data type - * is part of an archive - * @param stack the stack frame to be edited */ protected CompositeEditorProvider(Plugin plugin) { super(plugin.getTool(), "Composite Editor", plugin.getName()); @@ -283,6 +279,7 @@ public abstract class CompositeEditorProvider extends ComponentProviderAdapter /** * Prompts the user if the editor has unsaved changes. Saves the changes if * the user indicates to do so. + * @param allowCancel true if allowed to cancel * @return 0 if the user canceled; 1 if the user saved changes; * 2 if the user did not to save changes; 3 if there was an error when * the changes were applied. diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CreateInternalStructureAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CreateInternalStructureAction.java index f845f33353..163ee85ac8 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CreateInternalStructureAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/CreateInternalStructureAction.java @@ -17,15 +17,15 @@ package ghidra.app.plugin.core.compositeeditor; import java.util.Arrays; -import javax.swing.ImageIcon; +import javax.swing.Icon; import docking.ActionContext; +import generic.theme.GIcon; import ghidra.util.Swing; import ghidra.util.exception.CancelledException; import ghidra.util.exception.UsrException; import ghidra.util.task.TaskLauncher; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; /** * Action for use in the structure data type editor. @@ -33,8 +33,7 @@ import resources.ResourceManager; */ public class CreateInternalStructureAction extends CompositeEditorTableAction { - private final static ImageIcon ICON = - ResourceManager.loadImage("images/cstruct.png"); + private final static Icon ICON = new GIcon("icon.plugin.composite.editor.create"); public final static String ACTION_NAME = "Create Structure From Selection"; private final static String GROUP_NAME = COMPONENT_ACTION_GROUP; private final static String DESCRIPTION = diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/DeleteAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/DeleteAction.java index cd236c29df..f8c5062b8b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/DeleteAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/DeleteAction.java @@ -17,22 +17,22 @@ package ghidra.app.plugin.core.compositeeditor; import java.awt.event.KeyEvent; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.KeyStroke; import docking.ActionContext; import docking.action.KeyBindingData; +import generic.theme.GIcon; import ghidra.util.exception.CancelledException; import ghidra.util.exception.UsrException; import ghidra.util.task.TaskLauncher; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; public class DeleteAction extends CompositeEditorTableAction { public final static String ACTION_NAME = "Delete Components"; private final static String GROUP_NAME = COMPONENT_ACTION_GROUP; - private final static ImageIcon ICON = ResourceManager.loadImage("images/edit-delete.png"); + private final static Icon ICON = new GIcon("icon.plugin.composite.editor.delete"); private final static String[] popupPath = new String[] { "Delete" }; private final static KeyStroke KEY_STROKE = KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/DuplicateAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/DuplicateAction.java index 9fdfe0393b..fc06774ae9 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/DuplicateAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/DuplicateAction.java @@ -18,21 +18,21 @@ package ghidra.app.plugin.core.compositeeditor; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.KeyStroke; import docking.ActionContext; import docking.action.KeyBindingData; +import generic.theme.GIcon; import ghidra.util.exception.UsrException; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; /** * Action to duplicate the selected row */ public class DuplicateAction extends CompositeEditorTableAction { - private final static ImageIcon ICON = ResourceManager.loadImage("images/DuplicateData.png"); + private final static Icon ICON = new GIcon("icon.plugin.composite.editor.duplicate"); public final static String ACTION_NAME = "Duplicate Component"; private final static String GROUP_NAME = COMPONENT_ACTION_GROUP; private final static String DESCRIPTION = "Duplicate the selected component"; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/DuplicateMultipleAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/DuplicateMultipleAction.java index 4ae608dd00..86a5d5e9ca 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/DuplicateMultipleAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/DuplicateMultipleAction.java @@ -18,26 +18,26 @@ package ghidra.app.plugin.core.compositeeditor; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.KeyStroke; import docking.ActionContext; import docking.action.KeyBindingData; import docking.widgets.dialogs.NumberInputDialog; +import generic.theme.GIcon; import ghidra.util.HelpLocation; import ghidra.util.exception.CancelledException; import ghidra.util.exception.UsrException; import ghidra.util.task.TaskLauncher; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; /** * Action that allows the user to make multiple duplicates of the selected item */ public class DuplicateMultipleAction extends CompositeEditorTableAction { - private final static ImageIcon ICON = - ResourceManager.loadImage("images/MultiDuplicateData.png"); + private final static Icon ICON = + new GIcon("icon.plugin.composite.editor.duplicate.multiple"); public final static String ACTION_NAME = "Duplicate Multiple of Component"; private final static String GROUP_NAME = COMPONENT_ACTION_GROUP; private final static String DESCRIPTION = "Duplicate multiple of the selected component"; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/InsertUndefinedAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/InsertUndefinedAction.java index 72a8e6e557..abafcab546 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/InsertUndefinedAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/InsertUndefinedAction.java @@ -18,14 +18,14 @@ package ghidra.app.plugin.core.compositeeditor; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.KeyStroke; import docking.ActionContext; import docking.action.KeyBindingData; +import generic.theme.GIcon; import ghidra.program.model.data.*; import ghidra.util.exception.UsrException; -import resources.ResourceManager; /** * Action for use in the structure data type editor. @@ -33,8 +33,7 @@ import resources.ResourceManager; */ public class InsertUndefinedAction extends CompositeEditorTableAction { - private final static ImageIcon ICON = - ResourceManager.loadImage("images/Plus.png"); + private final static Icon ICON = new GIcon("icon.plugin.composite.editor.insert.undefined"); public final static String ACTION_NAME = "Insert Undefined Byte"; private final static String GROUP_NAME = COMPONENT_ACTION_GROUP; private final static String DESCRIPTION = "Insert an undefined byte before the selection"; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/MoveDownAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/MoveDownAction.java index 8758059816..615e7fca54 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/MoveDownAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/MoveDownAction.java @@ -18,13 +18,13 @@ package ghidra.app.plugin.core.compositeeditor; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.KeyStroke; import docking.ActionContext; import docking.action.KeyBindingData; +import generic.theme.GIcon; import ghidra.util.exception.UsrException; -import resources.ResourceManager; /** * Action for use in the composite data type editor. @@ -32,7 +32,7 @@ import resources.ResourceManager; */ public class MoveDownAction extends CompositeEditorTableAction { - private final static ImageIcon ICON = ResourceManager.loadImage("images/down.png"); + private final static Icon ICON = new GIcon("icon.plugin.composite.editor.move.down"); public final static String ACTION_NAME = "Move Components Down"; private final static String GROUP_NAME = COMPONENT_ACTION_GROUP; private final static String DESCRIPTION = "Move the selected components down"; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/MoveUpAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/MoveUpAction.java index 928b6e2e76..bf6a913b53 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/MoveUpAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/MoveUpAction.java @@ -18,13 +18,13 @@ package ghidra.app.plugin.core.compositeeditor; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.KeyStroke; import docking.ActionContext; import docking.action.KeyBindingData; +import generic.theme.GIcon; import ghidra.util.exception.UsrException; -import resources.ResourceManager; /** * Action for use in the composite data type editor. @@ -32,7 +32,7 @@ import resources.ResourceManager; */ public class MoveUpAction extends CompositeEditorTableAction { - private final static ImageIcon ICON = ResourceManager.loadImage("images/up.png"); + private final static Icon ICON = new GIcon("icon.plugin.composite.editor.move.up"); public final static String ACTION_NAME = "Move Components Up"; private final static String GROUP_NAME = COMPONENT_ACTION_GROUP; private final static String DESCRIPTION = "Move selected components up"; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/SearchControlPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/SearchControlPanel.java index 8e526522d2..eadb8d9e84 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/SearchControlPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/SearchControlPanel.java @@ -25,14 +25,12 @@ import javax.swing.event.DocumentListener; import docking.widgets.EmptyBorderButton; import docking.widgets.label.GLabel; -import resources.ResourceManager; +import generic.theme.GIcon; public class SearchControlPanel extends JPanel { - private static final Icon NEXT_ICON = ResourceManager.getScaledIcon( - ResourceManager.loadImage("images/go-down.tango.16.png"), 16, 16); - private static final Icon PREV_ICON = ResourceManager.getScaledIcon( - ResourceManager.loadImage("images/go-up.tango.16.png"), 16, 16); + private static final Icon NEXT_ICON = new GIcon("icon.plugin.composite.editor.search.next"); + private static final Icon PREV_ICON = new GIcon("icon.plugin.composite.editor.search.previous"); private CompositeEditorPanel editorPanel; private JTextField textField; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ShowDataTypeInTreeAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ShowDataTypeInTreeAction.java index 4fe4b8b260..6c16f9beba 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ShowDataTypeInTreeAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/ShowDataTypeInTreeAction.java @@ -19,9 +19,9 @@ import javax.swing.Icon; import docking.ActionContext; import docking.action.ToolBarData; +import generic.theme.GIcon; import ghidra.app.services.DataTypeManagerService; import ghidra.program.model.data.*; -import resources.ResourceManager; /** * Shows the editor's data type in the UI using the {@link DataTypeManagerService}. @@ -31,14 +31,13 @@ public class ShowDataTypeInTreeAction extends CompositeEditorTableAction { // This action should go after the row-based actions, which have this group: // 3_COMPONENT_EDITOR_ACTION private static final String TOOLBAR_GROUP = "4_COMPONENT_EDITOR_ACTION"; - private static final Icon ICON = ResourceManager.loadImage("images/go-home.png"); + private static final Icon ICON = new GIcon("icon.plugin.composite.editor.show.type"); public ShowDataTypeInTreeAction(CompositeEditorProvider provider) { super(provider, "Show In Data Type Manager", TOOLBAR_GROUP, null /*popupPath*/, null /*menuPath*/, ICON); - setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/go-home.png"), TOOLBAR_GROUP)); + setToolBarData(new ToolBarData(ICON, TOOLBAR_GROUP)); } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/StructureEditorProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/StructureEditorProvider.java index 43b2e35865..05723a839d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/StructureEditorProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/StructureEditorProvider.java @@ -15,19 +15,19 @@ */ package ghidra.app.plugin.core.compositeeditor; -import javax.swing.ImageIcon; +import javax.swing.Icon; +import generic.theme.GIcon; import ghidra.framework.plugintool.Plugin; import ghidra.program.model.data.Structure; -import resources.ResourceManager; /** * Editor for a Structure Data Type. */ public class StructureEditorProvider extends CompositeEditorProvider { - protected static final ImageIcon STRUCTURE_EDITOR_ICON = - ResourceManager.loadImage("images/cstruct.png"); + protected static final Icon STRUCTURE_EDITOR_ICON = + new GIcon("icon.plugin.composite.editor.provider.structure"); public StructureEditorProvider(Plugin plugin, Structure structureDataType, boolean showHexNumbers) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/UnionEditorProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/UnionEditorProvider.java index 3ac09cc3c9..9a17a3086e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/UnionEditorProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/UnionEditorProvider.java @@ -15,19 +15,19 @@ */ package ghidra.app.plugin.core.compositeeditor; -import javax.swing.ImageIcon; +import javax.swing.Icon; +import generic.theme.GIcon; import ghidra.framework.plugintool.Plugin; import ghidra.program.model.data.Union; -import resources.ResourceManager; /** * Editor for a Union Data Type. */ public class UnionEditorProvider extends CompositeEditorProvider { - protected static final ImageIcon UNION_EDITOR_ICON = - ResourceManager.loadImage("images/cUnion.png"); + protected static final Icon UNION_EDITOR_ICON = + new GIcon("icon.plugin.composite.editor.provider.union"); public UnionEditorProvider(Plugin plugin, Union unionDataType, boolean showInHex) { super(plugin); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/UnpackageAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/UnpackageAction.java index eeaed26cde..64b4fb04db 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/UnpackageAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/UnpackageAction.java @@ -17,17 +17,17 @@ package ghidra.app.plugin.core.compositeeditor; import java.awt.event.KeyEvent; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.KeyStroke; import docking.ActionContext; import docking.action.KeyBindingData; import docking.widgets.OptionDialog; +import generic.theme.GIcon; import ghidra.util.exception.CancelledException; import ghidra.util.exception.UsrException; import ghidra.util.task.TaskLauncher; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; /** * Action for use in the composite data type editor. @@ -35,7 +35,7 @@ import resources.ResourceManager; */ public class UnpackageAction extends CompositeEditorTableAction { - private final static ImageIcon ICON = ResourceManager.loadImage("images/Unpackage.gif"); + private final static Icon ICON = new GIcon("icon.plugin.composite.editor.unpackage"); public final static String ACTION_NAME = "Unpackage Component"; private final static String GROUP_NAME = COMPONENT_ACTION_GROUP; private final static String DESCRIPTION = "Replace the selected composite with its components"; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/console/ConsoleComponentProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/console/ConsoleComponentProvider.java index f5ee090cff..85eae792f6 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/console/ConsoleComponentProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/console/ConsoleComponentProvider.java @@ -25,6 +25,7 @@ import javax.swing.text.Document; import docking.*; import docking.action.*; +import generic.theme.GIcon; import ghidra.app.services.*; import ghidra.framework.main.ConsoleTextPane; import ghidra.framework.options.OptionsChangeListener; @@ -36,7 +37,6 @@ import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.SymbolIterator; import ghidra.program.model.symbol.SymbolTable; import ghidra.util.*; -import resources.ResourceManager; public class ConsoleComponentProvider extends ComponentProviderAdapter implements ConsoleService, OptionsChangeListener { @@ -44,10 +44,6 @@ public class ConsoleComponentProvider extends ComponentProviderAdapter private static final String OLD_NAME = "ConsolePlugin"; private static final String NAME = "Console"; - private static final String CONSOLE_GIF = "images/monitor.png"; - private static final String CLEAR_GIF = "images/erase16.png"; - private static final String SCROLL_LOCK_GIF = "images/lock.png"; - private static final Font DEFAULT_FONT = new Font("monospaced", Font.PLAIN, 12); private static final String FONT_OPTION_LABEL = "Font"; private static final String FONT_DESCRIPTION = @@ -74,7 +70,7 @@ public class ConsoleComponentProvider extends ComponentProviderAdapter setDefaultWindowPosition(WindowPosition.BOTTOM); setHelpLocation(new HelpLocation(owner, owner)); - setIcon(ResourceManager.loadImage(CONSOLE_GIF)); + setIcon(new GIcon("icon.plugin.console.provider")); setWindowMenuGroup("Console"); setSubTitle("Scripting"); setTitle("Console"); @@ -281,7 +277,7 @@ public class ConsoleComponentProvider extends ComponentProviderAdapter }; clearAction.setDescription("Clear Console"); // ACTIONS - auto generated - clearAction.setToolBarData(new ToolBarData(ResourceManager.loadImage(CLEAR_GIF), null)); + clearAction.setToolBarData(new ToolBarData(new GIcon("icon.plugin.console.clear"), null)); clearAction.setEnabled(true); @@ -293,7 +289,8 @@ public class ConsoleComponentProvider extends ComponentProviderAdapter }; scrollAction.setDescription("Scroll Lock"); scrollAction - .setToolBarData(new ToolBarData(ResourceManager.loadImage(SCROLL_LOCK_GIF), null)); + .setToolBarData( + new ToolBarData(new GIcon("icon.plugin.console.scroll.lock"), null)); scrollAction.setEnabled(true); scrollAction.setSelected(scrollLock); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/cparser/ParseDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/cparser/ParseDialog.java index 6082d45f17..3aad90b9ee 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/cparser/ParseDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/cparser/ParseDialog.java @@ -44,7 +44,6 @@ import ghidra.util.HelpLocation; import ghidra.util.Msg; import ghidra.util.filechooser.ExtensionFileFilter; import resources.Icons; -import resources.ResourceManager; /** * Dialog that shows files used for parsing C header files. The profile has a list of @@ -341,7 +340,7 @@ class ParseDialog extends DialogComponentProvider { } }; saveAction.setEnabled(false); - Icon icon = ResourceManager.loadImage("images/disk.png"); + Icon icon = Icons.SAVE_ICON; String saveGroup = "save"; saveAction.setMenuBarData(new MenuData(new String[] { "Save" }, icon, saveGroup)); saveAction.setToolBarData(new ToolBarData(icon, saveGroup)); @@ -355,7 +354,7 @@ class ParseDialog extends DialogComponentProvider { } }; saveAsAction.setEnabled(true); - icon = ResourceManager.loadImage("images/disk_save_as.png"); + icon = Icons.SAVE_AS_ICON; saveAsAction.setMenuBarData(new MenuData(new String[] { "Save As..." }, icon, saveGroup)); saveAsAction.setToolBarData(new ToolBarData(icon, saveGroup)); saveAsAction.setDescription("Save profile to new name"); @@ -369,7 +368,7 @@ class ParseDialog extends DialogComponentProvider { }; clearAction.setEnabled(true); - icon = ResourceManager.loadImage("images/erase16.png"); + icon = Icons.CLEAR_ICON; String clearGroup = "clear"; clearAction .setMenuBarData(new MenuData(new String[] { "Clear Profile" }, icon, clearGroup)); @@ -399,7 +398,7 @@ class ParseDialog extends DialogComponentProvider { } }; deleteAction.setEnabled(false); - icon = ResourceManager.loadImage("images/edit-delete.png"); + icon = Icons.DELETE_ICON; String deleteGroup = "Xdelete"; deleteAction.setMenuBarData(new MenuData(new String[] { "Delete" }, icon, deleteGroup)); deleteAction.setToolBarData(new ToolBarData(icon, deleteGroup)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypesProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypesProvider.java index 8d6445e231..ff576efdc3 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypesProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/DataTypesProvider.java @@ -37,6 +37,7 @@ import docking.widgets.PopupWindow; import docking.widgets.textpane.GHtmlTextPane; import docking.widgets.tree.*; import docking.widgets.tree.support.GTreeSelectionEvent.EventOrigin; +import generic.theme.GIcon; import ghidra.app.plugin.core.datamgr.actions.*; import ghidra.app.plugin.core.datamgr.actions.associate.*; import ghidra.app.plugin.core.datamgr.archive.*; @@ -55,12 +56,10 @@ import ghidra.program.model.listing.DataTypeArchive; import ghidra.program.model.listing.Program; import ghidra.util.*; import ghidra.util.task.SwingUpdateManager; -import resources.ResourceManager; import util.HistoryList; public class DataTypesProvider extends ComponentProviderAdapter { - private static final String DATA_TYPES_ICON = "images/dataTypes.png"; private static final String TITLE = "Data Type Manager"; private static final String POINTER_FILTER_STATE = "PointerFilterState"; private static final String ARRAY_FILTER_STATE = "ArrayFilterState"; @@ -103,7 +102,7 @@ public class DataTypesProvider extends ComponentProviderAdapter { this.plugin = plugin; setTitle(TITLE); - setIcon(ResourceManager.loadImage(DATA_TYPES_ICON)); + setIcon(new GIcon("icon.plugin.datatypes.provider")); addToToolbar(); navigationHistory.setAllowDuplicates(true); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/ConflictHandlerModesAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/ConflictHandlerModesAction.java index 872813e847..33eed2e402 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/ConflictHandlerModesAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/ConflictHandlerModesAction.java @@ -20,11 +20,11 @@ import javax.swing.Icon; import docking.menu.ActionState; import docking.menu.MultiStateDockingAction; import docking.widgets.EventTrigger; +import generic.theme.GIcon; import ghidra.app.plugin.core.datamgr.DataTypeManagerPlugin; import ghidra.program.model.data.DataTypeConflictHandler; import ghidra.program.model.data.DataTypeConflictHandler.ConflictResolutionPolicy; import ghidra.util.HelpLocation; -import resources.ResourceManager; public class ConflictHandlerModesAction extends MultiStateDockingAction { @@ -41,10 +41,12 @@ public class ConflictHandlerModesAction extends new HelpLocation(plugin.getName(), "conflict_mode"); setHelpLocation(conflictModesHelpLocation); - Icon renameAndAddIcon = ResourceManager.loadImage("images/conflictRename.png"); - Icon useExistingIcon = ResourceManager.loadImage("images/conflictKeep.png"); - Icon replaceExistingIcon = ResourceManager.loadImage("images/conflictReplace.png"); - Icon replaceDefaultIcon = ResourceManager.loadImage("images/conflictReplaceOrRename.png"); + //@formatter:off + Icon renameAndAddIcon = new GIcon("icon.plugin.datatypes.conflict.mode.rename.and.add"); + Icon useExistingIcon = new GIcon("icon.plugin.datatypes.conflict.mode.use.existing"); + Icon replaceExistingIcon = new GIcon("icon.plugin.datatypes.conflict.mode.replace.existing"); + Icon replaceDefaultIcon = new GIcon("icon.plugin.datatypes.conflict.mode.replace.or.rename"); + //@formatter:on ActionState renameAndAddState = new ActionState<>( diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/FilterArraysAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/FilterArraysAction.java index 1f405edfa9..95253ccff3 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/FilterArraysAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/FilterArraysAction.java @@ -23,22 +23,23 @@ import javax.swing.tree.TreePath; import docking.ActionContext; import docking.action.ToggleDockingAction; import docking.action.ToolBarData; +import generic.theme.GIcon; import ghidra.app.plugin.core.datamgr.DataTypeManagerPlugin; import ghidra.app.plugin.core.datamgr.DataTypesActionContext; import ghidra.app.plugin.core.datamgr.tree.DataTypeArchiveGTree; import ghidra.util.HTMLUtilities; -import resources.ResourceManager; public class FilterArraysAction extends ToggleDockingAction { - private static final Icon FILTER_ARRAYS_ICON = - ResourceManager.loadImage("images/FilterArrays.png"); - private static final Icon ARRAY_ICON = ResourceManager.loadImage("images/Array.png"); + //@formatter:off + private static final Icon FILTER_ON_ICON = new GIcon("icon.plugin.datatypes.filter.arrays.on"); + private static final Icon FILTER_OFF_ICON = new GIcon("icon.plugin.datatypes.filter.arrays.off"); + //@formatter:on public FilterArraysAction(DataTypeManagerPlugin plugin) { super("Filter Arrays", plugin.getName()); - this.setToolBarData(new ToolBarData(FILTER_ARRAYS_ICON, "filters")); + this.setToolBarData(new ToolBarData(FILTER_ON_ICON, "filters")); setDescription(HTMLUtilities.toHTML( "Toggle whether or not Arrays are\n" + "displayed in the Data Type Manager tree.")); @@ -66,7 +67,7 @@ public class FilterArraysAction extends ToggleDockingAction { @Override public void setSelected(boolean selected) { - getToolBarData().setIcon(selected ? FILTER_ARRAYS_ICON : ARRAY_ICON); + getToolBarData().setIcon(selected ? FILTER_ON_ICON : FILTER_OFF_ICON); super.setSelected(selected); } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/FilterPointersAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/FilterPointersAction.java index d1b3cfb29a..e3f587aa77 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/FilterPointersAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/FilterPointersAction.java @@ -23,21 +23,23 @@ import javax.swing.tree.TreePath; import docking.ActionContext; import docking.action.ToggleDockingAction; import docking.action.ToolBarData; +import generic.theme.GIcon; import ghidra.app.plugin.core.datamgr.DataTypeManagerPlugin; import ghidra.app.plugin.core.datamgr.DataTypesActionContext; import ghidra.app.plugin.core.datamgr.tree.DataTypeArchiveGTree; import ghidra.util.HTMLUtilities; -import resources.ResourceManager; public class FilterPointersAction extends ToggleDockingAction { - private static final Icon FILTER_POINTERS_ICON = - ResourceManager.loadImage("images/FilterPointers.png"); - private static final Icon POINTER_ICON = ResourceManager.loadImage("images/fingerPointer.png"); + + //@formatter:off + private static final Icon FILTER_ON_ICON = new GIcon("icon.plugin.datatypes.filter.pointers.on"); + private static final Icon FILTER_OFF_ICON = new GIcon("icon.plugin.datatypes.filter.pointers.off"); + //@formatter:on public FilterPointersAction(DataTypeManagerPlugin plugin) { super("Filter Pointers", plugin.getName()); - this.setToolBarData(new ToolBarData(FILTER_POINTERS_ICON, "filters")); + this.setToolBarData(new ToolBarData(FILTER_ON_ICON, "filters")); setDescription(HTMLUtilities.toHTML( "Toggle whether or not Pointers are\n" + "displayed in the Data Type Manager tree.")); @@ -67,7 +69,7 @@ public class FilterPointersAction extends ToggleDockingAction { @Override public void setSelected(boolean selected) { - getToolBarData().setIcon(selected ? FILTER_POINTERS_ICON : POINTER_ICON); + getToolBarData().setIcon(selected ? FILTER_ON_ICON : FILTER_OFF_ICON); super.setSelected(selected); } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/associate/CommitSingleDataTypeAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/associate/CommitSingleDataTypeAction.java index 63b169a023..4fe152dbc8 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/associate/CommitSingleDataTypeAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/associate/CommitSingleDataTypeAction.java @@ -15,7 +15,7 @@ */ package ghidra.app.plugin.core.datamgr.actions.associate; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.tree.TreePath; import docking.ActionContext; @@ -24,6 +24,7 @@ import docking.action.MenuData; import docking.widgets.OptionDialog; import docking.widgets.tree.GTree; import docking.widgets.tree.GTreeNode; +import generic.theme.GIcon; import ghidra.app.plugin.core.datamgr.*; import ghidra.app.plugin.core.datamgr.archive.DataTypeManagerHandler; import ghidra.app.plugin.core.datamgr.tree.DataTypeNode; @@ -31,13 +32,12 @@ import ghidra.app.plugin.core.datamgr.util.DataTypeUtils; import ghidra.program.model.data.*; import ghidra.util.Msg; import resources.MultiIcon; -import resources.ResourceManager; import resources.icons.EmptyIcon; import resources.icons.TranslateIcon; public class CommitSingleDataTypeAction extends DockingAction { - private static ImageIcon COMMIT_ICON = ResourceManager.loadImage("images/smallRightArrow.png"); + private static Icon COMMIT_ICON = new GIcon("icon.plugin.datatypes.commit.single.type"); private final DataTypeManagerPlugin plugin; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/associate/UpdateSingleDataTypeAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/associate/UpdateSingleDataTypeAction.java index a604a2e470..e0cb3d5a7c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/associate/UpdateSingleDataTypeAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/actions/associate/UpdateSingleDataTypeAction.java @@ -15,7 +15,7 @@ */ package ghidra.app.plugin.core.datamgr.actions.associate; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.tree.TreePath; import docking.ActionContext; @@ -24,19 +24,19 @@ import docking.action.MenuData; import docking.widgets.OptionDialog; import docking.widgets.tree.GTree; import docking.widgets.tree.GTreeNode; +import generic.theme.GIcon; import ghidra.app.plugin.core.datamgr.*; import ghidra.app.plugin.core.datamgr.archive.DataTypeManagerHandler; import ghidra.app.plugin.core.datamgr.tree.DataTypeNode; import ghidra.app.plugin.core.datamgr.util.DataTypeUtils; import ghidra.program.model.data.*; import resources.MultiIcon; -import resources.ResourceManager; import resources.icons.EmptyIcon; import resources.icons.TranslateIcon; public class UpdateSingleDataTypeAction extends DockingAction { - private static ImageIcon UPDATE_ICON = ResourceManager.loadImage("images/smallLeftArrow.png"); + private static Icon UPDATE_ICON = new GIcon("icon.plugin.datatypes.associate.single.type"); private final DataTypeManagerPlugin plugin; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/Archive.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/Archive.java index d7f44f016f..77a349dbba 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/Archive.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/Archive.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,13 +15,13 @@ */ package ghidra.app.plugin.core.datamgr.archive; -import ghidra.app.merge.DataTypeManagerOwner; -import ghidra.util.exception.DuplicateFileException; - import java.awt.Component; import java.io.IOException; -import javax.swing.ImageIcon; +import javax.swing.Icon; + +import ghidra.app.merge.DataTypeManagerOwner; +import ghidra.util.exception.DuplicateFileException; /** * This is an interface for data type archives. @@ -63,13 +62,15 @@ public interface Archive extends DataTypeManagerOwner, Comparable { /** * Saves this archive. Some archives cannot be saved. + * @throws DuplicateFileException if there is an exception saving + * @throws IOException if there is an exception saving */ public void save() throws DuplicateFileException, IOException; /** * Saves this archive to a newly named file. - * @param component - * @throws IOException + * @param component the parent component the any dialogs shown + * @throws IOException if there is an exception saving */ public void saveAs(Component component) throws IOException; @@ -79,5 +80,5 @@ public interface Archive extends DataTypeManagerOwner, Comparable { * false indicates the node is closed. * @return the archive's icon. */ - public ImageIcon getIcon(boolean expanded); + public Icon getIcon(boolean expanded); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/BuiltInArchive.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/BuiltInArchive.java index d8eff7bcd7..9a874a75aa 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/BuiltInArchive.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/BuiltInArchive.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,21 +15,20 @@ */ package ghidra.app.plugin.core.datamgr.archive; +import java.awt.Component; +import java.io.IOException; + +import javax.swing.Icon; + +import generic.theme.GIcon; import ghidra.program.model.data.BuiltInDataTypeManager; import ghidra.program.model.data.DataTypeManager; import ghidra.util.exception.DuplicateFileException; -import java.awt.Component; -import java.io.IOException; - -import javax.swing.ImageIcon; - -import resources.ResourceManager; - public class BuiltInArchive implements Archive { - private static ImageIcon CLOSED_ICON = ResourceManager.loadImage("images/closedBookBrown.png"); - private static ImageIcon OPEN_ICON = ResourceManager.loadImage("images/openBookBrown.png"); + private static Icon CLOSED_ICON = new GIcon("icon.plugin.datatypes.archive.built.in.closed"); + private static Icon OPEN_ICON = new GIcon("icon.plugin.datatypes.archive.built.in.open"); private DataTypeManagerHandler archiveManager; private BuiltInDataTypeManager dataTypeManager; @@ -39,43 +37,53 @@ public class BuiltInArchive implements Archive { this.dataTypeManager = dataTypeManager; } + @Override public DataTypeManager getDataTypeManager() { return dataTypeManager; } + @Override public String getName() { return dataTypeManager.getName(); } + @Override public int compareTo(Archive archive) { return -1; // Built-ins are always at the top } + @Override public boolean isModifiable() { return false; // Can't change the data types that are in Built-Ins. } + @Override public void close() { // Not allowed to close the Built In Data Type Manager. } + @Override public boolean isChanged() { return false; // Can't change. } + @Override public boolean isSavable() { return false; // Can't save. } + @Override public void save() throws DuplicateFileException, IOException { // Can't "Save" so do nothing. } + @Override public void saveAs(Component component) throws IOException { // Can't "Save As" so do nothing. } - public ImageIcon getIcon(boolean expanded) { + @Override + public Icon getIcon(boolean expanded) { return expanded ? OPEN_ICON : CLOSED_ICON; } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/FileArchive.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/FileArchive.java index e231a4d2bd..2bd2685b94 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/FileArchive.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/FileArchive.java @@ -19,13 +19,13 @@ import java.awt.Component; import java.io.File; import java.io.IOException; -import javax.swing.ImageIcon; +import javax.swing.Icon; import generic.jar.ResourceFile; +import generic.theme.GIcon; import ghidra.framework.store.LockException; import ghidra.program.model.data.*; import ghidra.util.exception.DuplicateFileException; -import resources.ResourceManager; /** * Manages a DataTypeFileManager and relative state. For example, whether the manager is writable @@ -33,8 +33,8 @@ import resources.ResourceManager; */ public class FileArchive implements Archive { - private static ImageIcon CLOSED_ICON = ResourceManager.loadImage("images/closedBookGreen.png"); - private static ImageIcon OPEN_ICON = ResourceManager.loadImage("images/openBookGreen.png"); + private static Icon CLOSED_ICON = new GIcon("icon.plugin.datatypes.archive.file.closed"); + private static Icon OPEN_ICON = new GIcon("icon.plugin.datatypes.archive.file.open"); private ResourceFile archiveFile; private boolean hasWriteLock; private boolean changed; @@ -292,7 +292,7 @@ public class FileArchive implements Archive { } @Override - public ImageIcon getIcon(boolean expanded) { + public Icon getIcon(boolean expanded) { return expanded ? OPEN_ICON : CLOSED_ICON; } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/InvalidFileArchive.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/InvalidFileArchive.java index e62ebb58d9..526fc35932 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/InvalidFileArchive.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/InvalidFileArchive.java @@ -18,17 +18,17 @@ package ghidra.app.plugin.core.datamgr.archive; import java.awt.Component; import java.io.IOException; -import javax.swing.ImageIcon; +import javax.swing.Icon; +import generic.theme.GIcon; import ghidra.program.model.data.*; import ghidra.util.UniversalID; import ghidra.util.exception.DuplicateFileException; -import resources.ResourceManager; public class InvalidFileArchive implements Archive { - private static final ImageIcon INVALID_ARCHIVE_ICON = - ResourceManager.loadImage("images/closedFolderInvalid.png"); + private static final Icon INVALID_ARCHIVE_ICON = + new GIcon("icon.plugin.datatypes.archive.invalid"); private DataTypeManagerHandler archiveManager; private UniversalID universalID; private ArchiveType archiveType; @@ -104,7 +104,7 @@ public class InvalidFileArchive implements Archive { } @Override - public ImageIcon getIcon(boolean expanded) { + public Icon getIcon(boolean expanded) { return INVALID_ARCHIVE_ICON; } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProgramArchive.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProgramArchive.java index 386a59c45a..b07baf6cea 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProgramArchive.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProgramArchive.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,23 +15,22 @@ */ package ghidra.app.plugin.core.datamgr.archive; +import java.awt.Component; +import java.io.IOException; + +import javax.swing.Icon; + +import generic.theme.GIcon; import ghidra.framework.model.DomainFile; import ghidra.program.model.data.DataTypeManager; import ghidra.program.model.data.DataTypeManagerChangeListener; import ghidra.program.model.listing.Program; import ghidra.util.exception.DuplicateFileException; -import java.awt.Component; -import java.io.IOException; - -import javax.swing.ImageIcon; - -import resources.ResourceManager; - public class ProgramArchive implements DomainFileArchive { - private static ImageIcon CLOSED_ICON = ResourceManager.loadImage("images/closedBookRed.png"); - private static ImageIcon OPEN_ICON = ResourceManager.loadImage("images/openBookRed.png"); + private static Icon CLOSED_ICON = new GIcon("icon.plugin.datatypes.archive.program.closed"); + private static Icon OPEN_ICON = new GIcon("icon.plugin.datatypes.archive.program.open"); private final Program program; DataTypeManagerChangeListener categoryListener; // hold on to since it is stored in a weak set private DataTypeManager dataTypeManager; @@ -105,7 +103,7 @@ public class ProgramArchive implements DomainFileArchive { } @Override - public ImageIcon getIcon(boolean expanded) { + public Icon getIcon(boolean expanded) { return expanded ? OPEN_ICON : CLOSED_ICON; } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProjectArchive.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProjectArchive.java index ddea7e1858..8dd3531961 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProjectArchive.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/archive/ProjectArchive.java @@ -15,21 +15,20 @@ */ package ghidra.app.plugin.core.datamgr.archive; +import java.awt.Component; +import java.io.IOException; + +import javax.swing.Icon; + +import generic.theme.GIcon; import ghidra.framework.model.DomainFile; import ghidra.program.model.data.*; import ghidra.program.model.listing.DataTypeArchive; -import java.awt.Component; -import java.io.IOException; - -import javax.swing.ImageIcon; - -import resources.ResourceManager; - public class ProjectArchive implements DomainFileArchive { - private static ImageIcon CLOSED_ICON = ResourceManager.loadImage("images/closedBookBlue.png"); - private static ImageIcon OPEN_ICON = ResourceManager.loadImage("images/openBookBlue.png"); + private static Icon CLOSED_ICON = new GIcon("icon.plugin.datatypes.archive.project.closed"); + private static Icon OPEN_ICON = new GIcon("icon.plugin.datatypes.archive.project.open"); private DataTypeArchive dataTypeArchive; private DomainFile originalDomainFile; DataTypeManagerChangeListener categoryListener; // hold on to since it is stored in a weak set @@ -115,7 +114,7 @@ public class ProjectArchive implements DomainFileArchive { } @Override - public ImageIcon getIcon(boolean expanded) { + public Icon getIcon(boolean expanded) { return expanded ? OPEN_ICON : CLOSED_ICON; } @@ -140,7 +139,8 @@ public class ProjectArchive implements DomainFileArchive { } @Override - public void categoryRenamed(DataTypeManager dtm, CategoryPath oldPath, CategoryPath newPath) { + public void categoryRenamed(DataTypeManager dtm, CategoryPath oldPath, + CategoryPath newPath) { if (!oldPath.equals(newPath)) { fireStateChanged(); } @@ -167,7 +167,8 @@ public class ProjectArchive implements DomainFileArchive { } @Override - public void dataTypeRenamed(DataTypeManager dtm, DataTypePath oldPath, DataTypePath newPath) { + public void dataTypeRenamed(DataTypeManager dtm, DataTypePath oldPath, + DataTypePath newPath) { fireStateChanged(); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/editor/EnumEditorProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/editor/EnumEditorProvider.java index 0b94219acb..e9672e30ac 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/editor/EnumEditorProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/editor/EnumEditorProvider.java @@ -19,7 +19,7 @@ import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.util.*; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -31,6 +31,7 @@ import docking.ActionContext; import docking.ComponentProvider; import docking.action.*; import docking.widgets.OptionDialog; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors; import ghidra.app.plugin.core.compositeeditor.EditorListener; import ghidra.app.plugin.core.compositeeditor.EditorProvider; @@ -46,7 +47,6 @@ import ghidra.util.*; import ghidra.util.datastruct.WeakDataStructureFactory; import ghidra.util.datastruct.WeakSet; import ghidra.util.exception.DuplicateNameException; -import resources.ResourceManager; import util.CollectionUtils; /** @@ -55,11 +55,10 @@ import util.CollectionUtils; public class EnumEditorProvider extends ComponentProviderAdapter implements ChangeListener, EditorProvider { - static final ImageIcon EDITOR_ICON = ResourceManager.loadImage("images/enum.png"); - private final static ImageIcon APPLY_ICON = ResourceManager.loadImage("images/disk.png"); - private final static ImageIcon ADD_ICON = ResourceManager.loadImage("images/Plus.png"); - private final static ImageIcon DELETE_ICON = - ResourceManager.loadImage("images/edit-delete.png"); + static final Icon EDITOR_ICON = new GIcon("icon.plugin.enum.editor.provider"); + private final static Icon APPLY_ICON = new GIcon("icon.plugin.enum.editor.apply"); + private final static Icon ADD_ICON = new GIcon("icon.plugin.enum.editor.add"); + private final static Icon DELETE_ICON = new GIcon("icon.plugin.enum.editor.delete"); private final static String HELP_TOPIC = "DataTypeEditors"; private final static int CANCEL = 0; @@ -303,7 +302,7 @@ public class EnumEditorProvider extends ComponentProviderAdapter showEnumAction.setEnabled(true); String thirdGroup = "FThirdGroup"; showEnumAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/go-home.png"), thirdGroup)); + new ToolBarData(new GIcon("icon.plugin.enum.editor.home"), thirdGroup)); tool.addLocalAction(this, applyAction); tool.addLocalAction(this, addAction); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DataTypeArchiveGTree.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DataTypeArchiveGTree.java index e6adf7b94f..0957e3e537 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DataTypeArchiveGTree.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DataTypeArchiveGTree.java @@ -27,6 +27,7 @@ import javax.swing.tree.TreePath; import docking.widgets.tree.*; import docking.widgets.tree.internal.DefaultGTreeDataTransformer; import docking.widgets.tree.support.GTreeRenderer; +import generic.theme.GIcon; import ghidra.app.plugin.core.datamgr.*; import ghidra.app.plugin.core.datamgr.archive.DataTypeManagerHandler; import ghidra.app.plugin.core.datamgr.archive.FileArchive; @@ -39,16 +40,13 @@ import ghidra.program.model.listing.Program; import ghidra.util.UniversalID; import ghidra.util.task.TaskMonitor; import resources.MultiIcon; -import resources.ResourceManager; import resources.icons.TranslateIcon; public class DataTypeArchiveGTree extends GTree { - private static ImageIcon LOCAL_DELTA_ICON = - ResourceManager.loadImage("images/smallRightArrow.png"); - private static ImageIcon SOURCE_DELTA_ICON = - ResourceManager.loadImage("images/smallLeftArrow.png"); - private static ImageIcon CONFLICT_ICON = ResourceManager.loadImage("images/doubleArrow.png"); - private static ImageIcon MISSING_ICON = ResourceManager.loadImage("images/redQuestionMark.png"); + private static Icon LOCAL_DELTA_ICON = new GIcon("icon.plugin.datatypes.tree.change.local"); + private static Icon SOURCE_DELTA_ICON = new GIcon("icon.plugin.datatypes.tree.change.source"); + private static Icon CONFLICT_ICON = new GIcon("icon.plugin.datatypes.tree.conflict"); + private static Icon MISSING_ICON = new GIcon("icon.plugin.datatypes.tree.missing"); private DataTypeManagerPlugin plugin; private GTreeNode armedNode; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DomainFileArchiveNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DomainFileArchiveNode.java index fdc506ec51..d795484be3 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DomainFileArchiveNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/DomainFileArchiveNode.java @@ -16,27 +16,25 @@ package ghidra.app.plugin.core.datamgr.tree; import javax.swing.Icon; -import javax.swing.ImageIcon; +import generic.theme.GIcon; import ghidra.app.plugin.core.datamgr.archive.DomainFileArchive; import ghidra.framework.model.DomainFile; import ghidra.framework.model.DomainObject; import ghidra.program.model.listing.Program; import ghidra.util.HTMLUtilities; import resources.MultiIcon; -import resources.ResourceManager; import resources.icons.TranslateIcon; public class DomainFileArchiveNode extends ArchiveNode { - private static ImageIcon CHECKED_OUT_ICON = ResourceManager.loadImage("images/check.png"); - private static ImageIcon CHECKED_OUT_EXCLUSIVE_ICON = - ResourceManager.loadImage("images/checkex.png"); - private static ImageIcon HIJACKED_ICON = ResourceManager.loadImage("images/small_hijack.gif"); - private static ImageIcon READ_ONLY_ICON = - ResourceManager.loadImage("images/user-busy.png", 10, 10); - private static ImageIcon NOT_LATEST_CHECKED_OUT_ICON = - ResourceManager.loadImage("images/checkNotLatest.gif"); + //@formatter:off + private static Icon CHECKED_OUT_ICON = new GIcon("icon.plugin.datatypes.tree.node.archive.file.checked.out"); + private static Icon CHECKED_OUT_EXCLUSIVE_ICON = new GIcon("icon.plugin.datatypes.tree.node.archive.file.checked.out.exclusive"); + private static Icon HIJACKED_ICON = new GIcon("icon.plugin.datatypes.tree.node.archive.file.hijacked"); + private static Icon READ_ONLY_ICON = new GIcon("icon.plugin.datatypes.tree.node.archive.file.read.only"); + private static Icon NOT_LATEST_CHECKED_OUT_ICON = new GIcon("icon.plugin.datatypes.tree.node.archive.file.checked.out.not.latest"); + //@formatter:on private boolean isChanged; private boolean isReadOnly; @@ -116,7 +114,7 @@ public class DomainFileArchiveNode extends ArchiveNode { @Override public Icon getIcon(boolean expanded) { - ImageIcon baseIcon = archive.getIcon(expanded); + Icon baseIcon = archive.getIcon(expanded); BackgroundIcon bgIcon = new BackgroundIcon(24, 16, isVersioned); MultiIcon multiIcon = new MultiIcon(bgIcon); multiIcon.addIcon(baseIcon); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/FileArchiveNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/FileArchiveNode.java index 4d12f658f8..1eb46bc540 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/FileArchiveNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/tree/FileArchiveNode.java @@ -16,19 +16,18 @@ package ghidra.app.plugin.core.datamgr.tree; import javax.swing.Icon; -import javax.swing.ImageIcon; import generic.jar.ResourceFile; +import generic.theme.GIcon; import ghidra.app.plugin.core.datamgr.archive.FileArchive; import ghidra.util.HTMLUtilities; import resources.MultiIcon; -import resources.ResourceManager; import resources.icons.TranslateIcon; public class FileArchiveNode extends ArchiveNode { - private static ImageIcon CHECKED_OUT_EXCLUSIVE_ICON = - ResourceManager.loadImage("images/checkex.png"); + private static Icon CHECKED_OUT_EXCLUSIVE_ICON = + new GIcon("icon.plugin.datatypes.tree.node.archive.file.checked.out.exclusive"); FileArchive fileArchive; // casted reference for easy access @@ -42,7 +41,7 @@ public class FileArchiveNode extends ArchiveNode { BackgroundIcon bgIcon = new BackgroundIcon(24, 16, false); MultiIcon multiIcon = new MultiIcon(bgIcon); boolean hasWriteLock = fileArchive.hasWriteLock(); - ImageIcon baseIcon = fileArchive.getIcon(expanded); + Icon baseIcon = fileArchive.getIcon(expanded); multiIcon.addIcon(baseIcon); if (hasWriteLock) { multiIcon.addIcon(new TranslateIcon(CHECKED_OUT_EXCLUSIVE_ICON, 8, -4)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/ConflictDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/ConflictDialog.java index 6a80ab4935..2b7cfb779e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/ConflictDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/ConflictDialog.java @@ -16,7 +16,8 @@ package ghidra.app.plugin.core.datamgr.util; import java.awt.BorderLayout; -import java.awt.event.*; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; import javax.swing.*; @@ -24,8 +25,8 @@ import docking.DialogComponentProvider; import docking.widgets.button.GRadioButton; import docking.widgets.label.GIconLabel; import docking.widgets.label.GLabel; +import generic.theme.GIcon; import ghidra.util.HelpLocation; -import resources.ResourceManager; /** * Dialog to get user input on how to handle data type conflicts. @@ -43,12 +44,12 @@ public class ConflictDialog extends DialogComponentProvider { private JButton applyToAllButton; private int selectedOption = RENAME; - private ImageIcon INFORM_ICON = ResourceManager.loadImage("images/warning.png"); + private Icon INFORM_ICON = new GIcon("icon.warning"); /** * Constructor * @param dtName data type name - * @param categoryName category path + * @param categoryPath category path * @param newDTName new name to resolve conflict */ public ConflictDialog(String dtName, String categoryPath, String newDTName) { @@ -58,27 +59,18 @@ public class ConflictDialog extends DialogComponentProvider { addOKButton(); applyToAllButton = new JButton("Apply to All"); - applyToAllButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - applyToAll = true; - close(); - } + applyToAllButton.addActionListener(e -> { + applyToAll = true; + close(); }); addButton(applyToAllButton); } - /* (non-Javadoc) - * @see ghidra.util.bean.GhidraDialog#okCallback() - */ @Override protected void okCallback() { close(); } - /* (non-Javadoc) - * @see ghidra.util.bean.GhidraDialog#cancelCallback() - */ @Override protected void cancelCallback() { close(); @@ -101,20 +93,17 @@ public class ConflictDialog extends DialogComponentProvider { mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); - ItemListener listener = new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - if (e.getStateChange() == ItemEvent.SELECTED) { - Object source = e.getSource(); - if (source == replaceRB) { - selectedOption = REPLACE; - } - else if (source == useExistingRB) { - selectedOption = USE_EXISTING; - } - else { - selectedOption = RENAME; - } + ItemListener listener = e -> { + if (e.getStateChange() == ItemEvent.SELECTED) { + Object source = e.getSource(); + if (source == replaceRB) { + selectedOption = REPLACE; + } + else if (source == useExistingRB) { + selectedOption = USE_EXISTING; + } + else { + selectedOption = RENAME; } } }; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/DataTypeUtils.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/DataTypeUtils.java index 21e449dc92..f637ed089e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/DataTypeUtils.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datamgr/util/DataTypeUtils.java @@ -20,9 +20,9 @@ import java.util.*; import java.util.List; import javax.swing.Icon; -import javax.swing.ImageIcon; import generic.theme.GColor; +import generic.theme.GIcon; import ghidra.app.services.DataTypeQueryService; import ghidra.program.model.data.*; import ghidra.program.model.data.Enum; @@ -43,27 +43,6 @@ public class DataTypeUtils { private static Map highlightIconMap = new HashMap<>(); - private static String OPEN_FOLDER = "images/openFolder.png"; - private static String CLOSED_FOLDER = "images/closedFolder.png"; - private static String DISABLED_OPEN_FOLDER = "images/disabledOpenFolder.png"; - private static String DISABLED_CLOSED_FOLDER = "images/disabledClosedFolder.png"; - private static String DEFAULT_ICON = "images/defaultDt.gif"; - private static String DISABLED_DEFAULT_ICON = "images/disabledCode.gif"; - private static String LOCKED_OPEN_FOLDER = "images/openFolderCheckedOut.png"; - private static String LOCKED_CLOSED_FOLDER = "images/closedFolderCheckedOut.png"; - private static String OPEN_ARCHIVE_FOLDER = "images/openFolderArchive.png"; - private static String CLOSED_ARCHIVE_FOLDER = "images/closedFolderArchive.png"; - private static String ROOT_ICON = "images/BookShelf.png"; - private static String OPEN_ROOT_ICON = "images/BookShelfOpen.png"; - private static String FAVORITE_ICON = "images/emblem-favorite.png"; - private static String BUILT_IN_ICON = "images/package_development.png"; - private static String STRUCTURE_ICON = "images/cstruct.png"; - private static String UNION_ICON = "images/cUnion.png"; - private static String TYPEDEF_ICON = "images/typedef.png"; - private static String FUNCTION_ICON = "images/functionDef.png"; - private static String ENUM_ICON = "images/enum.png"; - private static String POINTER_ICON = "images/fingerPointer.png"; - private static Icon defaultIcon; private static Icon disabledIcon; private static Icon favoriteIcon; @@ -93,29 +72,29 @@ public class DataTypeUtils { return; } imagesLoaded = true; - defaultIcon = ResourceManager.loadImage(DEFAULT_ICON); - disabledIcon = ResourceManager.loadImage(DISABLED_DEFAULT_ICON); + defaultIcon = new GIcon("icon.plugin.datatypes.default"); + disabledIcon = new GIcon("icon.plugin.datatypes.default.disabled"); - favoriteIcon = ResourceManager.loadImage(FAVORITE_ICON); - disabledFavoriteIcon = ResourceManager.getDisabledIcon((ImageIcon) favoriteIcon); + favoriteIcon = new GIcon("icon.plugin.datatypes.util.favorite"); + disabledFavoriteIcon = new GIcon("icon.plugin.datatypes.util.favorite.disabled"); - builtInIcon = ResourceManager.loadImage(BUILT_IN_ICON); - disabledBuiltInIcon = ResourceManager.getDisabledIcon((ImageIcon) builtInIcon); + builtInIcon = new GIcon("icon.plugin.datatypes.built.in"); + disabledBuiltInIcon = new GIcon("icon.plugin.datatypes.built.in.disabled"); - rootIcon = ResourceManager.loadImage(ROOT_ICON); - openRootIcon = ResourceManager.loadImage(OPEN_ROOT_ICON); + rootIcon = new GIcon("icon.plugin.datatypes.util.root"); + openRootIcon = new GIcon("icon.plugin.datatypes.util.open.root"); - openFolderIcon = ResourceManager.loadImage(OPEN_FOLDER); - disabledOpenFolderIcon = ResourceManager.loadImage(DISABLED_OPEN_FOLDER); + openFolderIcon = new GIcon("icon.plugin.datatypes.util.open.folder"); + disabledOpenFolderIcon = new GIcon("icon.plugin.datatypes.util.open.folder.disabled"); - closedFolderIcon = ResourceManager.loadImage(CLOSED_FOLDER); - disabledClosedFolderIcon = ResourceManager.loadImage(DISABLED_CLOSED_FOLDER); + closedFolderIcon = new GIcon("icon.plugin.datatypes.util.closed.folder"); + disabledClosedFolderIcon = new GIcon("icon.plugin.datatypes.util.closed.folder.disabled"); - lockedOpenFolderIcon = ResourceManager.loadImage(LOCKED_OPEN_FOLDER); - lockedClosedFolderIcon = ResourceManager.loadImage(LOCKED_CLOSED_FOLDER); + lockedOpenFolderIcon = new GIcon("icon.plugin.datatypes.util.open.folder.locked"); + lockedClosedFolderIcon = new GIcon("icon.plugin.datatypes.util.closed.folder.locked"); - openArchiveFolderIcon = ResourceManager.loadImage(OPEN_ARCHIVE_FOLDER); - closedArchiveFolderIcon = ResourceManager.loadImage(CLOSED_ARCHIVE_FOLDER); + openArchiveFolderIcon = new GIcon("icon.plugin.datatypes.util.open.archive"); + closedArchiveFolderIcon = new GIcon("icon.plugin.datatypes.util.closed.archive"); createDataTypeIcons(); @@ -124,29 +103,29 @@ public class DataTypeUtils { private static void createDataTypeIcons() { List list = new ArrayList<>(); - Icon enumIcon = ResourceManager.loadImage(ENUM_ICON); + Icon enumIcon = new GIcon("icon.plugin.datatypes.enum"); list.add(new DataTypeIconWrapper(Enum.class, enumIcon, - ResourceManager.getDisabledIcon((ImageIcon) enumIcon))); + ResourceManager.getDisabledIcon(enumIcon))); - Icon functionIcon = ResourceManager.loadImage(FUNCTION_ICON); + Icon functionIcon = new GIcon("icon.plugin.datatypes.function"); list.add(new DataTypeIconWrapper(FunctionDefinition.class, functionIcon, - ResourceManager.getDisabledIcon((ImageIcon) functionIcon))); + ResourceManager.getDisabledIcon(functionIcon))); - Icon pointerIcon = ResourceManager.loadImage(POINTER_ICON); + Icon pointerIcon = new GIcon("icon.plugin.datatypes.pointer"); list.add(new DataTypeIconWrapper(Pointer.class, pointerIcon, - ResourceManager.getDisabledIcon((ImageIcon) pointerIcon))); + ResourceManager.getDisabledIcon(pointerIcon))); - Icon typedefIcon = ResourceManager.loadImage(TYPEDEF_ICON); + Icon typedefIcon = new GIcon("icon.plugin.datatypes.typedef"); list.add(new DataTypeIconWrapper(TypeDef.class, typedefIcon, - ResourceManager.getDisabledIcon((ImageIcon) typedefIcon))); + ResourceManager.getDisabledIcon(typedefIcon))); - Icon unionIcon = ResourceManager.loadImage(UNION_ICON); + Icon unionIcon = new GIcon("icon.plugin.datatypes.union"); list.add(new DataTypeIconWrapper(Union.class, unionIcon, - ResourceManager.getDisabledIcon((ImageIcon) unionIcon))); + ResourceManager.getDisabledIcon(unionIcon))); - Icon structureIcon = ResourceManager.loadImage(STRUCTURE_ICON); + Icon structureIcon = new GIcon("icon.plugin.datatypes.structure"); list.add(new DataTypeIconWrapper(Structure.class, structureIcon, - ResourceManager.getDisabledIcon((ImageIcon) structureIcon))); + ResourceManager.getDisabledIcon(structureIcon))); dataTypeIconWrappers = list.toArray(new DataTypeIconWrapper[list.size()]); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datapreview/DataTypePreviewPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datapreview/DataTypePreviewPlugin.java index 4bee7cfac9..da04b8bf36 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datapreview/DataTypePreviewPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datapreview/DataTypePreviewPlugin.java @@ -29,6 +29,7 @@ import docking.action.*; import docking.dnd.DropTgtAdapter; import docking.dnd.Droppable; import docking.widgets.table.AbstractSortedTableModel; +import generic.theme.GIcon; import ghidra.app.CorePluginPackage; import ghidra.app.plugin.PluginCategoryNames; import ghidra.app.plugin.ProgramPlugin; @@ -48,7 +49,7 @@ import ghidra.util.data.DataTypeParser.AllowedDataTypes; import ghidra.util.table.GhidraTable; import ghidra.util.task.SwingUpdateManager; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; +import resources.Icons; import util.CollectionUtils; //@formatter:off @@ -301,7 +302,7 @@ public class DataTypePreviewPlugin extends ProgramPlugin { } }; addAction.setPopupMenuData(new MenuData(new String[] { "Add" })); - addAction.setToolBarData(new ToolBarData(ResourceManager.loadImage("images/Plus.png"))); + addAction.setToolBarData(new ToolBarData(Icons.ADD_ICON)); addAction.setKeyBindingData(new KeyBindingData(KeyEvent.VK_PLUS, 0)); addAction.setDescription("Add Datatypes"); @@ -316,8 +317,7 @@ public class DataTypePreviewPlugin extends ProgramPlugin { } }; deleteAction.setPopupMenuData(new MenuData(new String[] { "Delete" })); - deleteAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/edit-delete.png"))); + deleteAction.setToolBarData(new ToolBarData(new GIcon("icon.delete"))); deleteAction.setKeyBindingData(new KeyBindingData(KeyEvent.VK_DELETE, 0)); deleteAction.setDescription("Delete Selected Datatypes"); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datawindow/DataWindowProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datawindow/DataWindowProvider.java index a9eec895d9..c909a3934a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datawindow/DataWindowProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/datawindow/DataWindowProvider.java @@ -23,6 +23,7 @@ import javax.swing.*; import javax.swing.table.JTableHeader; import docking.ActionContext; +import generic.theme.GIcon; import ghidra.app.services.GoToService; import ghidra.framework.plugintool.ComponentProviderAdapter; import ghidra.program.model.address.Address; @@ -30,14 +31,13 @@ import ghidra.program.model.listing.Program; import ghidra.program.util.ProgramSelection; import ghidra.util.HelpLocation; import ghidra.util.table.*; -import resources.ResourceManager; /** * Provider for the equates table. */ class DataWindowProvider extends ComponentProviderAdapter { - public static final ImageIcon ICON = ResourceManager.loadImage("images/dataW.gif"); + public static final Icon ICON = new GIcon("icon.plugin.datawindow.provider"); private DataWindowPlugin plugin; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/editor/TextEditorComponentProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/editor/TextEditorComponentProvider.java index 93422229e2..f8be13eae8 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/editor/TextEditorComponentProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/editor/TextEditorComponentProvider.java @@ -35,12 +35,13 @@ import docking.actions.KeyBindingUtils; import docking.options.editor.FontEditor; import docking.widgets.OptionDialog; import docking.widgets.filechooser.GhidraFileChooser; +import generic.theme.GIcon; import ghidra.framework.options.SaveState; import ghidra.framework.plugintool.ComponentProviderAdapter; import ghidra.util.HelpLocation; import ghidra.util.Msg; import ghidra.util.datastruct.FixedSizeStack; -import resources.ResourceManager; +import resources.Icons; public class TextEditorComponentProvider extends ComponentProviderAdapter { private static final String TITLE = "Text Editor"; @@ -200,7 +201,7 @@ public class TextEditorComponentProvider extends ComponentProviderAdapter { }; undoAction.setDescription("Undo"); undoAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/undo.png"), "UndoRedo")); + new ToolBarData(new GIcon("icon.undo"), "UndoRedo")); undoAction.setEnabled(false); plugin.getTool().addLocalAction(this, undoAction); @@ -218,7 +219,7 @@ public class TextEditorComponentProvider extends ComponentProviderAdapter { }; redoAction.setDescription("Redo"); redoAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/redo.png"), "UndoRedo")); + new ToolBarData(new GIcon("icon.redo"), "UndoRedo")); redoAction.setEnabled(false); plugin.getTool().addLocalAction(this, redoAction); @@ -236,7 +237,7 @@ public class TextEditorComponentProvider extends ComponentProviderAdapter { }; saveAction.setDescription("Save"); saveAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/disk.png"), "Save")); + new ToolBarData(Icons.SAVE_ICON, "Save")); saveAction.setEnabled(false); plugin.getTool().addLocalAction(this, saveAction); @@ -254,7 +255,7 @@ public class TextEditorComponentProvider extends ComponentProviderAdapter { }; saveAsAction.setDescription("Save As..."); saveAsAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/disk_save_as.png"), "Save")); + new ToolBarData(Icons.SAVE_AS_ICON, "Save")); saveAsAction.setEnabled(true); plugin.getTool().addLocalAction(this, saveAsAction); @@ -265,7 +266,7 @@ public class TextEditorComponentProvider extends ComponentProviderAdapter { } }; fontAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/text_lowercase.png"), "ZZFont")); + new ToolBarData(new GIcon("icon.font"), "ZZFont")); fontAction.setDescription("Select Font"); fontAction.setEnabled(true); plugin.getTool().addLocalAction(this, fontAction); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/EquateTableProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/EquateTableProvider.java index 793a3bd759..56f30a71fe 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/EquateTableProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/equate/EquateTableProvider.java @@ -40,12 +40,10 @@ import ghidra.program.model.symbol.Equate; import ghidra.util.HelpLocation; import ghidra.util.UniversalID; import ghidra.util.table.*; -import resources.ResourceManager; +import resources.Icons; public class EquateTableProvider extends ComponentProviderAdapter { - private final static String DELETE_IMAGE = "images/edit-delete.png"; - private EquateTablePlugin plugin; private GhidraTable equatesTable; private EquateTableModel equatesModel; @@ -160,8 +158,8 @@ public class EquateTableProvider extends ComponentProviderAdapter { @Override public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN || - e.getKeyCode() == KeyEvent.VK_PAGE_UP || - e.getKeyCode() == KeyEvent.VK_PAGE_DOWN) { + e.getKeyCode() == KeyEvent.VK_PAGE_UP || + e.getKeyCode() == KeyEvent.VK_PAGE_DOWN) { handleEquateTableSelection(); } } @@ -191,7 +189,7 @@ public class EquateTableProvider extends ComponentProviderAdapter { Equate equate = (Equate) table.getValueAt(row, column); UniversalID id = - new UniversalID(Long.parseLong(equate.getName().split(":")[1])); + new UniversalID(Long.parseLong(equate.getName().split(":")[1])); Enum enoom = (Enum) dtm.findDataTypeForID(id); if (enoom != null) { dtms.edit(enoom); @@ -254,7 +252,7 @@ public class EquateTableProvider extends ComponentProviderAdapter { JPanel workPanel = new JPanel(new BorderLayout()); JSplitPane splitPane = - new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, equatesPanel, referencesPanel); + new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, equatesPanel, referencesPanel); splitPane.setResizeWeight(0.5); workPanel.add(splitPane, BorderLayout.CENTER); @@ -269,7 +267,7 @@ public class EquateTableProvider extends ComponentProviderAdapter { private void createAction() { - ImageIcon deleteImage = ResourceManager.loadImage(DELETE_IMAGE); + Icon deleteImage = Icons.DELETE_ICON; deleteAction = new DockingAction("Delete Equate", plugin.getName()) { @Override public void actionPerformed(ActionContext context) { @@ -291,7 +289,7 @@ public class EquateTableProvider extends ComponentProviderAdapter { deleteAction.setHelpLocation(new HelpLocation("EquatePlugin", "Delete Equate")); SelectionNavigationAction selectionNavigationAction = - new SelectionNavigationAction(plugin, referencesTable); + new SelectionNavigationAction(plugin, referencesTable); selectionNavigationAction.setHelpLocation( new HelpLocation(HelpTopics.SEARCH, "Selection_Navigation")); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/fallthrough/FallThroughDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/fallthrough/FallThroughDialog.java index 74d62df7c1..5b62e4aa60 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/fallthrough/FallThroughDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/fallthrough/FallThroughDialog.java @@ -16,9 +16,6 @@ package ghidra.app.plugin.core.fallthrough; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.net.URL; import javax.swing.*; import javax.swing.border.TitledBorder; @@ -31,14 +28,10 @@ import docking.widgets.label.GDLabel; import ghidra.app.util.AddressInput; import ghidra.program.model.address.Address; import ghidra.util.HelpLocation; -import resources.ResourceManager; +import resources.Icons; /** - * Dialog to prompt for overriding a fallthrough address on an - * instruction. - * - * - * + * Dialog to prompt for overriding a fallthrough address on an instruction. */ class FallThroughDialog extends DialogComponentProvider implements ChangeListener { @@ -65,25 +58,16 @@ class FallThroughDialog extends DialogComponentProvider implements ChangeListene model.setChangeListener(this); } - /** - * @see ghidra.util.bean.GhidraDialog#applyCallback() - */ @Override protected void applyCallback() { model.execute(); } - /** - * @see ghidra.util.bean.GhidraDialog#cancelCallback() - */ @Override protected void cancelCallback() { close(); } - /** - * @see ghidra.util.bean.GhidraDialog#okCallback() - */ @Override protected void okCallback() { if (model.execute()) { @@ -91,9 +75,6 @@ class FallThroughDialog extends DialogComponentProvider implements ChangeListene } } - /** - * @see javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent) - */ public void updateState() { Address addr = model.getAddress(); if (addr == null) { @@ -140,18 +121,15 @@ class FallThroughDialog extends DialogComponentProvider implements ChangeListene return; } - Runnable r = new Runnable() { - @Override - public void run() { - Address addr = addrField.getAddress(); - if (addr != null || addrField.getValue().length() == 0) { - model.setCurrentFallthrough(addr); - } - else { - setStatusText("Invalid Address"); - setOkEnabled(false); - setApplyEnabled(false); - } + Runnable r = () -> { + Address addr = addrField.getAddress(); + if (addr != null || addrField.getValue().length() == 0) { + model.setCurrentFallthrough(addr); + } + else { + setStatusText("Invalid Address"); + setOkEnabled(false); + setApplyEnabled(false); } }; SwingUtilities.invokeLater(r); @@ -162,18 +140,8 @@ class FallThroughDialog extends DialogComponentProvider implements ChangeListene panel.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); addrField = new AddressInput(); addrField.setAddressFactory(model.getProgram().getAddressFactory()); - addrField.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - addressChanged(); - } - }); - addrField.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - model.setCurrentFallthrough(addrField.getAddress()); - } - }); + addrField.addChangeListener(e -> addressChanged()); + addrField.addActionListener(e -> model.setCurrentFallthrough(addrField.getAddress())); panel.add(createHomePanel(), BorderLayout.NORTH); panel.add(createAddressPanel(), BorderLayout.CENTER); return panel; @@ -201,13 +169,8 @@ class FallThroughDialog extends DialogComponentProvider implements ChangeListene instLabel = new GDLabel("jmp DAT_01001000"); instLabel.setFont(monoFont); - homeButton = createButton("images/go-home.png", "Home"); - homeButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - plugin.goTo(model.getAddress()); - } - }); + homeButton = createButton("Home"); + homeButton.addActionListener(e -> plugin.goTo(model.getAddress())); JPanel innerPanel = new JPanel(); BoxLayout bl = new BoxLayout(innerPanel, BoxLayout.X_AXIS); @@ -232,21 +195,11 @@ class FallThroughDialog extends DialogComponentProvider implements ChangeListene ButtonGroup group = new ButtonGroup(); defaultRB = new GRadioButton("Default", true); - defaultRB.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent ev) { - model.defaultSelected(); - } - }); + defaultRB.addActionListener(ev -> model.defaultSelected()); defaultRB.setToolTipText("Use default fallthrough address"); userRB = new GRadioButton("User", false); - userRB.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent ev) { - model.userSelected(); - } - }); + userRB.addActionListener(ev -> model.userSelected()); userRB.setToolTipText("Override default fallthrough address"); group.add(defaultRB); @@ -260,18 +213,13 @@ class FallThroughDialog extends DialogComponentProvider implements ChangeListene return outerPanel; } - private JButton createButton(String filename, String altText) { + private JButton createButton(String altText) { JButton button = new JButton(); - URL imageURL = ResourceManager.getResource(filename); - if (imageURL != null) { - ImageIcon icon = new ImageIcon(imageURL); - button = new JButton(icon); - Insets noInsets = new Insets(0, 0, 0, 0); - button.setMargin(noInsets); - } - else { - button = new JButton(altText); - } + Icon icon = Icons.HOME_ICON; + button = new JButton(icon); + Insets noInsets = new Insets(0, 0, 0, 0); + button.setMargin(noInsets); + button.setToolTipText("Go back to home address"); return button; } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/FunctionEditorDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/FunctionEditorDialog.java index fd6c53928b..1f70f889e4 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/FunctionEditorDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/FunctionEditorDialog.java @@ -36,6 +36,7 @@ import docking.widgets.combobox.GComboBox; import docking.widgets.label.GLabel; import docking.widgets.table.*; import generic.theme.GColor; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors; import generic.theme.GThemeDefaults.Colors.*; import generic.util.WindowUtilities; @@ -50,16 +51,12 @@ import ghidra.program.model.symbol.ExternalLocation; import ghidra.util.*; import ghidra.util.layout.PairLayout; import ghidra.util.layout.VerticalLayout; -import resources.ResourceManager; +import resources.Icons; public class FunctionEditorDialog extends DialogComponentProvider implements ModelChangeListener { private static final Color FG_COLOR_THUNK = new GColor("color.fg.plugin.function.editor.dialog.thunk"); - private static Icon ADD_ICON = ResourceManager.loadImage("images/Plus.png"); - private static Icon REMOVE_ICON = ResourceManager.loadImage("images/edit-delete.png"); - private static Icon UP_ICON = ResourceManager.loadImage("images/up.png"); - private static Icon DOWN_ICON = ResourceManager.loadImage("images/down.png"); private FunctionEditorModel model; private DocumentListener nameFieldDocumentListener; private GTable parameterTable; @@ -446,10 +443,10 @@ public class FunctionEditorDialog extends DialogComponentProvider implements Mod private Component buildButtonPanel() { JPanel panel = new JPanel(new VerticalLayout(5)); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - addButton = new JButton(ADD_ICON); - removeButton = new JButton(REMOVE_ICON); - upButton = new JButton(UP_ICON); - downButton = new JButton(DOWN_ICON); + addButton = new JButton(Icons.ADD_ICON); + removeButton = new JButton(Icons.DELETE_ICON); + upButton = new JButton(new GIcon("icon.up")); + downButton = new JButton(new GIcon("icon.down")); addButton.setToolTipText("Add parameter"); removeButton.setToolTipText("Delete selected parameters"); upButton.setToolTipText("Move selected parameter up"); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/FunctionTagButtonPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/FunctionTagButtonPanel.java index a0e17897cc..fae3c7d2c7 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/FunctionTagButtonPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/tags/FunctionTagButtonPanel.java @@ -20,8 +20,8 @@ import java.awt.event.ActionListener; import javax.swing.*; +import generic.theme.GIcon; import resources.Icons; -import resources.ResourceManager; /** * Provides buttons to be used with the {@link FunctionTagProvider}. @@ -35,9 +35,6 @@ import resources.ResourceManager; */ public class FunctionTagButtonPanel extends JPanel { - private Icon ADD_IMG = ResourceManager.loadImage("images/2rightarrow.png"); - private Icon REMOVE_IMG = ResourceManager.loadImage("images/2leftarrow.png"); - private SourceTagsPanel sourcePanel; private TargetTagsPanel targetPanel; private JButton addBtn; @@ -101,25 +98,24 @@ public class FunctionTagButtonPanel extends JPanel { deleteBtn.setEnabled(hasSelection && !isImmutable); } - /****************************************************************************** - * PRIVATE METHODS - ******************************************************************************/ - private void createButtonPanel() { setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; - addBtn = createButton("addBtn", ADD_IMG, "Add selected tags to the function", + addBtn = createButton("addBtn", new GIcon("icon.plugin.functiontags.add"), + "Add selected tags to the function", e -> { sourcePanel.addSelectedTags(); }); add(addBtn, gbc); gbc.gridy = 1; - removeBtn = createButton("removeBtn", REMOVE_IMG, "Remove selected tags from the function", - e -> targetPanel.removeSelectedTags()); + removeBtn = + createButton("removeBtn", new GIcon("icon.plugin.functiontags.remove"), + "Remove selected tags from the function", + e -> targetPanel.removeSelectedTags()); add(removeBtn, gbc); gbc.gridy = 2; @@ -147,7 +143,6 @@ public class FunctionTagButtonPanel extends JPanel { JButton button = new JButton(name); button.setName(name); button.setToolTipText(tooltip); - icon = ResourceManager.getScaledIcon(icon, 16, 16); button.setIcon(icon); button.setText(""); button.addActionListener(action); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonPanel.java index 8ca6920578..5dd2e8cc3e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/FunctionComparisonPanel.java @@ -31,6 +31,7 @@ import docking.ComponentProvider; import docking.action.*; import docking.widgets.fieldpanel.internal.FieldPanelCoordinator; import docking.widgets.tabbedpane.DockingTabRenderer; +import generic.theme.GIcon; import ghidra.app.util.viewer.listingpanel.ListingCodeComparisonPanel; import ghidra.app.util.viewer.util.CodeComparisonPanel; import ghidra.framework.options.SaveState; @@ -44,7 +45,6 @@ import ghidra.util.Msg; import ghidra.util.classfinder.ClassSearcher; import help.Help; import help.HelpService; -import resources.ResourceManager; /** * A panel for displaying {@link Function functions}, {@link Data data}, or @@ -66,9 +66,10 @@ public class FunctionComparisonPanel extends JPanel implements ChangeListener { private static final HelpService help = Help.getHelpService(); private static final String HELP_TOPIC = "FunctionComparison"; - private static final Icon SYNC_SCROLLING_ICON = ResourceManager.loadImage("images/lock.gif"); + private static final Icon SYNC_SCROLLING_ICON = + new GIcon("icon.plugin.functioncompare.scroll.lock"); private static final Icon UNSYNC_SCROLLING_ICON = - ResourceManager.loadImage("images/unlock.gif"); + new GIcon("icon.plugin.functioncompare.scroll.unlock"); private static final String SCROLLING_GROUP = "A9_SCROLLING"; private static final String DUAL_SCROLLING_ACTION_GROUP = "DualScrolling"; private static final String DUAL_SCROLLING_HELP_TOPIC = "FunctionComparison"; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/CompareFunctionsAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/CompareFunctionsAction.java index 3bab2121d1..79063dce92 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/CompareFunctionsAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/CompareFunctionsAction.java @@ -19,18 +19,14 @@ import java.awt.event.InputEvent; import java.util.Set; import javax.swing.Icon; -import javax.swing.ImageIcon; import docking.ActionContext; import docking.action.*; +import generic.theme.GIcon; import ghidra.app.services.FunctionComparisonService; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.listing.Function; import ghidra.util.HelpLocation; -import resources.MultiIcon; -import resources.ResourceManager; -import resources.icons.ScaledImageIcon; -import resources.icons.TranslateIcon; /** * Creates a new comparison between a set of functions, launching a new @@ -45,13 +41,7 @@ public abstract class CompareFunctionsAction extends DockingAction { protected FunctionComparisonService comparisonService; - private static final ImageIcon COMPARISON_ICON = - ResourceManager.loadImage("images/page_white_c.png"); - private static final Icon NEW_ICON = ResourceManager.loadImage("images/bullet_star.png"); - private static final Icon SCALED_NEW_ICON = new ScaledImageIcon(NEW_ICON, 16, 16); - private static final Icon TRANSLATED_NEW_ICON = new TranslateIcon(SCALED_NEW_ICON, 4, -4); - private static final Icon CREATE_NEW_COMPARISON_ICON = - new MultiIcon(COMPARISON_ICON, TRANSLATED_NEW_ICON); + private static final Icon COMPARISON_ICON = new GIcon("icon.plugin.functioncompare.new"); private static final String CREATE_COMPARISON_GROUP = "A9_CreateComparison"; static final String POPUP_MENU_NAME = "Compare Selected Functions"; @@ -85,7 +75,7 @@ public abstract class CompareFunctionsAction extends DockingAction { * @return the icon */ protected Icon getToolBarIcon() { - return CREATE_NEW_COMPARISON_ICON; + return COMPARISON_ICON; } /** diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/NextFunctionAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/NextFunctionAction.java index 2c7afcbe4d..915724a1ec 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/NextFunctionAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/NextFunctionAction.java @@ -24,13 +24,11 @@ import javax.swing.JComboBox; import docking.ActionContext; import docking.ComponentProvider; import docking.action.*; +import generic.theme.GIcon; import ghidra.app.plugin.core.functioncompare.MultiFunctionComparisonPanel; import ghidra.app.plugin.core.functioncompare.MultiFunctionComparisonProvider; import ghidra.program.model.listing.Function; import ghidra.util.HelpLocation; -import resources.MultiIcon; -import resources.ResourceManager; -import resources.icons.TranslateIcon; /** * Displays the next available function in the function comparison panel. If @@ -39,11 +37,8 @@ import resources.icons.TranslateIcon; public class NextFunctionAction extends DockingAction { private static final String FUNCTION_NAVIGATE_GROUP = "A9_FunctionNavigate"; - private static final Icon NEXT_ICON = - new TranslateIcon(ResourceManager.loadImage("images/arrow_down.png"), 3, 1); - private static final Icon FUNCTION_ICON = - new TranslateIcon(ResourceManager.loadImage("images/FunctionScope.gif"), -5, -2); - private static final Icon NEXT_FUNCTION_ICON = new MultiIcon(NEXT_ICON, FUNCTION_ICON); + private static final Icon NEXT_FUNCTION_ICON = + new GIcon("icon.plugin.functioncompare.function.next"); /** * Constructor diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/OpenFunctionTableAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/OpenFunctionTableAction.java index b4f3e5cffa..77f42d7063 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/OpenFunctionTableAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/OpenFunctionTableAction.java @@ -20,11 +20,11 @@ import java.util.*; import java.util.stream.Collectors; import javax.swing.Icon; -import javax.swing.ImageIcon; import docking.ActionContext; import docking.action.*; import docking.widgets.dialogs.TableSelectionDialog; +import generic.theme.GIcon; import ghidra.app.plugin.core.functioncompare.FunctionComparisonProvider; import ghidra.app.plugin.core.functioncompare.MultiFunctionComparisonPanel; import ghidra.app.plugin.core.functionwindow.FunctionRowObject; @@ -35,10 +35,6 @@ import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.listing.Function; import ghidra.program.model.listing.Program; import ghidra.util.HelpLocation; -import resources.MultiIcon; -import resources.ResourceManager; -import resources.icons.ScaledImageIcon; -import resources.icons.TranslateIcon; import util.CollectionUtils; /** @@ -49,14 +45,9 @@ import util.CollectionUtils; */ public class OpenFunctionTableAction extends DockingAction { - private static final Icon ADD_ICON = ResourceManager.loadImage("images/Plus.png"); - private static final Icon SCALED_ADD_ICON = new ScaledImageIcon(ADD_ICON, 10, 10); - private static final ImageIcon COMPARISON_ICON = - ResourceManager.loadImage("images/page_white_c.png"); - private static final Icon TRANSLATED_ADD_ICON = new TranslateIcon(SCALED_ADD_ICON, 8, 1); private static final String ADD_COMPARISON_GROUP = "A9_AddToComparison"; private static final Icon ADD_TO_COMPARISON_ICON = - new MultiIcon(COMPARISON_ICON, TRANSLATED_ADD_ICON); + new GIcon("icon.plugin.functioncompare.open.function.table"); protected PluginTool tool; protected ProgramManager programManagerService; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/PreviousFunctionAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/PreviousFunctionAction.java index 01be55d06e..ece250013a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/PreviousFunctionAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/PreviousFunctionAction.java @@ -24,13 +24,11 @@ import javax.swing.JComboBox; import docking.ActionContext; import docking.ComponentProvider; import docking.action.*; +import generic.theme.GIcon; import ghidra.app.plugin.core.functioncompare.MultiFunctionComparisonPanel; import ghidra.app.plugin.core.functioncompare.MultiFunctionComparisonProvider; import ghidra.program.model.listing.Function; import ghidra.util.HelpLocation; -import resources.MultiIcon; -import resources.ResourceManager; -import resources.icons.TranslateIcon; /** * Displays the previous function in the function comparison panel. If @@ -39,11 +37,8 @@ import resources.icons.TranslateIcon; public class PreviousFunctionAction extends DockingAction { private static final String FUNCTION_NAVIGATE_GROUP = "A9_FunctionNavigate"; - private static final Icon PREVIOUS_ICON = - new TranslateIcon(ResourceManager.loadImage("images/arrow_up.png"), 3, 1); - private static final Icon FUNCTION_ICON = - new TranslateIcon(ResourceManager.loadImage("images/FunctionScope.gif"), -5, -2); - private static final Icon PREVIOUS_FUNCTION_ICON = new MultiIcon(PREVIOUS_ICON, FUNCTION_ICON); + private static final Icon PREVIOUS_FUNCTION_ICON = + new GIcon("icon.plugin.functioncompare.function.previous"); /** * Constructor diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/RemoveFunctionsAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/RemoveFunctionsAction.java index f1cead3ba8..cf390a5fef 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/RemoveFunctionsAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functioncompare/actions/RemoveFunctionsAction.java @@ -25,13 +25,11 @@ import javax.swing.JComboBox; import docking.ActionContext; import docking.action.*; +import generic.theme.GIcon; import ghidra.app.plugin.core.functioncompare.MultiFunctionComparisonPanel; import ghidra.app.plugin.core.functioncompare.MultiFunctionComparisonProvider; import ghidra.program.model.listing.Function; import ghidra.util.HelpLocation; -import resources.MultiIcon; -import resources.ResourceManager; -import resources.icons.TranslateIcon; /** * Removes the currently-selected function from the comparison panel. If no @@ -39,12 +37,9 @@ import resources.icons.TranslateIcon; */ public class RemoveFunctionsAction extends DockingAction { - private static final Icon FUNCTION_ICON = - new TranslateIcon(ResourceManager.loadImage("images/FunctionScope.gif"), -5, -2); - private static final Icon REMOVE_ICON = - new TranslateIcon(ResourceManager.loadImage("images/edit-delete.png"), 3, 3); private static final String REMOVE_FUNCTION_GROUP = "A9_RemoveFunctions"; - private static final Icon REMOVE_FUNCTION_ICON = new MultiIcon(REMOVE_ICON, FUNCTION_ICON); + private static final Icon REMOVE_FUNCTION_ICON = + new GIcon("icon.plugin.functioncompare.function.remove"); /** * Constructor diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functionwindow/FunctionWindowProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functionwindow/FunctionWindowProvider.java index 274d48bc47..67395fa17f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functionwindow/FunctionWindowProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/functionwindow/FunctionWindowProvider.java @@ -25,6 +25,7 @@ import javax.swing.*; import javax.swing.table.*; import docking.ActionContext; +import generic.theme.GIcon; import ghidra.app.services.GoToService; import ghidra.framework.plugintool.ComponentProviderAdapter; import ghidra.program.model.address.Address; @@ -32,14 +33,13 @@ import ghidra.program.model.listing.*; import ghidra.program.util.ProgramSelection; import ghidra.util.HelpLocation; import ghidra.util.table.*; -import resources.ResourceManager; /** * Provider that displays all functions in the selected program */ public class FunctionWindowProvider extends ComponentProviderAdapter { - public static final ImageIcon icon = ResourceManager.loadImage("images/functions.gif"); + public static final Icon ICON = new GIcon("icon.plugin.functionwindow.provider"); private FunctionWindowPlugin plugin; private GhidraTable functionTable; @@ -58,7 +58,7 @@ public class FunctionWindowProvider extends ComponentProviderAdapter { super(plugin.getTool(), "Functions Window", plugin.getName()); setTitle("Functions"); this.plugin = plugin; - setIcon(icon); + setIcon(ICON); setHelpLocation(new HelpLocation(plugin.getName(), plugin.getName())); tool = plugin.getTool(); mainPanel = createWorkPanel(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/InstructionTable.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/InstructionTable.java index 59774e24f0..6499b49a69 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/InstructionTable.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/InstructionTable.java @@ -22,6 +22,7 @@ import javax.swing.*; import docking.DockingWindowManager; import docking.widgets.EmptyBorderButton; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors.Messages; import ghidra.app.plugin.core.instructionsearch.InstructionSearchPlugin; import ghidra.app.plugin.core.instructionsearch.model.*; @@ -32,6 +33,7 @@ import ghidra.util.HelpLocation; import ghidra.util.Msg; import ghidra.util.exception.InvalidInputException; import ghidra.util.task.*; +import resources.Icons; import resources.ResourceManager; /** @@ -47,15 +49,6 @@ public class InstructionTable extends AbstractInstructionTable { // Defines the width/height for all icons on the toolbar private static final int ICON_SIZE = 16; - private static final String GO_HOME_ICON_OVERLAY = "images/go-home.png"; - private static final String ADDRESS_ICON_OVERLAY = "images/DOSA_A.png"; - private static final String SCALAR_ICON_OVERLAY = "images/DOSA_S.png"; - private static final String OPERAND_ICON_OVERLAY = "images/DOSA_O.png"; - private static final String UNDEFINED_ICON_OVERLAY = "images/DOSA_D.png"; - private static final String CLEAR_ICON_OVERLAY = "images/edit-clear.png"; - private static final String RELOAD_ICON_OVERLAY = "images/reload.png"; - private static final String MANUAL_ENTRY_ICON_OVERLAY = "images/editbytes.gif"; - // Need to keep track of the column in case the user clicks on the column header and we // need to display the context menu. private int selectedColumn = -1; @@ -287,21 +280,21 @@ public class InstructionTable extends AbstractInstructionTable { } private void createGoToAddressBtn(JToolBar buttonToolbar) { - Icon icon = ResourceManager.loadImage(GO_HOME_ICON_OVERLAY); + Icon icon = Icons.HOME_ICON; Action action = new NavAction("navigation", icon, "Navigate to the address defined by this instruction set"); createToolbarButton(buttonToolbar, icon, action, "nav button"); } private void createMaskClearAllBtn(JToolBar buttonToolbar) { - Icon icon = ResourceManager.loadImage(CLEAR_ICON_OVERLAY); + Icon icon = Icons.CLEAR_ICON; Icon scaledIcon = ResourceManager.getScaledIcon(icon, ICON_SIZE, ICON_SIZE); Action action = new ClearMasksAction("undefined", scaledIcon, "Unmask all"); createToolbarButton(buttonToolbar, icon, action, "unmask all button"); } private void createReloadBtn(JToolBar buttonToolbar) { - Icon icon = ResourceManager.loadImage(RELOAD_ICON_OVERLAY); + Icon icon = Icons.REFRESH_ICON; Icon scaledIcon = ResourceManager.getScaledIcon(icon, ICON_SIZE, ICON_SIZE); Action action = new ReloadAction("undefined", scaledIcon, "Load selected instructions from listing"); @@ -309,14 +302,14 @@ public class InstructionTable extends AbstractInstructionTable { } private void createManualEditBtn(JToolBar buttonToolbar) { - Icon icon = ResourceManager.loadImage(MANUAL_ENTRY_ICON_OVERLAY); + Icon icon = new GIcon("icon.plugin.instructiontable.manual.entry"); Icon scaledIcon = ResourceManager.getScaledIcon(icon, ICON_SIZE, ICON_SIZE); Action action = new ManualEntryAction("undefined", scaledIcon, "Enter bytes manually"); createToolbarButton(buttonToolbar, icon, action, "manual entry"); } private void createMaskDataBtn(JToolBar buttonToolbar) { - Icon icon = ResourceManager.loadImage(UNDEFINED_ICON_OVERLAY); + Icon icon = new GIcon("icon.plugin.instructiontable.undefined"); Icon scaledIcon = ResourceManager.getScaledIcon(icon, ICON_SIZE, ICON_SIZE); Action action = new MaskUndefinedAction("undefined", scaledIcon, "Mask all non-instructions (data)"); @@ -324,21 +317,21 @@ public class InstructionTable extends AbstractInstructionTable { } private void createMaskAddressesBtn(JToolBar buttonToolbar) { - Icon icon = ResourceManager.loadImage(ADDRESS_ICON_OVERLAY); + Icon icon = new GIcon("icon.plugin.instructiontable.address"); Icon scaledIcon = ResourceManager.getScaledIcon(icon, ICON_SIZE, ICON_SIZE); Action action = new MaskAddressesAction("addresses", scaledIcon, "Mask all addresses"); createToolbarButton(buttonToolbar, icon, action, "mask addresses button"); } private void createMaskScalarsBtn(JToolBar buttonToolbar) { - Icon icon = ResourceManager.loadImage(SCALAR_ICON_OVERLAY); + Icon icon = new GIcon("icon.plugin.instructiontable.scalar"); Icon scaledIcon = ResourceManager.getScaledIcon(icon, ICON_SIZE, ICON_SIZE); Action action = new MaskScalarsAction("scalars", scaledIcon, "Mask all scalars"); createToolbarButton(buttonToolbar, icon, action, "mask scalars button"); } private void createMaskOperandsBtn(JToolBar buttonToolbar) { - Icon icon = ResourceManager.loadImage(OPERAND_ICON_OVERLAY); + Icon icon = new GIcon("icon.plugin.instructiontable.operand"); Icon scaledIcon = ResourceManager.getScaledIcon(icon, ICON_SIZE, ICON_SIZE); Action action = new MaskOperandsAction("operands", scaledIcon, "Mask all operands"); createToolbarButton(buttonToolbar, icon, action, "mask operands button"); @@ -549,7 +542,6 @@ public class InstructionTable extends AbstractInstructionTable { /** * Creates a new {@link InstructionTableDataObject} for the given operand. * - * @param mnemonic the mnemonic ID * @param col the column in the table * @param dataObjects the set of data objects to modify */ diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/PreviewTable.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/PreviewTable.java index 9e4692de6f..5310ba7fbd 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/PreviewTable.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/instructionsearch/ui/PreviewTable.java @@ -31,6 +31,7 @@ import docking.action.DockingAction; import docking.action.MenuData; import docking.dnd.GClipboard; import docking.widgets.EmptyBorderButton; +import generic.theme.GIcon; import ghidra.app.plugin.core.instructionsearch.InstructionSearchPlugin; import ghidra.app.plugin.core.instructionsearch.model.*; import ghidra.app.plugin.core.instructionsearch.ui.SelectionModeWidget.InputMode; @@ -39,7 +40,7 @@ import ghidra.framework.plugintool.PluginTool; import ghidra.util.Msg; import ghidra.util.exception.InvalidInputException; import ghidra.util.task.*; -import resources.ResourceManager; +import resources.Icons; /** * Displays the preview string for all instructions in the @@ -231,12 +232,6 @@ public class PreviewTable extends AbstractInstructionTable { new TaskLauncher(task, PreviewTable.this); } - /********************************************************************************************* - * PROTECTED METHODS - ********************************************************************************************/ - /** - * - */ @Override protected Object[] createColumnHeaders() { @@ -246,9 +241,6 @@ public class PreviewTable extends AbstractInstructionTable { return colsNames; } - /** - * - */ @Override protected JToolBar createToolbar() { JToolBar toolbar1 = new JToolBar(); @@ -293,10 +285,6 @@ public class PreviewTable extends AbstractInstructionTable { return dataObjects; } - /********************************************************************************************* - * PRIVATE METHODS - ********************************************************************************************/ - private void buildPreviewString(int instrSize, String valueStr, String maskStr, int posptr, int row) { @@ -328,7 +316,7 @@ public class PreviewTable extends AbstractInstructionTable { } private void createCopyBtn(JToolBar toolbar1) { - Icon copyIcon = ResourceManager.loadImage("images/page_white_copy.png"); + Icon copyIcon = Icons.COPY_ICON; Action copyAction = new CopyAction("copy", (ImageIcon) copyIcon, "Copy the full search string to clipboard"); EmptyBorderButton copyBtn = new EmptyBorderButton(); @@ -339,7 +327,7 @@ public class PreviewTable extends AbstractInstructionTable { } private EmptyBorderToggleButton createHexViewBtn(JToolBar toolbar1) { - Icon hexIcon = ResourceManager.loadImage("images/hexData.png"); + Icon hexIcon = new GIcon("icon.plugin.instructiontable.hex"); Action hexAction = new HexAction("hex", (ImageIcon) hexIcon, "hex view"); EmptyBorderToggleButton hexBtn = new EmptyBorderToggleButton(); hexBtn.setAction(hexAction); @@ -351,7 +339,7 @@ public class PreviewTable extends AbstractInstructionTable { } private EmptyBorderToggleButton createBinaryViewBtn(JToolBar toolbar1) { - Icon binaryIcon = ResourceManager.loadImage("images/binaryData.gif"); + Icon binaryIcon = new GIcon("icon.plugin.instructiontable.binary"); Action binaryAction = new BinaryAction("binary", (ImageIcon) binaryIcon, "binary view"); EmptyBorderToggleButton binaryBtn = new EmptyBorderToggleButton(); binaryBtn.setAction(binaryAction); @@ -449,19 +437,19 @@ public class PreviewTable extends AbstractInstructionTable { createCopyNoSpacesAction(owner); copyNoSpacesAction.setPopupMenuData( new MenuData(new String[] { "Copy Special", "Selected instructions (no spaces)" }, - ResourceManager.loadImage("images/page_white_copy.png"), actionMenuGroup, + Icons.COPY_ICON, actionMenuGroup, MenuData.NO_MNEMONIC, Integer.toString(1))); createCopyInstructionAction(owner); copyInstructionAction.setPopupMenuData( new MenuData(new String[] { "Copy Special", "Selected Instructions" }, - ResourceManager.loadImage("images/page_white_copy.png"), actionMenuGroup, + Icons.COPY_ICON, actionMenuGroup, MenuData.NO_MNEMONIC, Integer.toString(1))); createCopyInstructionWithCommentsAction(owner); copyInstructionWithCommentsAction.setPopupMenuData( new MenuData(new String[] { "Copy Special", "Selected Instructions (with comments)" }, - ResourceManager.loadImage("images/page_white_copy.png"), actionMenuGroup, + Icons.COPY_ICON, actionMenuGroup, MenuData.NO_MNEMONIC, Integer.toString(1))); dialog.addAction(copyNoSpacesAction); @@ -488,8 +476,12 @@ public class PreviewTable extends AbstractInstructionTable { if (comment != null) { StringBuilder builder = new StringBuilder(); - builder.append(val).append("\t").append("// ").append(comment).append( - "\n"); + builder.append(val) + .append("\t") + .append("// ") + .append(comment) + .append( + "\n"); val = builder.toString(); } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/interpreter/InterpreterComponentProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/interpreter/InterpreterComponentProvider.java index 4db22f295a..d868bfeb9a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/interpreter/InterpreterComponentProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/interpreter/InterpreterComponentProvider.java @@ -26,18 +26,15 @@ import docking.ActionContext; import docking.action.DockingAction; import docking.action.ToolBarData; import docking.widgets.OptionDialog; +import generic.theme.GIcon; import ghidra.framework.plugintool.ComponentProviderAdapter; import ghidra.util.HelpLocation; import resources.Icons; -import resources.ResourceManager; import utility.function.Callback; public class InterpreterComponentProvider extends ComponentProviderAdapter implements InterpreterConsole { - private static final String CONSOLE_GIF = "images/monitor.png"; - private static final String CLEAR_GIF = "images/erase16.png"; - private InterpreterPanel panel; private InterpreterConnection interpreter; private List firstActivationCallbacks; @@ -57,7 +54,7 @@ public class InterpreterComponentProvider extends ComponentProviderAdapter Icon icon = interpreter.getIcon(); if (icon == null) { - icon = ResourceManager.loadImage(CONSOLE_GIF); + icon = new GIcon("icon.plugin.interpreter.provider"); } setIcon(icon); @@ -73,7 +70,7 @@ public class InterpreterComponentProvider extends ComponentProviderAdapter } }; clearAction.setDescription("Clear Interpreter"); - clearAction.setToolBarData(new ToolBarData(ResourceManager.loadImage(CLEAR_GIF), null)); + clearAction.setToolBarData(new ToolBarData(Icons.CLEAR_ICON, null)); clearAction.setEnabled(true); addLocalAction(clearAction); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/marker/PointMarkerSet.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/marker/PointMarkerSet.java index 5e241effab..e055d7bb98 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/marker/PointMarkerSet.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/marker/PointMarkerSet.java @@ -31,6 +31,7 @@ import ghidra.program.model.listing.Program; import ghidra.program.util.MarkerLocation; import ghidra.util.datastruct.Range; import ghidra.util.datastruct.SortedRangeList; +import resources.Icons; import resources.ResourceManager; class PointMarkerSet extends MarkerSetImpl { @@ -61,7 +62,7 @@ class PointMarkerSet extends MarkerSetImpl { colorBackground, markerColor, isPreferred); if (icon == null) { - icon = ResourceManager.loadImage("images/warning.png"); + icon = Icons.WARNING_ICON; } ImageIcon imageIcon = ResourceManager.getScaledIcon(icon, 16, 16, Image.SCALE_SMOOTH); image = imageIcon.getImage(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/MemoryMapProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/MemoryMapProvider.java index 07d3eb5c43..619dd824f3 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/MemoryMapProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/memory/MemoryMapProvider.java @@ -29,6 +29,7 @@ import docking.action.ToolBarData; import docking.widgets.label.GLabel; import docking.widgets.table.*; import docking.widgets.textfield.GValidatedTextField.MaxLengthField; +import generic.theme.GIcon; import ghidra.app.context.ProgramActionContext; import ghidra.framework.model.DomainFile; import ghidra.framework.plugintool.ComponentProviderAdapter; @@ -40,7 +41,6 @@ import ghidra.program.model.mem.MemoryBlockType; import ghidra.util.HelpLocation; import ghidra.util.Msg; import ghidra.util.table.GhidraTable; -import resources.ResourceManager; /** * Provider for the memory map Component. @@ -65,16 +65,6 @@ class MemoryMapProvider extends ComponentProviderAdapter { private MemoryMapPlugin plugin = null; - private final static String ADD_IMAGE = "images/Plus.png"; - private final static String MOVE_IMAGE = "images/move.png"; - private final static String SPLIT_IMAGE = "images/verticalSplit.png"; - private final static String EXPAND_UP_IMAGE = "images/collapse.gif"; - private final static String EXPAND_DOWN_IMAGE = "images/expand.gif"; - private final static String MERGE_IMAGE = "images/Merge.png"; - private final static String DELETE_IMAGE = "images/edit-delete.png"; - private final static String IMAGE_BASE = "images/house.png"; - final static String MEMORY_IMAGE = "images/memory16.gif"; - private Program program; private MemoryMapManager memManager; @@ -84,7 +74,7 @@ class MemoryMapProvider extends ComponentProviderAdapter { setHelpLocation(new HelpLocation(plugin.getName(), getName())); memManager = plugin.getMemoryMapManager(); - setIcon(ResourceManager.loadImage(MEMORY_IMAGE)); + setIcon(new GIcon("icon.plugin.memorymap.provider")); addToToolbar(); mainPanel = buildMainPanel(); addToTool(); @@ -185,7 +175,7 @@ class MemoryMapProvider extends ComponentProviderAdapter { } private void addLocalActions() { - ImageIcon addImage = ResourceManager.loadImage(ADD_IMAGE); + Icon addImage = new GIcon("icon.plugin.memorymap.add"); addAction = new MemoryMapAction("Add Block", addImage) { @Override @@ -200,7 +190,7 @@ class MemoryMapProvider extends ComponentProviderAdapter { addAction.setDescription("Add a new block to memory"); tool.addLocalAction(this, addAction); - ImageIcon moveImage = ResourceManager.loadImage(MOVE_IMAGE); + Icon moveImage = new GIcon("icon.plugin.memorymap.move"); moveAction = new MemoryMapAction("Move Block", moveImage) { @Override public void actionPerformed(ActionContext context) { @@ -213,7 +203,7 @@ class MemoryMapProvider extends ComponentProviderAdapter { moveAction.setDescription("Move a block to another address"); tool.addLocalAction(this, moveAction); - ImageIcon splitImage = ResourceManager.loadImage(SPLIT_IMAGE); + Icon splitImage = new GIcon("icon.plugin.memorymap.split"); splitAction = new MemoryMapAction("Split Block", splitImage) { @Override @@ -228,7 +218,7 @@ class MemoryMapProvider extends ComponentProviderAdapter { splitAction.setDescription("Split a block"); tool.addLocalAction(this, splitAction); - ImageIcon expandUpImage = ResourceManager.loadImage(EXPAND_UP_IMAGE); + Icon expandUpImage = new GIcon("icon.plugin.memorymap.expand.up"); expandUpAction = new MemoryMapAction("Expand Block Up", expandUpImage) { @Override @@ -242,7 +232,7 @@ class MemoryMapProvider extends ComponentProviderAdapter { expandUpAction.setDescription("Expand block by setting new start address"); tool.addLocalAction(this, expandUpAction); - ImageIcon expandDownImage = ResourceManager.loadImage(EXPAND_DOWN_IMAGE); + Icon expandDownImage = new GIcon("icon.plugin.memorymap.expand.down"); expandDownAction = new MemoryMapAction("Expand Block Down", expandDownImage) { @Override @@ -256,7 +246,7 @@ class MemoryMapProvider extends ComponentProviderAdapter { expandDownAction.setDescription("Expand block by setting new end address"); tool.addLocalAction(this, expandDownAction); - ImageIcon mergeImage = ResourceManager.loadImage(MERGE_IMAGE); + Icon mergeImage = new GIcon("icon.plugin.memorymap.merge"); mergeAction = new MemoryMapAction("Merge Blocks", mergeImage) { @Override public void actionPerformed(ActionContext context) { @@ -269,7 +259,7 @@ class MemoryMapProvider extends ComponentProviderAdapter { mergeAction.setDescription("Merge blocks into a single block"); tool.addLocalAction(this, mergeAction); - ImageIcon deleteImage = ResourceManager.loadImage(DELETE_IMAGE); + Icon deleteImage = new GIcon("icon.plugin.memorymap.delete"); deleteAction = new MemoryMapAction("Delete Block", deleteImage) { @Override public void actionPerformed(ActionContext context) { @@ -282,7 +272,7 @@ class MemoryMapProvider extends ComponentProviderAdapter { deleteAction.setDescription("Delete a block"); tool.addLocalAction(this, deleteAction); - ImageIcon setBaseIcon = ResourceManager.loadImage(IMAGE_BASE); + Icon setBaseIcon = new GIcon("icon.plugin.memorymap.image.base"); setBaseAction = new MemoryMapAction("Set Image Base", setBaseIcon) { @Override public void actionPerformed(ActionContext context) { @@ -687,7 +677,7 @@ class MemoryMapProvider extends ComponentProviderAdapter { } private abstract class MemoryMapAction extends DockingAction { - MemoryMapAction(String name, ImageIcon icon) { + MemoryMapAction(String name, Icon icon) { super(name, plugin.getName()); this.setToolBarData(new ToolBarData(icon, null)); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/misc/MyProgramChangesDisplayPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/misc/MyProgramChangesDisplayPlugin.java index f39ffa1f7b..b375368cf5 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/misc/MyProgramChangesDisplayPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/misc/MyProgramChangesDisplayPlugin.java @@ -24,12 +24,13 @@ package ghidra.app.plugin.core.misc; import java.awt.Color; import java.io.IOException; -import javax.swing.ImageIcon; +import javax.swing.Icon; import docking.ActionContext; import docking.action.DockingAction; import docking.action.ToolBarData; import generic.theme.GColor; +import generic.theme.GIcon; import ghidra.app.CorePluginPackage; import ghidra.app.plugin.PluginCategoryNames; import ghidra.app.plugin.ProgramPlugin; @@ -51,7 +52,6 @@ import ghidra.util.task.SwingUpdateManager; import ghidra.util.task.TaskMonitor; import ghidra.util.worker.Job; import ghidra.util.worker.Worker; -import resources.ResourceManager; /** * Manages the markers to display areas where changes have occurred @@ -120,7 +120,7 @@ public class MyProgramChangesDisplayPlugin extends ProgramPlugin implements Doma private void createActions() { - ImageIcon icon = ResourceManager.loadImage("images/vcMerge.png"); + Icon icon = new GIcon("icon.plugin.myprogramchanges.merge"); mergeAction = new DockingAction("Update", getName()) { @Override public void actionPerformed(ActionContext context) { @@ -137,7 +137,7 @@ public class MyProgramChangesDisplayPlugin extends ProgramPlugin implements Doma mergeAction.setDescription("Update checked out file with latest version"); mergeAction.setHelpLocation(new HelpLocation("VersionControl", mergeAction.getName())); - icon = ResourceManager.loadImage("images/vcCheckIn.png"); + icon = new GIcon("icon.plugin.myprogramchanges.checkin"); checkInAction = new DockingAction("CheckIn", getName()) { @Override public void actionPerformed(ActionContext context) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/AbstractNextPreviousAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/AbstractNextPreviousAction.java index c5700ad5d6..f58852193e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/AbstractNextPreviousAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/AbstractNextPreviousAction.java @@ -42,7 +42,7 @@ import resources.*; public abstract class AbstractNextPreviousAction extends NavigatableContextAction { private static final Icon INVERTED_OVERLAY_ICON = - ImageUtils.makeTransparent(ResourceManager.loadImage("images/dialog-cancel.png"), .5f); + ImageUtils.makeTransparent(Icons.NOT_ALLOWED_ICON, .5f); private boolean isForward = true; private PluginTool tool; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextHighlightedRangeAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextHighlightedRangeAction.java index 9c2b667386..a178fc9fb4 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextHighlightedRangeAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextHighlightedRangeAction.java @@ -20,6 +20,7 @@ import java.awt.event.KeyEvent; import docking.DockingUtils; import docking.action.*; import docking.tool.ToolConstants; +import generic.theme.GIcon; import ghidra.app.context.ProgramLocationActionContext; import ghidra.app.nav.NextRangeAction; import ghidra.app.plugin.PluginCategoryNames; @@ -27,19 +28,20 @@ import ghidra.app.util.HelpTopics; import ghidra.framework.plugintool.PluginTool; import ghidra.program.util.ProgramSelection; import ghidra.util.HelpLocation; -import resources.ResourceManager; public class NextHighlightedRangeAction extends NextRangeAction { + private static final GIcon ICON = new GIcon("icon.plugin.navigation.highlight.range.next"); + public NextHighlightedRangeAction(PluginTool tool, String owner, NavigationOptions navOptions) { super(tool, "Next Highlighted Range", owner, navOptions); setMenuBarData(new MenuData(new String[] { ToolConstants.MENU_NAVIGATION, - "Next Highlight Range" }, ResourceManager.loadImage("images/NextHighlightBlock16.gif"), + "Next Highlight Range" }, ICON, PluginCategoryNames.NAVIGATION, MenuData.NO_MNEMONIC, NextPrevHighlightRangePlugin.ACTION_SUB_GROUP)); setToolBarData(new ToolBarData( - ResourceManager.loadImage("images/NextHighlightBlock16.gif"), + ICON, ToolConstants.TOOLBAR_GROUP_THREE, NextPrevHighlightRangePlugin.ACTION_SUB_GROUP)); setKeyBindingData( new KeyBindingData(KeyEvent.VK_0, DockingUtils.CONTROL_KEY_MODIFIER_MASK)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPrevAddressPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPrevAddressPlugin.java index 9830bc6ba9..2745dfcb4b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPrevAddressPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPrevAddressPlugin.java @@ -21,12 +21,12 @@ import java.util.ArrayList; import java.util.List; import javax.swing.Icon; -import javax.swing.ImageIcon; import docking.ActionContext; import docking.action.*; import docking.menu.MultiActionDockingAction; import docking.tool.ToolConstants; +import generic.theme.GIcon; import ghidra.app.CorePluginPackage; import ghidra.app.context.NavigatableActionContext; import ghidra.app.context.ProgramActionContext; @@ -46,7 +46,6 @@ import ghidra.program.model.listing.*; import ghidra.program.model.symbol.Symbol; import ghidra.program.model.symbol.SymbolTable; import ghidra.util.HelpLocation; -import resources.ResourceManager; /** * NextPrevAddressPlugin allows the user to go back and forth in @@ -65,8 +64,8 @@ import resources.ResourceManager; public class NextPrevAddressPlugin extends Plugin { private static final String HISTORY_MENU_GROUP = "1_Menu_History_Group"; - private static ImageIcon previousIcon = ResourceManager.loadImage("images/left.png"); - private static ImageIcon nextIcon = ResourceManager.loadImage("images/right.png"); + private static Icon PREVIOUS_ICON = new GIcon("icon.plugin.navigation.location.previous"); + private static Icon NEXT_ICON = new GIcon("icon.plugin.navigation.location.next"); private static final String PREVIOUS_ACTION_NAME = "Previous Location in History"; private static final String NEXT_ACTION_NAME = "Next Location in History"; @@ -301,7 +300,7 @@ public class NextPrevAddressPlugin extends Plugin { super(name, owner); this.isNext = isNext; - setToolBarData(new ToolBarData(isNext ? nextIcon : previousIcon, + setToolBarData(new ToolBarData(isNext ? NEXT_ICON : PREVIOUS_ICON, ToolConstants.TOOLBAR_GROUP_TWO)); setHelpLocation(new HelpLocation(HelpTopics.NAVIGATION, name)); int keycode = isNext ? KeyEvent.VK_RIGHT : KeyEvent.VK_LEFT; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPrevCodeUnitPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPrevCodeUnitPlugin.java index f136f996ac..424da1777d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPrevCodeUnitPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPrevCodeUnitPlugin.java @@ -23,6 +23,7 @@ import javax.swing.Icon; import docking.ActionContext; import docking.action.*; import docking.tool.ToolConstants; +import generic.theme.GIcon; import generic.util.image.ImageUtils; import ghidra.app.CorePluginPackage; import ghidra.app.context.NavigatableActionContext; @@ -33,7 +34,7 @@ import ghidra.app.util.HelpTopics; import ghidra.framework.plugintool.*; import ghidra.framework.plugintool.util.PluginStatus; import ghidra.util.HelpLocation; -import resources.ResourceManager; +import resources.Icons; /** * The NextPrevCodeUnitPlugin generates a GoTo event based on where the cursor @@ -135,9 +136,9 @@ public class NextPrevCodeUnitPlugin extends Plugin { private class InvertStateAction extends ToggleDockingAction { private final Icon INVERTED_ICON_OFF = ImageUtils.makeTransparent( - ResourceManager.loadImage("images/dialog-cancel.png")); + Icons.NOT_ALLOWED_ICON); private final Icon INVERTED_ICON_ON = ImageUtils.makeTransparent( - ResourceManager.loadImage("images/dialog-cancel.png"), .8f); + Icons.NOT_ALLOWED_ICON, .8f); private boolean isInverted = false; public InvertStateAction(String subGroup) { @@ -146,10 +147,7 @@ public class NextPrevCodeUnitPlugin extends Plugin { setToolBarData(new ToolBarData(INVERTED_ICON_OFF, ToolConstants.TOOLBAR_GROUP_FOUR, subGroup)); - // TODO add help entry setHelpLocation(new HelpLocation(HelpTopics.NAVIGATION, getName())); - - // TODO setDescriptoin("..."); setSelected(false); addToWindowWhen(NavigatableActionContext.class); @@ -169,8 +167,8 @@ public class NextPrevCodeUnitPlugin extends Plugin { } private class ToggleDirectionAction extends NavigatableContextAction { - private final Icon FORWARD_ICON = ResourceManager.loadImage("images/down.png"); - private final Icon BACKWARD_ICON = ResourceManager.loadImage("images/up.png"); + private final Icon FORWARD_ICON = new GIcon("icon.down"); + private final Icon BACKWARD_ICON = new GIcon("icon.up"); private boolean isForward = true; ToggleDirectionAction(String subGroup) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousBookmarkAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousBookmarkAction.java index bda51956a5..d002ecc7dc 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousBookmarkAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousBookmarkAction.java @@ -18,7 +18,8 @@ package ghidra.app.plugin.core.navigation; import java.awt.event.*; import java.util.Iterator; -import javax.swing.*; +import javax.swing.Icon; +import javax.swing.KeyStroke; import docking.ActionContext; import docking.action.*; @@ -26,6 +27,7 @@ import docking.menu.ActionState; import docking.menu.MultiStateDockingAction; import docking.tool.ToolConstants; import docking.widgets.EventTrigger; +import generic.theme.GIcon; import generic.util.image.ImageUtils; import ghidra.app.context.ListingActionContext; import ghidra.app.context.NavigatableActionContext; @@ -45,26 +47,21 @@ public class NextPreviousBookmarkAction extends MultiStateDockingAction public static final String ALL_BOOKMARK_TYPES = "All Bookmark Types"; private static final Icon INVERTED_OVERLAY_ICON = - ImageUtils.makeTransparent(ResourceManager.loadImage("images/dialog-cancel.png"), .5f); + ImageUtils.makeTransparent(Icons.NOT_ALLOWED_ICON, .5f); private PluginTool tool; private boolean isForward = true; private boolean isInverted; - private static final Icon BOOKMARK_ICON = ResourceManager.getScaledIcon( - ResourceManager.loadImage("images/B.gif"), 16, 16); - private static final Icon BOOKMARK_ANALYSIS_ICON = - ResourceManager.loadImage("images/applications-system.png"); - private static final ImageIcon BOOKMARK_ERROR_ICON = - ResourceManager.loadImage("images/edit-delete.png"); - private static final Icon BOOKMARK_INFO_ICON = - ResourceManager.loadImage("images/information.png"); - private static final Icon BOOKMARK_NOTE_ICON = - ResourceManager.loadImage("images/notes.gif"); - private static final Icon BOOKMARK_WARNING_ICON = - ResourceManager.loadImage("images/warning.png"); - private static final Icon BOOKMARK_UNKNOWN_ICON = - ResourceManager.loadImage("images/unknown.gif"); + //@formatter:off + private static final Icon BOOKMARK_ICON = new GIcon("icon.plugin.navigation.bookmark"); + private static final Icon BOOKMARK_ANALYSIS_ICON = new GIcon("icon.plugin.navigation.bookmark.analysis"); + private static final Icon BOOKMARK_ERROR_ICON = new GIcon("icon.plugin.navigation.bookmark.error"); + private static final Icon BOOKMARK_INFO_ICON = new GIcon("icon.plugin.navigation.bookmark.info"); + private static final Icon BOOKMARK_NOTE_ICON = new GIcon("icon.plugin.navigation.bookmark.note"); + private static final Icon BOOKMARK_WARNING_ICON = new GIcon("icon.plugin.navigation.bookmark.warning"); + private static final Icon BOOKMARK_UNKNOWN_ICON = new GIcon("icon.plugin.navigation.bookmark.unknown"); + //@formatter:on public NextPreviousBookmarkAction(PluginTool tool, String owner, String subGroup) { super("Next Bookmark", owner); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousDefinedDataAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousDefinedDataAction.java index 9e3a4214c2..112fa274f4 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousDefinedDataAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousDefinedDataAction.java @@ -21,15 +21,17 @@ import java.awt.event.KeyEvent; import javax.swing.Icon; import javax.swing.KeyStroke; +import generic.theme.GIcon; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.address.Address; import ghidra.program.model.listing.*; import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; public class NextPreviousDefinedDataAction extends AbstractNextPreviousAction { + private static final Icon ICON = new GIcon("icon.plugin.navigation.data"); + public NextPreviousDefinedDataAction(PluginTool tool, String owner, String subGroup) { super(tool, "Next Data", owner, subGroup); } @@ -41,7 +43,7 @@ public class NextPreviousDefinedDataAction extends AbstractNextPreviousAction { @Override protected Icon getIcon() { - return ResourceManager.loadImage("images/D.gif"); + return ICON; } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousFunctionAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousFunctionAction.java index 05ab11ae15..208785c82a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousFunctionAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousFunctionAction.java @@ -21,6 +21,7 @@ import java.awt.event.KeyEvent; import javax.swing.Icon; import javax.swing.KeyStroke; +import generic.theme.GIcon; import ghidra.app.nav.Navigatable; import ghidra.app.services.GoToService; import ghidra.framework.plugintool.PluginTool; @@ -30,17 +31,18 @@ import ghidra.program.model.listing.*; import ghidra.program.util.FunctionSignatureFieldLocation; import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; public class NextPreviousFunctionAction extends AbstractNextPreviousAction { + private static final Icon ICON = new GIcon("icon.plugin.navigation.function"); + public NextPreviousFunctionAction(PluginTool tool, String owner, String subGroup) { super(tool, "Next Function", owner, subGroup); } @Override protected Icon getIcon() { - return ResourceManager.loadImage("images/F.gif"); + return ICON; } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousInstructionAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousInstructionAction.java index 62149fd9a1..cdae9cdaef 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousInstructionAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousInstructionAction.java @@ -21,22 +21,24 @@ import java.awt.event.KeyEvent; import javax.swing.Icon; import javax.swing.KeyStroke; +import generic.theme.GIcon; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.address.Address; import ghidra.program.model.listing.*; import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; public class NextPreviousInstructionAction extends AbstractNextPreviousAction { + private static final Icon ICON = new GIcon("icon.plugin.navigation.instruction"); + public NextPreviousInstructionAction(PluginTool tool, String owner, String subGroup) { super(tool, "Next Instruction", owner, subGroup); } @Override protected Icon getIcon() { - return ResourceManager.loadImage("images/I.gif"); + return ICON; } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousLabelAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousLabelAction.java index e73bc6233b..975287a9c7 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousLabelAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousLabelAction.java @@ -21,6 +21,7 @@ import java.awt.event.KeyEvent; import javax.swing.Icon; import javax.swing.KeyStroke; +import generic.theme.GIcon; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.address.Address; import ghidra.program.model.address.AddressIterator; @@ -28,17 +29,18 @@ import ghidra.program.model.listing.*; import ghidra.program.model.symbol.*; import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; public class NextPreviousLabelAction extends AbstractNextPreviousAction { + private static final Icon ICON = new GIcon("icon.plugin.navigation.label"); + public NextPreviousLabelAction(PluginTool tool, String owner, String subGroup) { super(tool, "Next Label", owner, subGroup); } @Override protected Icon getIcon() { - return ResourceManager.loadImage("images/L.gif"); + return ICON; } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousSameBytesAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousSameBytesAction.java index 366dd942bc..0aced61f54 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousSameBytesAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousSameBytesAction.java @@ -22,6 +22,7 @@ import java.util.Iterator; import javax.swing.Icon; import javax.swing.KeyStroke; +import generic.theme.GIcon; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.address.Address; import ghidra.program.model.address.AddressSetView; @@ -33,7 +34,6 @@ import ghidra.util.Msg; import ghidra.util.exception.AssertException; import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; /** * Navigates to the same byte pattern value under the current code unit. When negated, the search @@ -42,7 +42,7 @@ import resources.ResourceManager; */ public class NextPreviousSameBytesAction extends AbstractNextPreviousAction { - private static final Icon ICON = ResourceManager.loadImage("images/V.png"); + private static final Icon ICON = new GIcon("icon.plugin.navigation.bytes"); NextPreviousSameBytesAction(PluginTool tool, String owner, String subGroup) { super(tool, "Next Matching Byte Values", owner, subGroup); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousUndefinedAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousUndefinedAction.java index c2c0f5793b..67733e7cfe 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousUndefinedAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextPreviousUndefinedAction.java @@ -21,22 +21,24 @@ import java.awt.event.KeyEvent; import javax.swing.Icon; import javax.swing.KeyStroke; +import generic.theme.GIcon; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.address.Address; import ghidra.program.model.listing.*; import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; public class NextPreviousUndefinedAction extends AbstractNextPreviousAction { + private static final Icon ICON = new GIcon("icon.plugin.navigation.undefined"); + public NextPreviousUndefinedAction(PluginTool tool, String owner, String subGroup) { super(tool, "Next Undefined", owner, subGroup); } @Override protected Icon getIcon() { - return ResourceManager.loadImage("images/U.gif"); + return ICON; } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextSelectedRangeAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextSelectedRangeAction.java index 2bc0c9e7fb..ac32d83bed 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextSelectedRangeAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/NextSelectedRangeAction.java @@ -18,9 +18,12 @@ package ghidra.app.plugin.core.navigation; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; +import javax.swing.Icon; + import docking.DockingUtils; import docking.action.*; import docking.tool.ToolConstants; +import generic.theme.GIcon; import ghidra.app.context.ProgramLocationActionContext; import ghidra.app.nav.NextRangeAction; import ghidra.app.plugin.PluginCategoryNames; @@ -28,21 +31,22 @@ import ghidra.app.util.HelpTopics; import ghidra.framework.plugintool.PluginTool; import ghidra.program.util.ProgramSelection; import ghidra.util.HelpLocation; -import resources.ResourceManager; public class NextSelectedRangeAction extends NextRangeAction { + private static final Icon ICON = new GIcon("icon.plugin.navigation.selection.range.next"); + public NextSelectedRangeAction(PluginTool tool, String ownerName, NavigationOptions navOptions) { super(tool, "Next Selected Range", ownerName, navOptions); setMenuBarData(new MenuData(new String[] { ToolConstants.MENU_NAVIGATION, - "Next Selected Range" }, ResourceManager.loadImage("images/NextSelectionBlock16.gif"), + "Next Selected Range" }, ICON, PluginCategoryNames.NAVIGATION, MenuData.NO_MNEMONIC, NextPrevSelectedRangePlugin.ACTION_SUB_GROUP)); setToolBarData(new ToolBarData( - ResourceManager.loadImage("images/NextSelectionBlock16.gif"), + ICON, ToolConstants.TOOLBAR_GROUP_THREE, NextPrevSelectedRangePlugin.ACTION_SUB_GROUP)); setKeyBindingData( new KeyBindingData(KeyEvent.VK_OPEN_BRACKET, DockingUtils.CONTROL_KEY_MODIFIER_MASK | diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/PreviousHighlightedRangeAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/PreviousHighlightedRangeAction.java index f83cadee78..2ead540e82 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/PreviousHighlightedRangeAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/PreviousHighlightedRangeAction.java @@ -17,9 +17,12 @@ package ghidra.app.plugin.core.navigation; import java.awt.event.KeyEvent; +import javax.swing.Icon; + import docking.DockingUtils; import docking.action.*; import docking.tool.ToolConstants; +import generic.theme.GIcon; import ghidra.app.context.ProgramLocationActionContext; import ghidra.app.nav.PreviousRangeAction; import ghidra.app.plugin.PluginCategoryNames; @@ -27,21 +30,22 @@ import ghidra.app.util.HelpTopics; import ghidra.framework.plugintool.PluginTool; import ghidra.program.util.ProgramSelection; import ghidra.util.HelpLocation; -import resources.ResourceManager; public class PreviousHighlightedRangeAction extends PreviousRangeAction { + private static final Icon ICON = new GIcon("icon.plugin.navigation.highlight.range.previous"); + public PreviousHighlightedRangeAction(PluginTool tool, String owner, NavigationOptions navOptions) { super(tool, "Previous Highlighted Range", owner, navOptions); setMenuBarData(new MenuData(new String[] { ToolConstants.MENU_NAVIGATION, "Previous Highlight Range" }, - ResourceManager.loadImage("images/PreviousHighlightBlock16.gif"), + ICON, PluginCategoryNames.NAVIGATION, MenuData.NO_MNEMONIC, NextPrevHighlightRangePlugin.ACTION_SUB_GROUP)); setToolBarData(new ToolBarData( - ResourceManager.loadImage("images/PreviousHighlightBlock16.gif"), + ICON, ToolConstants.TOOLBAR_GROUP_THREE, NextPrevHighlightRangePlugin.ACTION_SUB_GROUP)); setKeyBindingData( new KeyBindingData(KeyEvent.VK_9, DockingUtils.CONTROL_KEY_MODIFIER_MASK)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/PreviousSelectedRangeAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/PreviousSelectedRangeAction.java index 7ef4a1ad07..9aa8c0c341 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/PreviousSelectedRangeAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/PreviousSelectedRangeAction.java @@ -18,11 +18,12 @@ package ghidra.app.plugin.core.navigation; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; -import javax.swing.ImageIcon; +import javax.swing.Icon; import docking.DockingUtils; import docking.action.*; import docking.tool.ToolConstants; +import generic.theme.GIcon; import ghidra.app.context.ProgramLocationActionContext; import ghidra.app.nav.PreviousRangeAction; import ghidra.app.plugin.PluginCategoryNames; @@ -30,20 +31,20 @@ import ghidra.app.util.HelpTopics; import ghidra.framework.plugintool.PluginTool; import ghidra.program.util.ProgramSelection; import ghidra.util.HelpLocation; -import resources.ResourceManager; public class PreviousSelectedRangeAction extends PreviousRangeAction { + private Icon ICON = new GIcon("icon.plugin.navigation.selection.range.previous"); + public PreviousSelectedRangeAction(PluginTool tool, String ownerName, NavigationOptions navOptions) { super(tool, "Previous Selected Range", ownerName, navOptions); - ImageIcon icon = ResourceManager.loadImage("images/PreviousSelectionBlock16.gif"); setMenuBarData(new MenuData(new String[] { ToolConstants.MENU_NAVIGATION, - "Previous Selected Range" }, icon, PluginCategoryNames.NAVIGATION, + "Previous Selected Range" }, ICON, PluginCategoryNames.NAVIGATION, MenuData.NO_MNEMONIC, NextPrevSelectedRangePlugin.ACTION_SUB_GROUP)); - setToolBarData(new ToolBarData(icon, ToolConstants.TOOLBAR_GROUP_THREE, + setToolBarData(new ToolBarData(ICON, ToolConstants.TOOLBAR_GROUP_THREE, NextPrevSelectedRangePlugin.ACTION_SUB_GROUP)); setKeyBindingData( new KeyBindingData(KeyEvent.VK_CLOSE_BRACKET, DockingUtils.CONTROL_KEY_MODIFIER_MASK | diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/locationreferences/LocationReferencesProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/locationreferences/LocationReferencesProvider.java index 6422fbdebf..911b1c1893 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/locationreferences/LocationReferencesProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/navigation/locationreferences/LocationReferencesProvider.java @@ -25,6 +25,7 @@ import javax.swing.event.ChangeListener; import docking.ActionContext; import docking.action.*; import docking.widgets.table.GTable; +import generic.theme.GIcon; import ghidra.app.nav.Navigatable; import ghidra.app.nav.NavigatableRemovalListener; import ghidra.app.services.GoToService; @@ -51,8 +52,8 @@ import resources.ResourceManager; public class LocationReferencesProvider extends ComponentProviderAdapter implements DomainObjectListener, NavigatableRemovalListener { - private static Icon HIGHLIGHT_ICON = ResourceManager.loadImage("images/tag_yellow.png"); - private static Icon HOME_ICON = ResourceManager.loadImage("images/go-home.png"); + private static Icon HIGHLIGHT_ICON = new GIcon("icon.plugin.locationreferences.highlight"); + private static Icon HOME_ICON = Icons.HOME_ICON; private static Icon REFRESH_ICON = Icons.REFRESH_ICON; private static Icon REFRESH_NOT_NEEDED_ICON = ResourceManager.getDisabledIcon(Icons.REFRESH_ICON, 60); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/osgi/BundleStatusComponentProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/osgi/BundleStatusComponentProvider.java index e2f19c4d36..c97b5bafbb 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/osgi/BundleStatusComponentProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/osgi/BundleStatusComponentProvider.java @@ -32,6 +32,7 @@ import docking.widgets.table.GTable; import docking.widgets.table.GTableFilterPanel; import generic.jar.ResourceFile; import generic.theme.GColor; +import generic.theme.GIcon; import generic.util.Path; import ghidra.app.services.ConsoleService; import ghidra.framework.plugintool.ComponentProviderAdapter; @@ -43,7 +44,6 @@ import ghidra.util.filechooser.GhidraFileChooserModel; import ghidra.util.filechooser.GhidraFileFilter; import ghidra.util.task.*; import resources.Icons; -import resources.ResourceManager; /** * Component for managing OSGi bundle status @@ -156,15 +156,15 @@ public class BundleStatusComponentProvider extends ComponentProviderAdapter { .buildAndInstallLocal(this); addBundlesAction("EnableBundles", "Enable selected bundle(s)", - ResourceManager.loadImage("images/media-playback-start.png"), this::doEnableBundles); + new GIcon("icon.plugin.bundlemanager.enable"), this::doEnableBundles); addBundlesAction("DisableBundles", "Disable selected bundle(s)", - ResourceManager.loadImage("images/media-playback-stop.png"), this::doDisableBundles); + new GIcon("icon.plugin.bundlemanager.disable"), this::doDisableBundles); addBundlesAction("CleanBundles", "Clean selected bundle build cache(s)", - ResourceManager.loadImage("images/erase16.png"), this::doCleanBundleBuildCaches); + Icons.CLEAR_ICON, this::doCleanBundleBuildCaches); - icon = ResourceManager.loadImage("images/Plus.png"); + icon = Icons.ADD_ICON; new ActionBuilder("AddBundles", this.getName()).popupMenuPath("Add bundle(s)") .popupMenuIcon(icon) .popupMenuGroup(BUNDLE_LIST_GROUP) @@ -174,7 +174,7 @@ public class BundleStatusComponentProvider extends ComponentProviderAdapter { .onAction(c -> showAddBundlesFileChooser()) .buildAndInstallLocal(this); - icon = ResourceManager.loadImage("images/edit-delete.png"); + icon = Icons.DELETE_ICON; new ActionBuilder("RemoveBundles", this.getName()) .popupMenuPath("Remove selected bundle(s)") .popupMenuIcon(icon) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/OverviewColorPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/OverviewColorPlugin.java index c4b89cfbe5..b334936956 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/OverviewColorPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/overview/OverviewColorPlugin.java @@ -23,6 +23,7 @@ import javax.swing.SwingUtilities; import docking.ActionContext; import docking.action.*; import docking.menu.MultiActionDockingAction; +import generic.theme.GIcon; import ghidra.app.CorePluginPackage; import ghidra.app.plugin.PluginCategoryNames; import ghidra.app.plugin.ProgramPlugin; @@ -35,7 +36,6 @@ import ghidra.program.model.listing.Program; import ghidra.util.HelpLocation; import ghidra.util.Msg; import ghidra.util.classfinder.ClassSearcher; -import resources.ResourceManager; /** * Plugin to manage {@link OverviewColorService}s. It creates actions for each service and installs @@ -132,7 +132,7 @@ public class OverviewColorPlugin extends ProgramPlugin { multiAction = new MultiActionDockingAction("Overview", getName()); multiAction.setActions(new ArrayList(actionMap.values())); multiAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/x-office-document-template.png"))); + new ToolBarData(new GIcon("icon.plugin.overview.provider"))); codeViewerService.addLocalAction(multiAction); multiAction.setDescription("Toggles overview margin displays."); multiAction.setHelpLocation( diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/AbstractUndoRedoAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/AbstractUndoRedoAction.java index a16ca582db..54367cf564 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/AbstractUndoRedoAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/AbstractUndoRedoAction.java @@ -22,6 +22,7 @@ import javax.swing.Icon; import docking.ActionContext; import docking.action.*; import docking.tool.ToolConstants; +import generic.theme.GIcon; import ghidra.app.context.ProgramActionContext; import ghidra.app.services.GoToService; import ghidra.app.services.NavigationHistoryService; @@ -31,7 +32,6 @@ import ghidra.framework.model.TransactionListener; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.listing.Program; import ghidra.util.*; -import resources.ResourceManager; /** * Abstract base class for the undo and redo actions. These actions add a listener to the @@ -44,14 +44,14 @@ public abstract class AbstractUndoRedoAction extends DockingAction { private TransactionListener transactionListener; public AbstractUndoRedoAction(PluginTool tool, ProgramManagerPlugin plugin, String name, - String iconPath, String keyBinding, String subGroup) { + String iconId, String keyBinding, String subGroup) { super(name, plugin.getName()); this.tool = tool; this.plugin = plugin; String[] menuPath = { ToolConstants.MENU_EDIT, "&" + name }; - Icon icon = ResourceManager.loadImage(iconPath); + Icon icon = new GIcon(iconId); String group = "Undo"; MenuData menuData = new MenuData(menuPath, icon, group); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/MultiTabPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/MultiTabPanel.java index 8bbb409123..9296770605 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/MultiTabPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/MultiTabPanel.java @@ -28,26 +28,28 @@ import docking.actions.KeyBindingUtils; import docking.widgets.label.GDLabel; import docking.widgets.label.GIconLabel; import generic.theme.GColor; +import generic.theme.GIcon; import generic.util.WindowUtilities; import ghidra.framework.model.ProjectLocator; import ghidra.program.model.listing.Program; import ghidra.util.layout.HorizontalLayout; -import resources.ResourceManager; +import resources.Icons; /** * Panel to show a "tab" for an object. ChangeListeners are notified when a tab is selected. */ public class MultiTabPanel extends JPanel { + //@formatter:off private final static Color SELECTED_TAB_COLOR = new GColor("color.bg.listing.tabs.selected"); - private final static Color HIGHLIGHTED_TAB_BG_COLOR = - new GColor("color.bg.listing.tabs.highlighted"); - private final static Icon EMPTY16_ICON = ResourceManager.loadImage("images/EmptyIcon16.gif"); - private final static Icon EMPTY8_ICON = ResourceManager.loadImage("images/empty8x16.png"); - private final static Icon CLOSE_ICON = ResourceManager.loadImage("images/x.gif"); - private final static Icon HIGHLIGHT_CLOSE_ICON = ResourceManager.loadImage("images/pinkX.gif"); - private final static Icon LIST_ICON = ResourceManager.loadImage("images/VCRFastForward.gif"); - private final static Icon TRANSIENT_ICON = ResourceManager.loadImage("images/link.png", 8, 16); + private final static Color HIGHLIGHTED_TAB_BG_COLOR = new GColor("color.bg.listing.tabs.highlighted"); + private final static Icon EMPTY16_ICON = Icons.EMPTY_ICON; + private final static Icon EMPTY8_ICON = new GIcon("icon.plugin.programmanager.empty.small"); + private final static Icon CLOSE_ICON = new GIcon("icon.plugin.programmanager.close"); + private final static Icon HIGHLIGHT_CLOSE_ICON = new GIcon("icon.plugin.programmanager.close.highlight"); + private final static Icon LIST_ICON = new GIcon("icon.plugin.programmanager.list"); + private final static Icon TRANSIENT_ICON = new GIcon("icon.plugin.programmanager.transient"); + //@formatter:on private final static Color TEXT_SELECTION_COLOR = new GColor("color.fg.listing.tabs.text.selected"); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/RedoAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/RedoAction.java index e7ffcd1c18..1728e08b7d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/RedoAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/RedoAction.java @@ -27,7 +27,7 @@ public class RedoAction extends AbstractUndoRedoAction { public static final String SUBGROUP = "2Redo"; public RedoAction(ProgramManagerPlugin plugin, PluginTool tool) { - super(tool, plugin, "Redo", "images/redo.png", "ctrl shift Z", SUBGROUP); + super(tool, plugin, "Redo", "icon.redo", "ctrl shift Z", SUBGROUP); } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/SaveProgramAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/SaveProgramAction.java index f44a331334..607b2b882a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/SaveProgramAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/SaveProgramAction.java @@ -15,12 +15,12 @@ */ package ghidra.app.plugin.core.progmgr; -import javax.swing.ImageIcon; +import javax.swing.Icon; import docking.action.*; import docking.tool.ToolConstants; import ghidra.program.model.listing.Program; -import resources.ResourceManager; +import resources.Icons; /** * Action class for the "Save Program" action @@ -33,7 +33,7 @@ public class SaveProgramAction extends AbstractProgramNameSwitchingAction { menuData.setMenuGroup(group); menuData.setMenuSubGroup(Integer.toString(subGroup)); setMenuBarData(menuData); - ImageIcon icon = ResourceManager.loadImage("images/disk.png"); + Icon icon = Icons.SAVE_ICON; setToolBarData(new ToolBarData(icon, ToolConstants.TOOLBAR_GROUP_ONE)); setKeyBindingData(new KeyBindingData("ctrl S")); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/TransactionMonitor.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/TransactionMonitor.java index eda5259631..91fcd6eb40 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/TransactionMonitor.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/TransactionMonitor.java @@ -22,17 +22,17 @@ import java.util.List; import javax.swing.*; +import generic.theme.GIcon; import ghidra.framework.data.DomainObjectAdapterDB; import ghidra.framework.model.Transaction; import ghidra.framework.model.TransactionListener; import ghidra.program.database.ProgramDB; import ghidra.program.model.listing.Program; import ghidra.util.HTMLUtilities; -import resources.ResourceManager; class TransactionMonitor extends JComponent implements TransactionListener { - private static ImageIcon busyIcon; + private static Icon busyIcon; private static Dimension prefSize; ProgramDB program; @@ -40,7 +40,7 @@ class TransactionMonitor extends JComponent implements TransactionListener { TransactionMonitor() { super(); - busyIcon = ResourceManager.loadImage("images/editbytes.gif"); + busyIcon = new GIcon("icon.plugin.programmanager.busy"); prefSize = new Dimension(busyIcon.getIconWidth(), busyIcon.getIconHeight()); ToolTipManager.sharedInstance().registerComponent(this); } @@ -60,27 +60,18 @@ class TransactionMonitor extends JComponent implements TransactionListener { repaint(); } - /** - * @see ghidra.framework.model.TransactionListener#transactionStarted(ghidra.framework.data.DomainObjectAdapterDB, ghidra.framework.model.Transaction) - */ @Override public void transactionStarted(DomainObjectAdapterDB domainObj, Transaction tx) { lastTx = tx; repaint(); } - /** - * @see ghidra.framework.model.TransactionListener#transactionEnded(ghidra.framework.data.DomainObjectAdapterDB) - */ @Override public void transactionEnded(DomainObjectAdapterDB domainObj) { lastTx = null; repaint(); } - /** - * @see ghidra.framework.model.TransactionListener#undoStackChanged(ghidra.framework.data.DomainObjectAdapterDB) - */ @Override public void undoStackChanged(DomainObjectAdapterDB domainObj) { // don't care @@ -91,17 +82,11 @@ class TransactionMonitor extends JComponent implements TransactionListener { // don't care } - /** - * @see java.awt.Component#getPreferredSize() - */ @Override public Dimension getPreferredSize() { return new Dimension(prefSize); } - /** - * @see javax.swing.JComponent#paintComponent(java.awt.Graphics) - */ @Override protected void paintComponent(Graphics g) { g.setColor(getBackground()); @@ -111,9 +96,6 @@ class TransactionMonitor extends JComponent implements TransactionListener { } } - /** - * @see javax.swing.JComponent#getToolTipText() - */ @Override public String getToolTipText() { if (lastTx != null) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/UndoAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/UndoAction.java index 899f85be41..b01591fd5f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/UndoAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/progmgr/UndoAction.java @@ -27,7 +27,7 @@ public class UndoAction extends AbstractUndoRedoAction { public static final String SUBGROUP = "1Undo"; public UndoAction(ProgramManagerPlugin plugin, PluginTool tool) { - super(tool, plugin, "Undo", "images/undo.png", "ctrl Z", SUBGROUP); + super(tool, plugin, "Undo", "icon.undo", "ctrl Z", SUBGROUP); } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/DnDTreeCellRenderer.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/DnDTreeCellRenderer.java index 5ff569bef8..6b9010fd1c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/DnDTreeCellRenderer.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/DnDTreeCellRenderer.java @@ -19,11 +19,13 @@ import java.awt.*; import java.awt.image.BufferedImage; import java.util.*; -import javax.swing.*; +import javax.swing.Icon; +import javax.swing.JTree; import javax.swing.tree.DefaultTreeCellRenderer; import docking.widgets.GComponent; import generic.theme.GColor; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors; import ghidra.program.model.listing.Group; import resources.ResourceManager; @@ -33,10 +35,7 @@ import resources.ResourceManager; */ class DnDTreeCellRenderer extends DefaultTreeCellRenderer { - private static final String DOCS = "images/openBookBlue.png"; private static final String DISABLED_DOCS = "DisabledDocument.gif"; - static final String FRAGMENT = "images/codeNotInView.gif"; - private static final String EMPTY_FRAGMENT = "images/emptyFragment.gif"; private static final String DISABLED_FRAGMENT = "DisabledFragment"; private static final String DISABLED_VIEWED_FRAGMENT = "DisabledViewedFragment"; private static final String DISABLED_EMPTY_FRAGMENT = "DisabledEmptyFragment"; @@ -48,13 +47,18 @@ class DnDTreeCellRenderer extends DefaultTreeCellRenderer { private static final String DISABLED_CLOSED_FOLDER = "DisabledClosedFolder"; private static final String DISABLED_OPEN_FOLDER = "DisabledOpenedFolder"; - static final String VIEWED_FRAGMENT = "images/codeInView.gif"; - static final String VIEWED_EMPTY_FRAGMENT = "images/emptyFragmentInView.gif"; - static final String VIEWED_CLOSED_FOLDER = "images/closedFolderInView.png"; - static final String VIEWED_OPEN_FOLDER = "images/openFolderInView.png"; - static final String VIEWED_CLOSED_FOLDER_WITH_DESC = "images/closedDescendantsInView.png"; - static final String CLOSED_FOLDER = "images/closedFolder.png"; // closed folder not in view - static final String OPEN_FOLDER = "images/openFolder.png"; + private static final String DOCS = "icon.plugin.programtree.docs"; + static final String FRAGMENT = "icon.plugin.programtree.fragment"; + private static final String EMPTY_FRAGMENT = "icon.plugin.programtree.fragment.empty"; + + static final String VIEWED_FRAGMENT = "icon.plugin.programtree.fragment.viewed"; + static final String VIEWED_EMPTY_FRAGMENT = "icon.plugin.programtree.fragment.viewed.empty"; + static final String VIEWED_CLOSED_FOLDER = "icon.plugin.programtree.fragment.closed.folder"; + static final String VIEWED_OPEN_FOLDER = "icon.plugin.programtree.fragment.open.folder"; + static final String VIEWED_CLOSED_FOLDER_WITH_DESC = + "icon.plugin.programtree.fragment.viewed.closed.folder.with.description"; + static final String CLOSED_FOLDER = "icon.plugin.programtree.closed.folder"; + static final String OPEN_FOLDER = "icon.plugin.programtree.open.folder"; private Map iconMap; @@ -144,7 +148,7 @@ class DnDTreeCellRenderer extends DefaultTreeCellRenderer { /** * Set colors for background according to the draw feedback state. - * @param selected + * @param selected true if selected * @param row row of the node * @param node node to render * @param dtree tree @@ -309,24 +313,21 @@ class DnDTreeCellRenderer extends DefaultTreeCellRenderer { private void loadImages() { // try to load icon images iconMap = new HashMap<>(); - String[] filenames = + String[] iconIds = { DOCS, FRAGMENT, EMPTY_FRAGMENT, VIEWED_FRAGMENT, VIEWED_EMPTY_FRAGMENT, - VIEWED_CLOSED_FOLDER, VIEWED_OPEN_FOLDER, VIEWED_CLOSED_FOLDER_WITH_DESC, // descendants in view - CLOSED_FOLDER, // closed folder not in view - OPEN_FOLDER, // opened folder not in the view + VIEWED_CLOSED_FOLDER, VIEWED_OPEN_FOLDER, VIEWED_CLOSED_FOLDER_WITH_DESC, + CLOSED_FOLDER, OPEN_FOLDER, }; - String[] disabledFilenames = { DISABLED_DOCS, DISABLED_FRAGMENT, DISABLED_EMPTY_FRAGMENT, + String[] disabledNames = { DISABLED_DOCS, DISABLED_FRAGMENT, DISABLED_EMPTY_FRAGMENT, DISABLED_VIEWED_EMPTY_FRAGMENT, DISABLED_VIEWED_FRAGMENT, DISABLED_VIEWED_CLOSED_FOLDER, DISABLED_VIEWED_OPEN_FOLDER, DISABLED_VIEWED_CLOSED_FOLDER_WITH_DESC, DISABLED_CLOSED_FOLDER, DISABLED_OPEN_FOLDER, }; - for (int i = 0; i < filenames.length; i++) { - ImageIcon icon = ResourceManager.loadImage(filenames[i]); - if (icon != null) { - iconMap.put(filenames[i], icon); - Icon disabledIcon = getDisabledIcon(filenames[i], icon); - iconMap.put(disabledFilenames[i], disabledIcon); - } + for (int i = 0; i < iconIds.length; i++) { + GIcon icon = new GIcon(iconIds[i]); + iconMap.put(iconIds[i], icon); + Icon disabledIcon = getDisabledIcon(iconIds[i], icon); + iconMap.put(disabledNames[i], disabledIcon); } } @@ -339,8 +340,8 @@ class DnDTreeCellRenderer extends DefaultTreeCellRenderer { return dim; } - static Icon getDisabledIcon(String imageName, ImageIcon icon) { - Image cutImage = icon.getImage(); + static Icon getDisabledIcon(String imageName, GIcon icon) { + Image cutImage = icon.getImageIcon().getImage(); BufferedImage bufferedImage = new BufferedImage(cutImage.getWidth(null), cutImage.getHeight(null), BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = bufferedImage.createGraphics(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin.java index 6f38511c1e..c67cc22f55 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin.java @@ -23,6 +23,7 @@ import javax.swing.tree.TreePath; import docking.ActionContext; import docking.action.*; +import generic.theme.GIcon; import ghidra.app.CorePluginPackage; import ghidra.app.cmd.module.*; import ghidra.app.events.ProgramActivatedPluginEvent; @@ -46,7 +47,6 @@ import ghidra.util.datastruct.StringKeyIndexer; import ghidra.util.exception.AssertException; import ghidra.util.task.RunManager; import resources.Icons; -import resources.ResourceManager; /** * Plugin that creates view provider services to show the trees in a program. @@ -81,8 +81,6 @@ public class ProgramTreePlugin extends ProgramPlugin private static final String TREE_NAME = "TreeName"; private static final String TOGGLE_STATE = "NavigationToggleState"; - private final static String OPEN_VIEW_ICON_NAME = "images/openSmallFolder.png"; - private final static String CREATE_ICON_NAME = "images/layout_add.png"; private final static Icon NAVIGATION_ICON = Icons.NAVIGATE_ON_INCOMING_EVENT_ICON; private HashMap providerMap;// map of view providers, key is the name @@ -480,7 +478,8 @@ public class ProgramTreePlugin extends ProgramPlugin /** * Close the view if we are not trying to close the last view. * - * @param treeViewProvider + * + * @param treeViewProvider the provider * @return true if the view can be closed */ boolean closeView(TreeViewProvider treeViewProvider) { @@ -516,10 +515,17 @@ public class ProgramTreePlugin extends ProgramPlugin /** * Method renameView. + <<<<<<< Upstream, based on origin/master * * @param treeViewProvider * @param newName * @return boolean + ======= + * + * @param treeViewProvider the provider + * @param newName the new name + * @return true if renamed + >>>>>>> 0eb4b9d GP-1981 - Theming - Base Module */ boolean renameView(TreeViewProvider treeViewProvider, String newName) { Listing listing = currentProgram.getListing(); @@ -932,7 +938,7 @@ public class ProgramTreePlugin extends ProgramPlugin } }; - Icon icon = ResourceManager.loadImage(OPEN_VIEW_ICON_NAME); + Icon icon = new GIcon("icon.plugin.programtree.open.tree"); openAction.setToolBarData(new ToolBarData(icon)); openAction.setEnabled(false); openAction.setDescription("Open Tree View"); @@ -945,7 +951,7 @@ public class ProgramTreePlugin extends ProgramPlugin } }; - icon = ResourceManager.loadImage(CREATE_ICON_NAME); + icon = new GIcon("icon.plugin.programtree.new.tree"); createAction.setToolBarData(new ToolBarData(icon)); createAction.setEnabled(false); createAction.setDescription(HTMLUtilities.toHTML("Create a new default tree view; shows\n" + diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/TreeDragSrcAdapter.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/TreeDragSrcAdapter.java index bb0244c6ab..774b549507 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/TreeDragSrcAdapter.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/programtree/TreeDragSrcAdapter.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,50 +15,41 @@ */ package ghidra.app.plugin.core.programtree; - import java.awt.*; import java.awt.dnd.DnDConstants; import java.awt.dnd.DragSource; -import javax.swing.ImageIcon; - import docking.dnd.DragSrcAdapter; import docking.dnd.Draggable; - -import resources.ResourceManager; - +import generic.theme.GIcon; /** - * Drag source adapter on tree to set the custom cursors for the drag under - * feedback. + * Drag source adapter on tree to set the custom cursors for the drag under feedback. */ class TreeDragSrcAdapter extends DragSrcAdapter { - - private static String MOVE_CURSOR_FILENAME = "images/dragMoveCursor.gif"; - private static String COPY_CURSOR_FILENAME = "images/dragCopyCursor.gif"; - - private static String MOVE_NAME = "MoveCursor"; - private static String COPY_NAME = "CopyCursor"; - + + private static final String MOVE_CURSOR_ID = "icon.plugin.programtree.drag.move"; + private static final String COPY_CURSOR_ID = "icon.plugin.programtree.drag.copy"; + + private static final String MOVE_NAME = "MoveCursor"; + private static final String COPY_NAME = "CopyCursor"; + private Cursor feedbackCursor; private Cursor copyCursor; - private Cursor moveCursor; - + private Cursor moveCursor; + public TreeDragSrcAdapter(Draggable dragComponent) { super(dragComponent); } - - /** - * @see docking.dnd.DragSrcAdapter#getDropOkCursor(int) - */ + @Override - protected Cursor getDropOkCursor(int action) { + protected Cursor getDropOkCursor(int action) { if (feedbackCursor != null) { return feedbackCursor; } return super.getDropOkCursor(action); } - + /** * Get the appropriate cursor for the action and mouse position within the node. * @param action move, copy, link @@ -79,14 +69,14 @@ class TreeDragSrcAdapter extends DragSrcAdapter { } } else { - c = DragSource.DefaultCopyDrop; - if (relativeMousePos != 0) { - c = getCopyCursor(); - } + c = DragSource.DefaultCopyDrop; + if (relativeMousePos != 0) { + c = getCopyCursor(); + } } - return c; + return c; } - + /** * Set the cursor for drag under feedback. * @param c cursor for feedback; may be null if there is no feedback. @@ -94,34 +84,26 @@ class TreeDragSrcAdapter extends DragSrcAdapter { void setFeedbackCursor(Cursor c) { feedbackCursor = c; } - - private Cursor getMoveCursor() { - if ( moveCursor == null ) { - moveCursor = createCursor(MOVE_CURSOR_FILENAME, MOVE_NAME, new Point(0, 16)); - } - return moveCursor; - } - private Cursor getCopyCursor() { - if ( copyCursor == null ) { - copyCursor = createCursor(COPY_CURSOR_FILENAME, COPY_NAME, new Point(0, 24)); - } - return copyCursor; - } - - /** - * Create a cursor with the filename and cursor name. - * @param filename a name from the images resource - * @param cursorName name to use int the createCustomCursor() - * method on Toolkit - */ - private static Cursor createCursor(String filename, String cursorName, - Point hotSpot) { - ImageIcon icon = ResourceManager.loadImage(filename); - Image image = icon.getImage(); + private Cursor getMoveCursor() { + if (moveCursor == null) { + moveCursor = createCursor(MOVE_CURSOR_ID, MOVE_NAME, new Point(0, 16)); + } + return moveCursor; + } + + private Cursor getCopyCursor() { + if (copyCursor == null) { + copyCursor = createCursor(COPY_CURSOR_ID, COPY_NAME, new Point(0, 24)); + } + return copyCursor; + } + + private static Cursor createCursor(String id, String cursorName, Point hotSpot) { + GIcon icon = new GIcon(id); + Image image = icon.getImageIcon().getImage(); Toolkit tk = Toolkit.getDefaultToolkit(); - Cursor cursor = tk.createCustomCursor(image, hotSpot, cursorName); - return cursor; + return tk.createCustomCursor(image, hotSpot, cursorName); } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/reachability/FunctionReachabilityPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/reachability/FunctionReachabilityPlugin.java index f3bf1fa77f..7c4f0b7771 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/reachability/FunctionReachabilityPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/reachability/FunctionReachabilityPlugin.java @@ -23,6 +23,7 @@ import javax.swing.Icon; import docking.ActionContext; import docking.action.*; import docking.tool.ToolConstants; +import generic.theme.GIcon; import ghidra.app.CorePluginPackage; import ghidra.app.context.ListingActionContext; import ghidra.app.plugin.PluginCategoryNames; @@ -32,8 +33,6 @@ import ghidra.framework.plugintool.PluginTool; import ghidra.framework.plugintool.util.PluginStatus; import ghidra.program.util.*; import ghidra.util.HelpLocation; -import resources.ResourceManager; -import resources.icons.RotateIcon; //@formatter:off @PluginInfo( @@ -49,8 +48,7 @@ import resources.icons.RotateIcon; public class FunctionReachabilityPlugin extends ProgramPlugin { // TODO - static final Icon ICON = new RotateIcon( - ResourceManager.loadImage("images/function_graph_curvey.png"), 90); + static final Icon ICON = new GIcon("icon.plugin.reachability.provider"); private DockingAction showProviderAction; private List providers = diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditMemoryReferencePanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditMemoryReferencePanel.java index 42c75ab0e4..c0f36ce47c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditMemoryReferencePanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditMemoryReferencePanel.java @@ -32,6 +32,7 @@ import docking.widgets.checkbox.GCheckBox; import docking.widgets.combobox.GhidraComboBox; import docking.widgets.label.GDLabel; import docking.widgets.label.GLabel; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors; import generic.theme.GThemeDefaults.Colors.Java; import ghidra.app.util.AddressInput; @@ -41,12 +42,12 @@ import ghidra.program.model.scalar.Scalar; import ghidra.program.model.symbol.*; import ghidra.program.util.OperandFieldLocation; import ghidra.program.util.ProgramLocation; +import ghidra.util.Swing; import ghidra.util.layout.PairLayout; -import resources.ResourceManager; class EditMemoryReferencePanel extends EditReferencePanel { - private static ImageIcon PULLDOWN_ICON = ResourceManager.loadImage("images/menu16.gif"); + private static final Icon PULLDOWN_ICON = new GIcon("icon.pulldown"); private static final RefType[] MEM_REF_TYPES = RefTypeFactory.getMemoryRefTypes(); @@ -83,7 +84,7 @@ class EditMemoryReferencePanel extends EditReferencePanel { @Override public void requestFocus() { - SwingUtilities.invokeLater(() -> toAddressField.requestFocus()); + Swing.runLater(() -> toAddressField.requestFocus()); } private void buildPanel() { @@ -619,19 +620,9 @@ class EditMemoryReferencePanel extends EditReferencePanel { @Override public void componentShown(ComponentEvent e) { + // stub } }); - - //displayList.requestFocus(); - -// historyWin.addFocusListener(new FocusListener() { -// public void focusGained(FocusEvent e) { -// } -// public void focusLost(FocusEvent e) { -// toggleAddressHistoryPopup(); -// } -// }); - } private void updateTableSelectionForEvent(MouseEvent anEvent) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditReferencesProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditReferencesProvider.java index 866c6ea606..d633b1980a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditReferencesProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/EditReferencesProvider.java @@ -36,6 +36,7 @@ import docking.dnd.Droppable; import docking.widgets.checkbox.GCheckBox; import docking.widgets.table.*; import generic.theme.GColor; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors.Tables; import ghidra.app.events.ProgramSelectionPluginEvent; import ghidra.app.util.SelectionTransferData; @@ -54,25 +55,24 @@ import ghidra.util.HelpLocation; import ghidra.util.table.GhidraTable; import ghidra.util.task.SwingUpdateManager; import resources.Icons; -import resources.ResourceManager; public class EditReferencesProvider extends ComponentProviderAdapter implements DomainObjectListener, ChangeListener { private static final String ADD_REFS_GROUP = "AddReferences"; + //@formatter:off private static final HelpLocation HELP = new HelpLocation("ReferencesPlugin", "View_Edit_References_From"); - private static Icon ADD_ICON = ResourceManager.loadImage("images/Plus.png"); - private static Icon EDIT_ICON = ResourceManager.loadImage("images/editbytes.gif"); - private static Icon DELETE_ICON = ResourceManager.loadImage("images/edit-delete.png"); - private static Icon RECV_LOCATION_ICON = Icons.NAVIGATE_ON_INCOMING_EVENT_ICON; - //private static Icon RECV_LOCATION_OFF_ICON = ResourceManager.loadImage("images/locationInOff.gif"); - private static Icon SEND_LOCATION_ICON = Icons.NAVIGATE_ON_OUTGOING_EVENT_ICON; - //private static Icon SEND_LOCATION_OFF_ICON = ResourceManager.loadImage("images/locationOutOff.gif"); - private static Icon HOME_ICON = ResourceManager.loadImage("images/go-home.png"); - private static Icon SELECT_ICON = ResourceManager.loadImage("images/text_align_justify.png"); + private static final Icon ADD_ICON = Icons.ADD_ICON; + private static final Icon EDIT_ICON = new GIcon("icon.base.edit.bytes"); + private static final Icon DELETE_ICON = Icons.DELETE_ICON; + private static final Icon RECV_LOCATION_ICON = Icons.NAVIGATE_ON_INCOMING_EVENT_ICON; + private static final Icon SEND_LOCATION_ICON = Icons.NAVIGATE_ON_OUTGOING_EVENT_ICON; + private static final Icon HOME_ICON = Icons.HOME_ICON; + private static final Icon SELECT_ICON = Icons.MAKE_SELECTION_ICON; + //@formatter:on private static final String TITLE_PREFIX = "References Editor "; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/ExternalReferencesProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/ExternalReferencesProvider.java index c1363e5505..5d286166c6 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/ExternalReferencesProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/references/ExternalReferencesProvider.java @@ -27,6 +27,7 @@ import docking.ActionContext; import docking.action.builder.ActionBuilder; import docking.widgets.dialogs.InputDialog; import docking.widgets.table.AbstractSortedTableModel; +import generic.theme.GIcon; import ghidra.app.cmd.refs.*; import ghidra.framework.cmd.Command; import ghidra.framework.cmd.CompoundCmd; @@ -41,17 +42,17 @@ import ghidra.program.model.symbol.SourceType; import ghidra.util.HelpLocation; import ghidra.util.Msg; import ghidra.util.table.GhidraTable; -import resources.ResourceManager; +import resources.Icons; /** * ComponentProvider that displays a table of External Programs. *

*/ public class ExternalReferencesProvider extends ComponentProviderAdapter { - private static ImageIcon ADD_ICON = ResourceManager.loadImage("images/Plus.png"); - private static ImageIcon DELETE_ICON = ResourceManager.loadImage("images/edit-delete.png"); - private static ImageIcon EDIT_ICON = ResourceManager.loadImage("images/editbytes.gif"); - private static ImageIcon CLEAR_ICON = ResourceManager.loadImage("images/erase16.png"); + private static Icon ADD_ICON = Icons.ADD_ICON; + private static Icon DELETE_ICON = Icons.DELETE_ICON; + private static Icon EDIT_ICON = new GIcon("icon.base.edit.bytes"); + private static Icon CLEAR_ICON = Icons.CLEAR_ICON; private JPanel mainPanel; private ExternalNamesTableModel tableModel; @@ -343,7 +344,8 @@ public class ExternalReferencesProvider extends ComponentProviderAdapter { } ExternalNamesRow path = - new ExternalNamesRow(programName, extMgr.getExternalLibraryPath(programName)); + new ExternalNamesRow(programName, + extMgr.getExternalLibraryPath(programName)); paths.add(path); } } @@ -364,7 +366,6 @@ public class ExternalReferencesProvider extends ComponentProviderAdapter { return -1; } - @Override public void dispose() { super.dispose(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/RegisterManagerProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/RegisterManagerProvider.java index ef19bb0c9d..c0c5d62f6c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/RegisterManagerProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/RegisterManagerProvider.java @@ -22,6 +22,7 @@ import javax.swing.*; import docking.ActionContext; import docking.WindowPosition; import docking.action.*; +import generic.theme.GIcon; import ghidra.app.context.ProgramActionContext; import ghidra.framework.model.*; import ghidra.framework.plugintool.ComponentProviderAdapter; @@ -33,15 +34,12 @@ import ghidra.program.util.ChangeManager; import ghidra.util.HelpLocation; import ghidra.util.task.SwingUpdateManager; import resources.Icons; -import resources.ResourceManager; public class RegisterManagerProvider extends ComponentProviderAdapter { - private static final Icon DELETE_REGISTER_VALUES_ICON = - ResourceManager.loadImage("images/edit-delete.png"); - private static final Icon SELECT_REGISTER_VALUES_ICON = - ResourceManager.loadImage("images/text_align_justify.png"); - private static final Icon FILTER_ICON = ResourceManager.loadImage("images/textfield.png"); - static final ImageIcon REGISTER_ICON = ResourceManager.loadImage("images/registerGroup.png"); + private static final Icon DELETE_REGISTER_VALUES_ICON = Icons.DELETE_ICON; + private static final Icon SELECT_REGISTER_VALUES_ICON = Icons.MAKE_SELECTION_ICON; + private static final Icon FILTER_ICON = Icons.CONFIGURE_FILTER_ICON; + static final Icon REGISTER_ICON = new GIcon("icon.plugin.register.provider"); private static Icon RECV_LOCATION_ICON = Icons.NAVIGATE_ON_INCOMING_EVENT_ICON; private Program program; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/RegisterTree.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/RegisterTree.java index ccdddf20ce..94e58dd78f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/RegisterTree.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/register/RegisterTree.java @@ -20,15 +20,15 @@ import java.awt.Point; import java.util.*; import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; -import docking.widgets.tree.*; +import docking.widgets.tree.GTree; +import docking.widgets.tree.GTreeNode; +import generic.theme.GIcon; import ghidra.program.model.lang.Register; import ghidra.program.model.listing.Program; -import resources.ResourceManager; +import resources.Icons; public class RegisterTree extends GTree { private Program program; @@ -48,15 +48,12 @@ public class RegisterTree extends GTree { // never have a horizontal scroll bar. JScrollPane scrollPane = getScrollPane(); final JViewport viewport = scrollPane.getViewport(); - scrollPane.getViewport().addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - Point viewPosition = viewport.getViewPosition(); - if (viewPosition.x != 0) { - // if it scrolls horizontally, put it back - viewPosition.x = 0; - viewport.setViewPosition(viewPosition); - } + scrollPane.getViewport().addChangeListener(e -> { + Point viewPosition = viewport.getViewPosition(); + if (viewPosition.x != 0) { + // if it scrolls horizontally, put it back + viewPosition.x = 0; + viewport.setViewPosition(viewPosition); } }); setMinimumSize(new Dimension(175, 30)); @@ -78,7 +75,7 @@ public class RegisterTree extends GTree { } private static Register[] getNonHiddenRegisters(Program program) { - ArrayList list = new ArrayList(); + ArrayList list = new ArrayList<>(); for (Register reg : program.getProgramContext().getRegisters()) { if (!reg.isHidden()) { list.add(reg); @@ -191,9 +188,9 @@ class RegisterTreeRootNode extends SearchableRegisterTreeNode { lastRegisters = registers; HashMap groups = - new HashMap(); + new HashMap<>(); - List nodes = new ArrayList(); + List nodes = new ArrayList<>(); for (Register register : registers) { if (register.getBaseRegister() != register && @@ -220,8 +217,8 @@ class RegisterTreeRootNode extends SearchableRegisterTreeNode { } class RegisterTreeNode extends SearchableRegisterTreeNode { - private static ImageIcon REG_ICON = ResourceManager.loadImage("images/registerIcon.png"); - private static ImageIcon REG_GROUP_ICON = ResourceManager.loadImage("images/registerGroup.png"); + private static Icon REG_ICON = new GIcon("icon.plugin.register"); + private static Icon REG_GROUP_ICON = new GIcon("icon.plugin.register.provider"); private final Register register; public RegisterTreeNode(Register register) { @@ -274,9 +271,8 @@ class RegisterTreeNode extends SearchableRegisterTreeNode { } class RegisterTreeGroupNode extends SearchableRegisterTreeNode { - private static ImageIcon OPEN_ICON = ResourceManager.loadImage("images/openSmallFolder.png"); - private static ImageIcon CLOSED_ICON = - ResourceManager.loadImage("images/closedSmallFolder.png"); + private static Icon OPEN_ICON = Icons.OPEN_FOLDER_ICON; + private static Icon CLOSED_ICON = Icons.CLOSED_FOLDER_ICON; private String name; public RegisterTreeGroupNode(String name) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/scalartable/ScalarSearchProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/scalartable/ScalarSearchProvider.java index 4c26b9fcdb..5699fc0aef 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/scalartable/ScalarSearchProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/scalartable/ScalarSearchProvider.java @@ -26,6 +26,7 @@ import docking.*; import docking.widgets.label.GLabel; import docking.widgets.table.GTableFilterPanel; import docking.widgets.table.TableFilter; +import generic.theme.GIcon; import ghidra.app.plugin.core.scalartable.RangeFilterTextField.FilterType; import ghidra.app.services.GoToService; import ghidra.framework.plugintool.ComponentProviderAdapter; @@ -38,7 +39,6 @@ import ghidra.util.table.*; import ghidra.util.table.actions.DeleteTableRowAction; import ghidra.util.table.actions.MakeProgramSelectionAction; import help.HelpService; -import resources.ResourceManager; /** * Displays the results of a query from the {@link ScalarSearchPlugin}. Consists of 2 components: @@ -49,7 +49,7 @@ import resources.ResourceManager; */ public class ScalarSearchProvider extends ComponentProviderAdapter { - public static final ImageIcon ICON = ResourceManager.loadImage("images/dataW.gif"); + public static final Icon ICON = new GIcon("icon.plugin.scalartable.provider"); private ScalarSearchPlugin plugin; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptActionManager.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptActionManager.java index d580e9cea3..d7170bf635 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptActionManager.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptActionManager.java @@ -38,6 +38,7 @@ import docking.actions.KeyBindingUtils; import docking.tool.ToolConstants; import docking.widgets.table.GTable; import generic.jar.ResourceFile; +import generic.theme.GIcon; import ghidra.app.script.GhidraScriptInfoManager; import ghidra.app.script.ScriptInfo; import ghidra.framework.Application; @@ -45,7 +46,6 @@ import ghidra.framework.options.SaveState; import ghidra.util.*; import ghidra.util.task.*; import resources.Icons; -import resources.ResourceManager; import utilities.util.FileUtilities; class GhidraScriptActionManager { @@ -210,7 +210,7 @@ class GhidraScriptActionManager { private void createActions() { createScriptAction("Run", "Run Script", "Run Script", - ResourceManager.loadImage("images/play.png"), RESOURCE_FILE_ACTION_RUN_GROUP, + new GIcon("icon.plugin.scriptmanager.run"), RESOURCE_FILE_ACTION_RUN_GROUP, provider::runScript); runLastAction = new RerunLastScriptAction(RESOURCE_FILE_ACTION_RUN_GROUP); @@ -220,30 +220,31 @@ class GhidraScriptActionManager { plugin.getTool().addAction(globalRunLastAction); createScriptAction("Edit", "Edit with basic editor", "Edit Script with basic editor", - ResourceManager.loadImage("images/accessories-text-editor.png"), null, + new GIcon("icon.plugin.scriptmanager.edit"), null, provider::editScriptBuiltin); createScriptAction("EditEclipse", "Edit with Eclipse", "Edit Script with Eclipse", - ResourceManager.loadImage("images/eclipse.png"), null, provider::editScriptEclipse); + new GIcon("icon.plugin.scriptmanager.edit.eclipse"), null, provider::editScriptEclipse); keyBindingAction = createScriptAction("Key Binding", "Assign Key Binding", "Assign Key Binding", - ResourceManager.loadImage("images/key.png"), null, provider::assignKeyBinding); + new GIcon("icon.plugin.scriptmanager.keybinding"), null, + provider::assignKeyBinding); createScriptAction("Delete", "Delete", "Delete Script", - ResourceManager.loadImage("images/edit-delete.png"), null, provider::deleteScript); + new GIcon("icon.plugin.scriptmanager.delete"), null, provider::deleteScript); renameAction = createScriptAction("Rename", "Rename", "Rename Script", - ResourceManager.loadImage("images/textfield_rename.png"), null, provider::renameScript); + new GIcon("icon.plugin.scriptmanager.rename"), null, provider::renameScript); newAction = createScriptTableAction("New", "Create New Script", - ResourceManager.loadImage("images/script_add.png"), provider::newScript); + new GIcon("icon.plugin.scriptmanager.new"), provider::newScript); createScriptTableAction("Refresh", "Refresh Script List", Icons.REFRESH_ICON, provider::refresh); showBundleStatusAction = createScriptTableAction("Script Directories", - "Manage Script Directories", ResourceManager.loadImage("images/text_list_bullets.png"), + "Manage Script Directories", new GIcon("icon.plugin.scriptmanager.manage"), provider::showBundleStatusComponent); new ActionBuilder("Script Quick Launch", plugin.getName()) @@ -252,7 +253,7 @@ class GhidraScriptActionManager { .onAction(this::chooseScript) .buildAndInstall(plugin.getTool()); - Icon icon = ResourceManager.loadImage("images/red-cross.png"); + Icon icon = new GIcon("icon.plugin.scriptmanager.api"); Predicate test = context -> { Object contextObject = context.getContextObject(); return (contextObject instanceof GTable) || (contextObject instanceof ResourceFile); @@ -506,7 +507,7 @@ class GhidraScriptActionManager { super(RERUN_LAST_SHARED_ACTION_NAME, plugin.getName(), KeyBindingType.SHARED); setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/play_again.png"), toolbarGroup)); + new ToolBarData(new GIcon("icon.plugin.scriptmanager.run.again"), toolbarGroup)); setDescription("Rerun the last run script"); setHelpLocation(new HelpLocation(plugin.getName(), "Run_Last")); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptComponentProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptComponentProvider.java index ebc7b8fb07..2862efc947 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptComponentProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptComponentProvider.java @@ -46,6 +46,7 @@ import docking.widgets.tree.GTree; import docking.widgets.tree.GTreeNode; import docking.widgets.tree.support.BreadthFirstIterator; import generic.jar.ResourceFile; +import generic.theme.GIcon; import ghidra.app.plugin.core.osgi.*; import ghidra.app.script.*; import ghidra.app.services.ConsoleService; @@ -57,7 +58,6 @@ import ghidra.util.datastruct.WeakDataStructureFactory; import ghidra.util.datastruct.WeakSet; import ghidra.util.table.GhidraTableFilterPanel; import ghidra.util.task.*; -import resources.ResourceManager; import util.CollectionUtils; import utilities.util.FileUtilities; @@ -126,7 +126,7 @@ public class GhidraScriptComponentProvider extends ComponentProviderAdapter { scriptList.addListener(scriptListListener); setHelpLocation(new HelpLocation(plugin.getName(), plugin.getName())); - setIcon(ResourceManager.loadImage("images/play.png")); + setIcon(new GIcon("icon.plugin.scriptmanager.provider")); addToToolbar(); setWindowGroup(WINDOW_GROUP); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptEditorComponentProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptEditorComponentProvider.java index 74cb0b1fef..81fb4dc803 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptEditorComponentProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/GhidraScriptEditorComponentProvider.java @@ -33,13 +33,13 @@ import docking.actions.KeyBindingUtils; import docking.options.editor.FontEditor; import docking.widgets.OptionDialog; import generic.jar.ResourceFile; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors; import ghidra.app.script.GhidraScriptUtil; import ghidra.framework.options.SaveState; import ghidra.util.*; import ghidra.util.datastruct.FixedSizeStack; import resources.Icons; -import resources.ResourceManager; public class GhidraScriptEditorComponentProvider extends ComponentProvider { static final String EDITOR_COMPONENT_NAME = "EDITOR"; @@ -233,7 +233,7 @@ public class GhidraScriptEditorComponentProvider extends ComponentProvider { }; undoAction.setDescription("Undo"); undoAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/undo.png"), "UndoRedo")); + new ToolBarData(new GIcon("icon.undo"), "UndoRedo")); undoAction.setEnabled(false); undoAction.setKeyBindingData(new KeyBindingData( KeyStroke.getKeyStroke(KeyEvent.VK_Z, DockingUtils.CONTROL_KEY_MODIFIER_MASK))); @@ -254,7 +254,7 @@ public class GhidraScriptEditorComponentProvider extends ComponentProvider { }; redoAction.setDescription("Redo"); redoAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/redo.png"), "UndoRedo")); + new ToolBarData(new GIcon("icon.redo"), "UndoRedo")); redoAction.setKeyBindingData(new KeyBindingData( KeyStroke.getKeyStroke(KeyEvent.VK_Y, DockingUtils.CONTROL_KEY_MODIFIER_MASK))); redoAction.setEnabled(false); @@ -282,7 +282,7 @@ public class GhidraScriptEditorComponentProvider extends ComponentProvider { }; saveAction.setDescription("Save"); saveAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/disk.png"), "Save")); + new ToolBarData(Icons.SAVE_ICON, "Save")); saveAction.setKeyBindingData(new KeyBindingData( KeyStroke.getKeyStroke(KeyEvent.VK_S, DockingUtils.CONTROL_KEY_MODIFIER_MASK))); @@ -319,7 +319,7 @@ public class GhidraScriptEditorComponentProvider extends ComponentProvider { }; saveAsAction.setDescription("Save As..."); saveAsAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/disk_save_as.png"), "Save")); + new ToolBarData(Icons.SAVE_AS_ICON, "Save")); saveAsAction.setEnabled(true); plugin.getTool().addLocalAction(this, saveAsAction); @@ -343,7 +343,7 @@ public class GhidraScriptEditorComponentProvider extends ComponentProvider { } }; runAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/play.png"), "ZRun")); + new ToolBarData(new GIcon("icon.plugin.scriptmanager.run"), "ZRun")); runAction.setDescription("Run Editor's Script"); runAction.setPopupMenuData(new MenuData(new String[] { "Run" }, "ZRun")); runAction.setEnabled(true); @@ -357,7 +357,7 @@ public class GhidraScriptEditorComponentProvider extends ComponentProvider { } }; fontAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/text_lowercase.png"), "ZZFont")); + new ToolBarData(new GIcon("icon.font"), "ZZFont")); fontAction.setDescription("Select Font"); fontAction.setEnabled(true); plugin.getTool().addLocalAction(this, fontAction); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/RootNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/RootNode.java index 55eec912c1..fa39a45abc 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/RootNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/RootNode.java @@ -20,10 +20,10 @@ import java.util.List; import javax.swing.Icon; import docking.widgets.tree.GTreeNode; -import resources.ResourceManager; +import generic.theme.GIcon; class RootNode extends GTreeNode { - private static Icon icon = ResourceManager.loadImage("images/play.png"); + private static Icon icon = new GIcon("icon.plugin.scriptmanager.provider"); @Override public Icon getIcon(boolean expanded) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/ScriptCategoryNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/ScriptCategoryNode.java index b202e9504b..c9eef5ed02 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/ScriptCategoryNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/script/ScriptCategoryNode.java @@ -18,18 +18,17 @@ package ghidra.app.plugin.core.script; import javax.swing.Icon; import docking.widgets.tree.GTreeNode; -import resources.ResourceManager; +import generic.theme.GIcon; public class ScriptCategoryNode extends GTreeNode { - private static Icon OPEN_FOLDER = ResourceManager.loadImage("images/openSmallFolder.png"); - private static Icon CLOSED_FOLDER = ResourceManager.loadImage("images/closedSmallFolder.png"); + private static Icon OPEN_FOLDER = new GIcon("icon.folder.open"); + private static Icon CLOSED_FOLDER = new GIcon("icon.folder.closed"); private final String name; ScriptCategoryNode(String name) { this.name = name; - } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchmem/MemSearchPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchmem/MemSearchPlugin.java index 5dcfe23bee..c195a299bb 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchmem/MemSearchPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchmem/MemSearchPlugin.java @@ -19,7 +19,7 @@ import java.awt.Color; import java.awt.event.KeyEvent; import java.util.*; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.JComponent; import docking.*; @@ -27,6 +27,7 @@ import docking.action.*; import docking.tool.ToolConstants; import docking.widgets.fieldpanel.support.Highlight; import docking.widgets.table.threaded.*; +import generic.theme.GIcon; import ghidra.GhidraOptions; import ghidra.app.CorePluginPackage; import ghidra.app.context.NavigatableActionContext; @@ -57,7 +58,6 @@ import ghidra.util.bean.opteditor.OptionsVetoException; import ghidra.util.search.memory.*; import ghidra.util.table.GhidraProgramTableModel; import ghidra.util.task.*; -import resources.ResourceManager; /** * Class to handle memory searching of code bytes in a program. @@ -92,7 +92,7 @@ public class MemSearchPlugin extends Plugin implements OptionsChangeListener, private MemSearchDialog searchDialog; private GoToService goToService; private int searchLimit; - private ImageIcon searchIcon; + private static final Icon SEARCH_MARKER_ICON = new GIcon("icon.base.search.marker"); private Color defaultHighlightColor; private Color activeHighlightColor; @@ -115,7 +115,6 @@ public class MemSearchPlugin extends Plugin implements OptionsChangeListener, public MemSearchPlugin(PluginTool tool) { super(tool); - searchIcon = ResourceManager.loadImage("images/searchm_obj.gif"); createActions(); initializeOptionListeners(); @@ -510,7 +509,7 @@ public class MemSearchPlugin extends Plugin implements OptionsChangeListener, String type = "Search"; if (navigatable.supportsMarkers()) { return tableService.showTableWithMarkers(title, type, model, - PluginConstants.SEARCH_HIGHLIGHT_COLOR, searchIcon, type, navigatable); + PluginConstants.SEARCH_HIGHLIGHT_COLOR, SEARCH_MARKER_ICON, type, navigatable); } return tableService.showTable(title, type, model, type, navigatable); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchtext/SearchTextPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchtext/SearchTextPlugin.java index ee8deba1ec..44e851b813 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchtext/SearchTextPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/searchtext/SearchTextPlugin.java @@ -21,13 +21,14 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.swing.ImageIcon; +import javax.swing.Icon; import docking.*; import docking.action.builder.ActionBuilder; import docking.tool.ToolConstants; import docking.widgets.fieldpanel.support.Highlight; import docking.widgets.table.threaded.*; +import generic.theme.GIcon; import ghidra.GhidraOptions; import ghidra.app.CorePluginPackage; import ghidra.app.context.*; @@ -58,7 +59,6 @@ import ghidra.util.*; import ghidra.util.bean.opteditor.OptionsVetoException; import ghidra.util.table.GhidraProgramTableModel; import ghidra.util.task.*; -import resources.ResourceManager; /** * Plugin to search text as it is displayed in the fields of the Code Browser. @@ -88,7 +88,7 @@ import resources.ResourceManager; public class SearchTextPlugin extends ProgramPlugin implements OptionsChangeListener, TaskListener, NavigatableRemovalListener, DockingContextListener { - private static final ImageIcon searchIcon = ResourceManager.loadImage("images/searchm_obj.gif"); + private static final Icon SEARCH_MARKER_ICON = new GIcon("icon.base.search.marker"); private static final String DESCRIPTION = "Search program text for string"; private final static Highlight[] NO_HIGHLIGHTS = new Highlight[0]; @@ -182,7 +182,6 @@ public class SearchTextPlugin extends ProgramPlugin implements OptionsChangeList if (searchDialog != null && searchDialog.isVisible()) { TaskMonitor taskMonitor = searchDialog.getTaskMonitorComponent(); - // TODO this can probably be handled by canceling the task below (or vice versa) taskMonitor.cancel(); searchDialog.dispose(); @@ -332,7 +331,7 @@ public class SearchTextPlugin extends ProgramPlugin implements OptionsChangeList if (navigatable.supportsMarkers()) { return query.showTableWithMarkers( "Search Text - \"" + searchString + "\" [" + matchType + "]", "Search", model, - PluginConstants.SEARCH_HIGHLIGHT_COLOR, searchIcon, "Search", navigatable); + PluginConstants.SEARCH_HIGHLIGHT_COLOR, SEARCH_MARKER_ICON, "Search", navigatable); } return query.showTable("Search Text - \"" + searchString + "\" [" + matchType + "]", "Search", model, "Search", navigatable); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/string/StringTableProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/string/StringTableProvider.java index 53fbdeb850..16fd3eee44 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/string/StringTableProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/string/StringTableProvider.java @@ -30,6 +30,7 @@ import docking.widgets.label.GLabel; import docking.widgets.table.*; import docking.widgets.table.threaded.ThreadedTableModel; import docking.widgets.textfield.IntegerTextField; +import generic.theme.GIcon; import ghidra.app.services.GoToService; import ghidra.app.util.HelpTopics; import ghidra.docking.settings.SettingsImpl; @@ -48,26 +49,26 @@ import ghidra.util.layout.VerticalLayout; import ghidra.util.table.*; import ghidra.util.table.actions.MakeProgramSelectionAction; import ghidra.util.task.TaskLauncher; +import resources.Icons; import resources.ResourceManager; /** * Component provider for the Search -> For Strings... result dialog. */ public class StringTableProvider extends ComponentProviderAdapter implements DomainObjectListener { - private static final ImageIcon ICON = ResourceManager.loadImage("images/kmessedwords.png"); - private static final Icon PARITALLY_DEFINED_ICON = - ResourceManager.loadImage("images/dialog-warning.png"); - private static final Icon SHOW_UNDEFINED_ICON = - ResourceManager.loadImage("images/magnifier.png"); - private static final Icon SHOW_DEFINED_ICON = ResourceManager.loadImage("images/font.png"); - private static final Icon SHOW_WORDS_ICON = ResourceManager.loadImage("images/view-filter.png"); - private static final Icon CONFLICTS_ICON = - ResourceManager.loadImage("images/dialog-warning_red.png"); - private static final Icon REFRESH_ICON = ResourceManager.loadImage("images/reload.png"); - private static final Icon REFRESH_NOT_NEEDED_ICON = - ResourceManager.getDisabledIcon(REFRESH_ICON); - private static final Icon EXPAND_ICON = ResourceManager.loadImage("images/expand.gif"); - private static final Icon COLLAPSE_ICON = ResourceManager.loadImage("images/collapse.gif"); + + //@formatter:off + private static final Icon ICON = new GIcon("icon.plugin.stringtable.provider"); + private static final Icon PARITALLY_DEFINED_ICON = new GIcon("icon.plugin.stringtable.defined.partial"); + private static final Icon SHOW_UNDEFINED_ICON = new GIcon("icon.plugin.stringtable.undefined"); + private static final Icon SHOW_DEFINED_ICON = new GIcon("icon.plugin.stringtable.defined"); + private static final Icon SHOW_WORDS_ICON = new GIcon("icon.plugin.stringtable.words"); + private static final Icon CONFLICTS_ICON = new GIcon("icon.plugin.stringtable.conflicts"); + private static final Icon REFRESH_ICON = Icons.REFRESH_ICON; + private static final Icon REFRESH_NOT_NEEDED_ICON = ResourceManager.getDisabledIcon(REFRESH_ICON); + private static final Icon EXPAND_ICON = new GIcon("icon.toggle.expand"); + private static final Icon COLLAPSE_ICON = new GIcon("icon.toggle.collapse"); + //@formatter:off private StringTablePlugin plugin; private JPanel mainPanel; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/strings/ViewStringsProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/strings/ViewStringsProvider.java index 0b2a0245b0..9435c25150 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/strings/ViewStringsProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/strings/ViewStringsProvider.java @@ -28,6 +28,7 @@ import javax.swing.table.TableColumn; import docking.ActionContext; import docking.widgets.table.GTableTextCellEditor; import docking.widgets.table.threaded.ThreadedTableModelListener; +import generic.theme.GIcon; import ghidra.app.services.GoToService; import ghidra.framework.plugintool.ComponentProviderAdapter; import ghidra.program.model.address.Address; @@ -40,14 +41,13 @@ import ghidra.program.util.ProgramSelection; import ghidra.util.HelpLocation; import ghidra.util.table.*; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; /** * Provider for the defined strings table. */ public class ViewStringsProvider extends ComponentProviderAdapter { - public static final ImageIcon ICON = ResourceManager.loadImage("images/dataW.gif"); + public static final Icon ICON = new GIcon("icon.plugin.viewstrings.provider"); private GhidraThreadedTablePanel threadedTablePanel; private GhidraTableFilterPanel filterPanel; @@ -155,8 +155,9 @@ public class ViewStringsProvider extends ComponentProviderAdapter { // ignore } }); - TableColumn stringRepCol = table.getColumnModel().getColumn( - ViewStringsTableModel.COLUMNS.STRING_REP_COL.ordinal()); + TableColumn stringRepCol = table.getColumnModel() + .getColumn( + ViewStringsTableModel.COLUMNS.STRING_REP_COL.ordinal()); stringRepCol.setCellEditor(new StringRepCellEditor()); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/SymbolGTree.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/SymbolGTree.java index 89d512ea1f..fa4aad8e29 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/SymbolGTree.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/SymbolGTree.java @@ -24,11 +24,11 @@ import javax.swing.tree.TreePath; import docking.widgets.tree.GTree; import docking.widgets.tree.GTreeNode; import docking.widgets.tree.support.GTreeRenderer; +import generic.theme.GIcon; import ghidra.app.plugin.core.symboltree.nodes.SymbolNode; import ghidra.app.util.SymbolInspector; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.Symbol; -import resources.ResourceManager; public class SymbolGTree extends GTree { @@ -65,9 +65,9 @@ public class SymbolGTree extends GTree { private class SymbolTreeCellRenderer extends GTreeRenderer { public final Icon OPEN_FOLDER_GROUP_ICON = - ResourceManager.loadImage("images/openFolderGroup.png"); + new GIcon("icon.plugin.symboltree.node.group.folder.open"); public final Icon CLOSED_FOLDER_GROUP_ICON = - ResourceManager.loadImage("images/closedFolderGroup.png"); + new GIcon("icon.plugin.symboltree.node.group.folder.closed"); public SymbolTreeCellRenderer() { setMinIconWidth(28); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/SymbolTreeProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/SymbolTreeProvider.java index b252bd652b..1c91b419d9 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/SymbolTreeProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/SymbolTreeProvider.java @@ -33,6 +33,7 @@ import docking.widgets.tree.*; import docking.widgets.tree.support.GTreeNodeTransferable; import docking.widgets.tree.support.GTreeSelectionEvent.EventOrigin; import docking.widgets.tree.tasks.GTreeBulkTask; +import generic.theme.GIcon; import ghidra.app.plugin.core.symboltree.actions.*; import ghidra.app.plugin.core.symboltree.nodes.*; import ghidra.framework.model.*; @@ -46,12 +47,11 @@ import ghidra.program.util.*; import ghidra.util.*; import ghidra.util.exception.*; import ghidra.util.task.*; -import resources.ResourceManager; public class SymbolTreeProvider extends ComponentProviderAdapter { - private static final ImageIcon ICON = ResourceManager.loadImage("images/sitemap_color.png"); - private final static String NAME = "Symbol Tree"; + private static final Icon ICON = new GIcon("icon.plugin.symboltree.provider"); + private static final String NAME = "Symbol Tree"; private ClipboardOwner clipboardOwner; private Clipboard localClipboard;// temporary clipboard used for the "cut" operation diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/CutAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/CutAction.java index 255c5dbbde..1079a51a5e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/CutAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/CutAction.java @@ -15,7 +15,7 @@ */ package ghidra.app.plugin.core.symboltree.actions; -import static docking.KeyBindingPrecedence.ActionMapLevel; +import static docking.KeyBindingPrecedence.*; import java.awt.datatransfer.*; import java.awt.event.InputEvent; @@ -35,10 +35,10 @@ import docking.widgets.tree.support.GTreeNodeTransferable; import docking.widgets.tree.support.GTreeTransferHandler; import ghidra.app.plugin.core.symboltree.*; import ghidra.app.plugin.core.symboltree.nodes.SymbolTreeNode; -import resources.ResourceManager; +import resources.Icons; public class CutAction extends SymbolTreeContextAction { - private final static Icon CUT_ICON = ResourceManager.loadImage("images/edit-cut22.png"); + private final static Icon CUT_ICON = Icons.CUT_ICON; private final SymbolTreeProvider provider; private ClipboardOwner clipboardOwner; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/DeleteAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/DeleteAction.java index 15a8cb19ec..fcc0231546 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/DeleteAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/DeleteAction.java @@ -27,11 +27,11 @@ import ghidra.app.plugin.core.symboltree.SymbolTreePlugin; import ghidra.app.plugin.core.symboltree.nodes.SymbolNode; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.Symbol; -import resources.ResourceManager; +import resources.Icons; public class DeleteAction extends SymbolTreeContextAction { - private final static Icon DELETE_ICON = ResourceManager.loadImage("images/edit-delete.png"); + private final static Icon DELETE_ICON = Icons.DELETE_ICON; private final SymbolTreePlugin plugin; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/GoToExternalLocationAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/GoToExternalLocationAction.java index 8925584137..fff2d49e7f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/GoToExternalLocationAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/GoToExternalLocationAction.java @@ -16,12 +16,12 @@ package ghidra.app.plugin.core.symboltree.actions; import docking.action.MenuData; +import generic.theme.GIcon; import ghidra.app.context.ProgramSymbolActionContext; import ghidra.app.context.ProgramSymbolContextAction; import ghidra.app.plugin.core.symboltree.SymbolTreePlugin; import ghidra.program.model.listing.Function; import ghidra.program.model.symbol.*; -import resources.ResourceManager; public class GoToExternalLocationAction extends ProgramSymbolContextAction { @@ -32,7 +32,7 @@ public class GoToExternalLocationAction extends ProgramSymbolContextAction { this.plugin = plugin; setPopupMenuData(new MenuData(new String[] { "Go to External Location" }, - ResourceManager.loadImage("images/searchm_obj.gif"), "0External")); + new GIcon("icon.plugin.symboltree.goto"), "0External")); } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/PasteAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/PasteAction.java index 1eb4d98f36..90b663ea9f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/PasteAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/PasteAction.java @@ -32,11 +32,11 @@ import docking.widgets.tree.GTreeNode; import docking.widgets.tree.support.GTreeDragNDropHandler; import ghidra.app.plugin.core.symboltree.*; import ghidra.app.plugin.core.symboltree.nodes.SymbolTreeNode; -import resources.ResourceManager; +import resources.Icons; public class PasteAction extends SymbolTreeContextAction { - private final static Icon PASTE_ICON = ResourceManager.loadImage("images/page_paste.png"); + private final static Icon PASTE_ICON = Icons.PASTE_ICON; public PasteAction(SymbolTreePlugin plugin, SymbolTreeProvider provider) { super("Paste Symbols", plugin.getName()); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/SetExternalProgramAction.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/SetExternalProgramAction.java index 53500473f1..2b50d93c0d 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/SetExternalProgramAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/actions/SetExternalProgramAction.java @@ -15,6 +15,13 @@ */ package ghidra.app.plugin.core.symboltree.actions; +import javax.swing.Icon; +import javax.swing.SwingUtilities; +import javax.swing.tree.TreePath; + +import docking.action.MenuData; +import docking.action.ToolBarData; +import generic.theme.GIcon; import ghidra.app.cmd.refs.SetExternalNameCmd; import ghidra.app.plugin.core.symboltree.*; import ghidra.app.plugin.core.symboltree.nodes.LibrarySymbolNode; @@ -26,19 +33,8 @@ import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.ExternalManager; import ghidra.util.HelpLocation; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.ImageIcon; -import javax.swing.SwingUtilities; -import javax.swing.tree.TreePath; - -import docking.action.MenuData; -import docking.action.ToolBarData; -import resources.ResourceManager; - public class SetExternalProgramAction extends SymbolTreeContextAction { - private static ImageIcon EDIT_ICON = ResourceManager.loadImage("images/editbytes.gif"); + private static Icon EDIT_ICON = new GIcon("icon.plugin.symboltree.set.external"); private final SymbolTreePlugin plugin; private SymbolTreeProvider provider; @@ -89,34 +85,27 @@ public class SetExternalProgramAction extends SymbolTreeContextAction { dialog.setSearchText(externalName); - dialog.addOkActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e1) { - DomainFile domainFile = dialog.getDomainFile(); - if (domainFile == null) { - return; - } - String pathName = domainFile.toString(); - dialog.close(); - if (!pathName.equals(externalLibraryPath)) { - Command cmd = new SetExternalNameCmd(externalName, domainFile.getPathname()); - plugin.getTool().execute(cmd, plugin.getProgram()); - } + dialog.addOkActionListener(e1 -> { + DomainFile domainFile = dialog.getDomainFile(); + if (domainFile == null) { + return; + } + String pathName = domainFile.toString(); + dialog.close(); + if (!pathName.equals(externalLibraryPath)) { + Command cmd = new SetExternalNameCmd(externalName, domainFile.getPathname()); + plugin.getTool().execute(cmd, plugin.getProgram()); } }); dialog.setHelpLocation(new HelpLocation("SymbolTreePlugin", "ChooseExternalProgram")); if (externalLibraryPath != null) { - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - Project project = AppInfo.getActiveProject(); - ProjectData pd = project.getProjectData(); - DomainFile domainFile = pd.getFile(externalLibraryPath); - if (domainFile != null) { - dialog.selectDomainFile(domainFile); - } + SwingUtilities.invokeLater(() -> { + Project project = AppInfo.getActiveProject(); + ProjectData pd = project.getProjectData(); + DomainFile domainFile = pd.getFile(externalLibraryPath); + if (domainFile != null) { + dialog.selectDomainFile(domainFile); } }); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ClassCategoryNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ClassCategoryNode.java index 5bcfd2e031..214290a980 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ClassCategoryNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ClassCategoryNode.java @@ -21,21 +21,20 @@ import java.util.*; import javax.swing.Icon; import docking.widgets.tree.GTreeNode; +import generic.theme.GIcon; import ghidra.app.plugin.core.symboltree.SymbolCategory; import ghidra.program.model.listing.GhidraClass; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.*; import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; -import ghidra.util.task.TaskMonitorAdapter; -import resources.ResourceManager; public class ClassCategoryNode extends SymbolCategoryNode { public static final Icon OPEN_FOLDER_CLASSES_ICON = - ResourceManager.loadImage("images/openFolderClasses.png"); + new GIcon("icon.plugin.symboltree.node.category.classes.open"); public static final Icon CLOSED_FOLDER_CLASSES_ICON = - ResourceManager.loadImage("images/closedFolderClasses.png"); + new GIcon("icon.plugin.symboltree.node.category.classes.closed"); ClassCategoryNode(Program program) { super(SymbolCategory.CLASS_CATEGORY, program); @@ -74,7 +73,7 @@ public class ClassCategoryNode extends SymbolCategoryNode { Namespace parentNamespace = symbol.getParentNamespace(); Symbol namespaceSymbol = parentNamespace.getSymbol(); SymbolNode key = SymbolNode.createNode(namespaceSymbol, program); - GTreeNode parentNode = findSymbolTreeNode(key, false, TaskMonitorAdapter.DUMMY_MONITOR); + GTreeNode parentNode = findSymbolTreeNode(key, false, TaskMonitor.DUMMY); if (parentNode == null) { return null; } @@ -84,7 +83,7 @@ public class ClassCategoryNode extends SymbolCategoryNode { @Override protected List getSymbols(SymbolType type, TaskMonitor monitor) throws CancelledException { - List list = new ArrayList(); + List list = new ArrayList<>(); monitor.initialize(symbolTable.getNumSymbols()); SymbolType symbolType = symbolCategory.getSymbolType(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ClassSymbolNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ClassSymbolNode.java index 1e1e166f82..db0315ddc2 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ClassSymbolNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ClassSymbolNode.java @@ -18,8 +18,8 @@ package ghidra.app.plugin.core.symboltree.nodes; import java.awt.datatransfer.DataFlavor; import javax.swing.Icon; -import javax.swing.ImageIcon; +import generic.theme.GIcon; import ghidra.app.util.SelectionTransferData; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.Namespace; @@ -32,9 +32,9 @@ public class ClassSymbolNode extends SymbolNode { static final DataFlavor GLOBAL_DATA_FLAVOR = new SymbolTreeDataFlavor("Symbol Tree Data Flavor - Global Classes"); - private static Icon CLASS_ICON = ResourceManager.loadImage("images/class.png"); - private static Icon DISABLED_CLASS_ICONDISABLED_CLASS_ICON = - ResourceManager.getDisabledIcon((ImageIcon) CLASS_ICON); + private static final Icon CLASS_ICON = new GIcon("icon.plugin.symboltree.node.class"); + private static final Icon DISABLED_CLASS_ICONDISABLED_CLASS_ICON = + ResourceManager.getDisabledIcon(CLASS_ICON); ClassSymbolNode(Program program, Symbol symbol) { super(program, symbol); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/CodeSymbolNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/CodeSymbolNode.java index f337aea651..e2d722f2b8 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/CodeSymbolNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/CodeSymbolNode.java @@ -18,8 +18,8 @@ package ghidra.app.plugin.core.symboltree.nodes; import java.awt.datatransfer.DataFlavor; import javax.swing.Icon; -import javax.swing.ImageIcon; +import generic.theme.GIcon; import ghidra.app.util.ToolTipUtils; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.ExternalLocation; @@ -34,13 +34,13 @@ public class CodeSymbolNode extends SymbolNode { static final DataFlavor EXTERNAL_DATA_FLAVOR = new SymbolTreeDataFlavor("Symbol Tree Data Flavor - External Data"); - private static final Icon CODE_ICON = ResourceManager.loadImage("images/label.png"); - private static final Icon PINNED_ICON = ResourceManager.loadImage("images/pin.png"); - private static final Icon EXTERNAL_ICON = ResourceManager.loadImage("images/ExternalData.gif"); - private static final Icon DISABLED_CODE_ICON = - ResourceManager.getDisabledIcon((ImageIcon) CODE_ICON); - private static final Icon DISABLED_EXTERNAL_ICON = - ResourceManager.getDisabledIcon((ImageIcon) EXTERNAL_ICON); + //@formatter:off + private static final Icon CODE_ICON = new GIcon("icon.plugin.symboltree.node.code"); + private static final Icon PINNED_ICON = new GIcon("icon.plugin.symboltree.node.code.pinned"); + private static final Icon EXTERNAL_ICON = new GIcon("icon.plugin.symboltree.node.code.external"); + private static final Icon DISABLED_CODE_ICON = ResourceManager.getDisabledIcon(CODE_ICON); + private static final Icon DISABLED_EXTERNAL_ICON = ResourceManager.getDisabledIcon(EXTERNAL_ICON); + //@formatter:on private String tooltip; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ExportsCategoryNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ExportsCategoryNode.java index 44940769a3..656d64d0cf 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ExportsCategoryNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ExportsCategoryNode.java @@ -20,16 +20,18 @@ import java.util.*; import javax.swing.Icon; import docking.widgets.tree.GTreeNode; +import generic.theme.GIcon; import ghidra.app.plugin.core.symboltree.SymbolCategory; import ghidra.program.model.address.AddressIterator; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.Symbol; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; class ExportsCategoryNode extends SymbolCategoryNode { - private static final Icon OPEN_FOLDER = ResourceManager.loadImage("images/openFolder.png"); - private static final Icon CLOSED_FOLDER = ResourceManager.loadImage("images/closedFolder.png"); + private static final Icon OPEN_FOLDER = + new GIcon("icon.plugin.symboltree.node.category.exports.open"); + private static final Icon CLOSED_FOLDER = + new GIcon("icon.plugin.symboltree.node.category.exports.closed"); ExportsCategoryNode(Program program) { super(SymbolCategory.EXPORTS_CATEGORY, program); @@ -37,7 +39,7 @@ class ExportsCategoryNode extends SymbolCategoryNode { @Override public List generateChildren(TaskMonitor monitor) { - List list = new ArrayList(); + List list = new ArrayList<>(); List functionSymbolList = getExportSymbols(); for (Symbol symbol : functionSymbolList) { @@ -50,7 +52,7 @@ class ExportsCategoryNode extends SymbolCategoryNode { } private List getExportSymbols() { - List symbols = new ArrayList(); + List symbols = new ArrayList<>(); AddressIterator iterator = symbolTable.getExternalEntryPointIterator(); while (iterator.hasNext()) { Symbol symbol = symbolTable.getPrimarySymbol(iterator.next()); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/FunctionCategoryNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/FunctionCategoryNode.java index 8692b83324..336dba25c6 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/FunctionCategoryNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/FunctionCategoryNode.java @@ -22,19 +22,19 @@ import java.util.List; import javax.swing.Icon; import docking.widgets.tree.GTreeNode; +import generic.theme.GIcon; import ghidra.app.plugin.core.symboltree.SymbolCategory; import ghidra.program.model.listing.Function; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.*; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; class FunctionCategoryNode extends SymbolCategoryNode { public static final Icon OPEN_FOLDER_FUNCTIONS_ICON = - ResourceManager.loadImage("images/openFolderFunctions.png"); + new GIcon("icon.plugin.symboltree.node.category.function.open"); public static final Icon CLOSED_FOLDER_FUNCTIONS_ICON = - ResourceManager.loadImage("images/closedFolderFunctions.png"); + new GIcon("icon.plugin.symboltree.node.category.function.closed"); FunctionCategoryNode(Program program) { super(SymbolCategory.FUNCTION_CATEGORY, program); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/FunctionSymbolNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/FunctionSymbolNode.java index 6383dc296c..3e6d463cc8 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/FunctionSymbolNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/FunctionSymbolNode.java @@ -19,9 +19,9 @@ import java.awt.datatransfer.DataFlavor; import java.util.Comparator; import javax.swing.Icon; -import javax.swing.ImageIcon; import docking.widgets.tree.GTreeNode; +import generic.theme.GIcon; import ghidra.app.util.ToolTipUtils; import ghidra.program.model.listing.*; import ghidra.program.model.symbol.Symbol; @@ -30,23 +30,19 @@ import ghidra.util.task.TaskMonitor; import resources.ResourceManager; public class FunctionSymbolNode extends SymbolNode { - static final DataFlavor LOCAL_DATA_FLAVOR = - new SymbolTreeDataFlavor("Symbol Tree Data Flavor - Local Functions"); - static final DataFlavor GLOBAL_DATA_FLAVOR = - new SymbolTreeDataFlavor("Symbol Tree Data Flavor - Global Functions"); - static final DataFlavor EXTERNAL_DATA_FLAVOR = - new SymbolTreeDataFlavor("Symbol Tree Data Flavor - External Functions"); - public static final Icon FUNCTION_ICON = ResourceManager.loadImage("images/FunctionScope.gif"); - public static final Icon THUNK_ICON = ResourceManager.loadImage("images/ThunkFunction.gif"); - public static final Icon EXTERNAL_ICON = - ResourceManager.loadImage("images/ExternalFunction.gif"); - public static final Icon DISABLED_FUNCTION_ICON = - ResourceManager.getDisabledIcon((ImageIcon) FUNCTION_ICON); - public static final Icon DISABLED_THUNK_ICON = - ResourceManager.getDisabledIcon((ImageIcon) THUNK_ICON); - public static final Icon DISABLED_EXTERNAL_ICON = - ResourceManager.getDisabledIcon((ImageIcon) EXTERNAL_ICON); + //@formatter:off + static final DataFlavor LOCAL_DATA_FLAVOR = new SymbolTreeDataFlavor("Symbol Tree Data Flavor - Local Functions"); + static final DataFlavor GLOBAL_DATA_FLAVOR = new SymbolTreeDataFlavor("Symbol Tree Data Flavor - Global Functions"); + static final DataFlavor EXTERNAL_DATA_FLAVOR = new SymbolTreeDataFlavor("Symbol Tree Data Flavor - External Functions"); + + public static final Icon FUNCTION_ICON = new GIcon("icon.plugin.symboltree.node.function"); + public static final Icon THUNK_ICON = new GIcon("icon.plugin.symboltree.node.function.thunk"); + public static final Icon EXTERNAL_ICON = new GIcon("icon.plugin.symboltree.node.function.external"); + public static final Icon DISABLED_FUNCTION_ICON = ResourceManager.getDisabledIcon(FUNCTION_ICON); + public static final Icon DISABLED_THUNK_ICON = ResourceManager.getDisabledIcon(THUNK_ICON); + public static final Icon DISABLED_EXTERNAL_ICON = ResourceManager.getDisabledIcon(EXTERNAL_ICON); + //@formatter:on private static Comparator CHILD_COMPARATOR = new FunctionVariableComparator(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ImportsCategoryNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ImportsCategoryNode.java index 3573ba2e85..88571e92f5 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ImportsCategoryNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ImportsCategoryNode.java @@ -17,17 +17,17 @@ package ghidra.app.plugin.core.symboltree.nodes; import javax.swing.Icon; +import generic.theme.GIcon; import ghidra.app.plugin.core.symboltree.SymbolCategory; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.Symbol; -import resources.ResourceManager; public class ImportsCategoryNode extends SymbolCategoryNode { private static Icon CLOSED_FOLDER_EXTERNALS_ICON = - ResourceManager.loadImage("images/closedFolderExternals.png"); + new GIcon("icon.plugin.symboltree.node.category.imports.closed"); private static Icon OPEN_FOLDER_EXTERNALS_ICON = - ResourceManager.loadImage("images/openFolderExternals.png"); + new GIcon("icon.plugin.symboltree.node.category.imports.open"); public ImportsCategoryNode(Program program) { super(SymbolCategory.IMPORTS_CATEGORY, program); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/LabelCategoryNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/LabelCategoryNode.java index ad07089d75..f268b5c9b7 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/LabelCategoryNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/LabelCategoryNode.java @@ -22,20 +22,20 @@ import java.util.List; import javax.swing.Icon; import docking.widgets.tree.GTreeNode; +import generic.theme.GIcon; import ghidra.app.plugin.core.symboltree.SymbolCategory; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.Symbol; import ghidra.program.model.symbol.SymbolType; import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; public class LabelCategoryNode extends SymbolCategoryNode { public static final Icon OPEN_FOLDER_LABELS_ICON = - ResourceManager.loadImage("images/openFolderLabels.png"); + new GIcon("icon.plugin.symboltree.node.category.label.open"); public static final Icon CLOSED_FOLDER_LABELS_ICON = - ResourceManager.loadImage("images/closedFolderLabels.png"); + new GIcon("icon.plugin.symboltree.node.category.label.closed"); public LabelCategoryNode(Program program) { super(SymbolCategory.LABEL_CATEGORY, program); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/LibrarySymbolNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/LibrarySymbolNode.java index 2f189dc660..bfb656ec45 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/LibrarySymbolNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/LibrarySymbolNode.java @@ -21,16 +21,16 @@ import java.util.Comparator; import javax.swing.Icon; import docking.widgets.tree.GTreeNode; +import generic.theme.GIcon; import ghidra.program.model.listing.Library; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.*; -import resources.ResourceManager; public class LibrarySymbolNode extends SymbolNode { private static final String ORDINAL_PREFIX = "Ordinal_"; - private static Icon LIBRARY_ICON = ResourceManager.loadImage("images/package.png"); + private static final Icon LIBRARY_ICON = new GIcon("icon.plugin.symboltree.node.library"); private static Comparator CHILD_COMPARATOR = (o1, o2) -> { SymbolNode symbolNode1 = (SymbolNode) o1; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/LocalVariableSymbolNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/LocalVariableSymbolNode.java index ea605ef8d1..41ba219b28 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/LocalVariableSymbolNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/LocalVariableSymbolNode.java @@ -17,14 +17,14 @@ package ghidra.app.plugin.core.symboltree.nodes; import javax.swing.Icon; +import generic.theme.GIcon; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.Symbol; -import resources.ResourceManager; public class LocalVariableSymbolNode extends SymbolNode { public static final Icon LOCAL_VARIABLE_ICON = - ResourceManager.loadImage("images/LocalVariable.gif"); + new GIcon("icon.plugin.symboltree.node.local.variable"); LocalVariableSymbolNode(Program program, Symbol symbol) { super(program, symbol); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/NamespaceCategoryNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/NamespaceCategoryNode.java index 6df89802cd..3a6259efd5 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/NamespaceCategoryNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/NamespaceCategoryNode.java @@ -19,18 +19,18 @@ import java.awt.datatransfer.DataFlavor; import javax.swing.Icon; +import generic.theme.GIcon; import ghidra.app.plugin.core.symboltree.SymbolCategory; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.Namespace; import ghidra.program.model.symbol.Symbol; -import resources.ResourceManager; public class NamespaceCategoryNode extends SymbolCategoryNode { public static final Icon OPEN_FOLDER_NAMESPACES_ICON = - ResourceManager.loadImage("images/openFolderNamespaces.png"); + new GIcon("icon.plugin.symboltree.node.category.namespace.open"); public static final Icon CLOSED_FOLDER_NAMESPACES_ICON = - ResourceManager.loadImage("images/closedFolderNamespaces.png"); + new GIcon("icon.plugin.symboltree.node.category.namespace.closed"); NamespaceCategoryNode(Program program) { super(SymbolCategory.NAMESPACE_CATEGORY, program); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/NamespaceSymbolNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/NamespaceSymbolNode.java index 427f5d7630..ff17bc325e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/NamespaceSymbolNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/NamespaceSymbolNode.java @@ -18,8 +18,8 @@ package ghidra.app.plugin.core.symboltree.nodes; import java.awt.datatransfer.DataFlavor; import javax.swing.Icon; -import javax.swing.ImageIcon; +import generic.theme.GIcon; import ghidra.app.util.SelectionTransferData; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.Namespace; @@ -32,9 +32,9 @@ public class NamespaceSymbolNode extends SymbolNode { static final DataFlavor GLOBAL_DATA_FLAVOR = new SymbolTreeDataFlavor("Symbol Tree Data Flavor - Global Namespaces"); - public static final Icon NAMESPACE_ICON = ResourceManager.loadImage("images/Namespace.gif"); + public static final Icon NAMESPACE_ICON = new GIcon("icon.plugin.symboltree.node.namespace"); public static final Icon DISABLED_NAMESPACE_ICON = - ResourceManager.getDisabledIcon((ImageIcon) NAMESPACE_ICON); + ResourceManager.getDisabledIcon(NAMESPACE_ICON); NamespaceSymbolNode(Program program, Symbol symbol) { super(program, symbol); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/OrganizationNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/OrganizationNode.java index d70c1b2c4f..c5a9cfb6ae 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/OrganizationNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/OrganizationNode.java @@ -23,13 +23,13 @@ import javax.swing.Icon; import docking.widgets.tree.GTree; import docking.widgets.tree.GTreeNode; import docking.widgets.tree.tasks.GTreeCollapseAllTask; +import generic.theme.GIcon; import ghidra.program.model.symbol.Namespace; import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; /** - * These nodes are used to organize large lists of nodes into a hierachical structure based on + * These nodes are used to organize large lists of nodes into a hierarchical structure based on * the node names. See {@link #organize(List, int, TaskMonitor)} for details on * how this class works. */ @@ -39,9 +39,9 @@ public class OrganizationNode extends SymbolTreeNode { static final Comparator COMPARATOR = new OrganizationNodeComparator(); private static Icon OPEN_FOLDER_GROUP_ICON = - ResourceManager.loadImage("images/openFolderGroup.png"); + new GIcon("icon.plugin.symboltree.node.organization.open"); private static Icon CLOSED_FOLDER_GROUP_ICON = - ResourceManager.loadImage("images/closedFolderGroup.png"); + new GIcon("icon.plugin.symboltree.node.organization.closed"); private String baseName; private int totalCount; @@ -370,7 +370,7 @@ public class OrganizationNode extends SymbolTreeNode { for (GTreeNode node : nodeList) { monitor.checkCanceled(); String prefix = getPrefix(node, uniquePrefixSize); - List list = map.computeIfAbsent(prefix, k -> new ArrayList()); + List list = map.computeIfAbsent(prefix, k -> new ArrayList<>()); list.add(node); } if (map.size() == 1) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ParameterSymbolNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ParameterSymbolNode.java index 56ec805771..43799aa56a 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ParameterSymbolNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/ParameterSymbolNode.java @@ -17,13 +17,13 @@ package ghidra.app.plugin.core.symboltree.nodes; import javax.swing.Icon; +import generic.theme.GIcon; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.Symbol; -import resources.ResourceManager; public class ParameterSymbolNode extends SymbolNode { - public static final Icon PARAMETER_ICON = ResourceManager.loadImage("images/Parameter.gif"); + public static final Icon PARAMETER_ICON = new GIcon("icon.plugin.symboltree.node.parameter"); ParameterSymbolNode(Program program, Symbol symbol) { super(program, symbol); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/SymbolTreeRootNode.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/SymbolTreeRootNode.java index 778b0621ac..245d5520b5 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/SymbolTreeRootNode.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symboltree/nodes/SymbolTreeRootNode.java @@ -23,15 +23,15 @@ import java.util.*; import javax.swing.Icon; import docking.widgets.tree.GTreeNode; +import generic.theme.GIcon; import ghidra.app.plugin.core.symboltree.SymbolCategory; import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.Symbol; import ghidra.program.model.symbol.SymbolType; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; public class SymbolTreeRootNode extends SymbolCategoryNode { - private static Icon GLOBAL_ICON = ResourceManager.loadImage("images/bullet_green.png"); + private static Icon GLOBAL_ICON = new GIcon("icon.plugin.symboltree.node.root"); private final String name; public SymbolTreeRootNode() { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/FilterDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/FilterDialog.java index cb83b9219c..647576b7e8 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/FilterDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/FilterDialog.java @@ -33,7 +33,7 @@ import ghidra.app.util.HelpTopics; import ghidra.framework.plugintool.PluginTool; import ghidra.util.*; import ghidra.util.layout.*; -import resources.ResourceManager; +import resources.Icons; public class FilterDialog extends DialogComponentProvider { private NewSymbolFilter filter; @@ -162,7 +162,7 @@ public class FilterDialog extends DialogComponentProvider { advancedPanel = new JPanel(new BorderLayout()); JPanel infoPanel = new JPanel(new HorizontalLayout(20)); - Icon icon = ResourceManager.loadImage("images/information.png"); + Icon icon = Icons.INFO_ICON; infoPanel.add(new GIconLabel(icon)); infoPanel.add(new GHtmlLabel( diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/ReferenceProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/ReferenceProvider.java index 4a7e8a8f71..0258e1a0d1 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/ReferenceProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/ReferenceProvider.java @@ -17,11 +17,12 @@ package ghidra.app.plugin.core.symtable; import java.awt.event.MouseEvent; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.JComponent; import docking.ActionContext; import docking.WindowPosition; +import generic.theme.GIcon; import ghidra.app.context.ProgramActionContext; import ghidra.app.util.SymbolInspector; import ghidra.framework.plugintool.ComponentProviderAdapter; @@ -30,11 +31,10 @@ import ghidra.program.model.symbol.Symbol; import ghidra.util.HelpLocation; import ghidra.util.Swing; import ghidra.util.table.GhidraTable; -import resources.ResourceManager; class ReferenceProvider extends ComponentProviderAdapter { - private static final ImageIcon ICON = ResourceManager.loadImage("images/table_go.png"); + private static final Icon ICON = new GIcon("icon.plugin.symboltable.referencetable.provider"); private SymbolTablePlugin plugin; private SymbolReferenceModel referenceKeyModel; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/SymbolProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/SymbolProvider.java index 17fc15e28a..32f100fd4e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/SymbolProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/SymbolProvider.java @@ -19,12 +19,13 @@ import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.util.List; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.JComponent; import docking.ActionContext; import docking.DockingUtils; import docking.action.KeyBindingData; +import generic.theme.GIcon; import ghidra.app.context.ProgramActionContext; import ghidra.app.context.ProgramSymbolActionContext; import ghidra.app.util.SymbolInspector; @@ -34,11 +35,10 @@ import ghidra.program.model.listing.Program; import ghidra.program.model.symbol.Symbol; import ghidra.util.HelpLocation; import ghidra.util.table.GhidraTable; -import resources.ResourceManager; class SymbolProvider extends ComponentProviderAdapter { - private static final ImageIcon ICON = ResourceManager.loadImage("images/table.png"); + private static final Icon ICON = new GIcon("icon.plugin.symboltable.provider"); private SymbolTablePlugin plugin; private SymbolRenderer renderer; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/SymbolTablePlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/SymbolTablePlugin.java index c210b6675a..c61214ee47 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/SymbolTablePlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/symtable/SymbolTablePlugin.java @@ -22,6 +22,7 @@ import javax.swing.Icon; import docking.ActionContext; import docking.action.*; +import generic.theme.GIcon; import ghidra.app.CorePluginPackage; import ghidra.app.events.ProgramActivatedPluginEvent; import ghidra.app.events.ProgramLocationPluginEvent; @@ -48,7 +49,6 @@ import ghidra.util.task.TaskMonitor; import ghidra.util.worker.Job; import ghidra.util.worker.Worker; import resources.Icons; -import resources.ResourceManager; /** * Plugin to display the symbol table for a program. @@ -343,7 +343,7 @@ public class SymbolTablePlugin extends Plugin implements DomainObjectListener { refProvider.setCurrentSymbol(symProvider.getCurrentSymbol()); } }; - Icon icon = ResourceManager.loadImage("images/table_go.png"); + Icon icon = new GIcon("icon.plugin.symboltable.referencetable.provider"); openRefsAction.setPopupMenuData( new MenuData(new String[] { "Symbol References" }, icon, popupGroup)); openRefsAction.setToolBarData(new ToolBarData(icon)); @@ -369,7 +369,7 @@ public class SymbolTablePlugin extends Plugin implements DomainObjectListener { } }; - icon = ResourceManager.loadImage("images/edit-delete.png"); + icon = Icons.DELETE_ICON; String deleteGroup = "3"; // put in a group after the others deleteAction.setPopupMenuData(new MenuData(new String[] { "Delete" }, icon, deleteGroup)); deleteAction.setToolBarData(new ToolBarData(icon)); @@ -444,7 +444,7 @@ public class SymbolTablePlugin extends Plugin implements DomainObjectListener { referencesToAction.setDescription("References To"); referencesToAction.setSelected(true); referencesToAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/references_to.gif"), null)); + new ToolBarData(new GIcon("icon.plugin.symboltable.references.to"), null)); tool.addLocalAction(refProvider, referencesToAction); @@ -467,7 +467,8 @@ public class SymbolTablePlugin extends Plugin implements DomainObjectListener { instructionsFromAction.setDescription("Instructions From"); instructionsFromAction.setSelected(false); instructionsFromAction - .setToolBarData(new ToolBarData(ResourceManager.loadImage("images/I.gif"), null)); + .setToolBarData( + new ToolBarData(new GIcon("icon.plugin.symboltable.instructions.from"), null)); tool.addLocalAction(refProvider, instructionsFromAction); @@ -490,7 +491,8 @@ public class SymbolTablePlugin extends Plugin implements DomainObjectListener { dataFromAction.setDescription("Data From"); dataFromAction.setSelected(false); dataFromAction - .setToolBarData(new ToolBarData(ResourceManager.loadImage("images/D.gif"), null)); + .setToolBarData( + new ToolBarData(new GIcon("icon.plugin.symboltable.data.from"), null)); tool.addLocalAction(refProvider, dataFromAction); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/table/TableComponentProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/table/TableComponentProvider.java index efd59a9889..495df3b130 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/table/TableComponentProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/table/TableComponentProvider.java @@ -32,6 +32,7 @@ import docking.action.MenuData; import docking.widgets.table.AbstractSortedTableModel; import docking.widgets.table.GTable; import docking.widgets.table.threaded.GThreadedTablePanel; +import generic.theme.GIcon; import ghidra.app.nav.Navigatable; import ghidra.app.nav.NavigatableRemovalListener; import ghidra.app.services.*; @@ -45,7 +46,6 @@ import ghidra.util.HelpLocation; import ghidra.util.table.*; import ghidra.util.table.actions.DeleteTableRowAction; import ghidra.util.table.actions.MakeProgramSelectionAction; -import resources.ResourceManager; public class TableComponentProvider extends ComponentProviderAdapter implements TableModelListener, NavigatableRemovalListener { @@ -78,7 +78,7 @@ public class TableComponentProvider extends ComponentProviderAdapter TableComponentProvider(TableServicePlugin plugin, String title, String name, GhidraProgramTableModel model, String programName, GoToService gotoService, - MarkerService markerService, Color markerColor, ImageIcon markerIcon, + MarkerService markerService, Color markerColor, Icon markerIcon, String windowSubMenu, Navigatable navigatable) { super(plugin.getTool(), name, plugin.getName()); @@ -89,7 +89,7 @@ public class TableComponentProvider extends ComponentProviderAdapter this.programName = programName; this.markerService = markerService; this.windowSubMenu = windowSubMenu; - setIcon(ResourceManager.loadImage("images/magnifier.png")); + setIcon(new GIcon("icon.plugin.table.service")); setTransient(); setTitle(title); setHelpLocation(helpLoc); @@ -186,7 +186,7 @@ public class TableComponentProvider extends ComponentProviderAdapter externalGotoAction.setDescription("Go to an external location"); externalGotoAction.setEnabled(false); - Icon icon = ResourceManager.loadImage("images/searchm_obj.gif"); + Icon icon = new GIcon("icon.plugin.table.service.marker"); externalGotoAction.setPopupMenuData( new MenuData(new String[] { "GoTo External Location" }, icon, null)); externalGotoAction.setHelpLocation(new HelpLocation(HelpTopics.SEARCH, "Navigation")); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/table/TableServicePlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/table/TableServicePlugin.java index 04fb38fa79..a3d0d9580e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/table/TableServicePlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/table/TableServicePlugin.java @@ -18,7 +18,7 @@ package ghidra.app.plugin.core.table; import java.awt.Color; import java.util.*; -import javax.swing.ImageIcon; +import javax.swing.Icon; import ghidra.app.CorePluginPackage; import ghidra.app.events.ProgramClosedPluginEvent; @@ -153,7 +153,7 @@ public class TableServicePlugin extends ProgramPlugin @Override public TableComponentProvider showTableWithMarkers(String title, String tableTypeName, - GhidraProgramTableModel model, Color markerColor, ImageIcon markerIcon, + GhidraProgramTableModel model, Color markerColor, Icon markerIcon, String windowSubMenu, Navigatable navigatable) { GoToService gotoService = tool.getService(GoToService.class); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/totd/TipOfTheDayDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/totd/TipOfTheDayDialog.java index 6ad8ce561e..a1fde10264 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/totd/TipOfTheDayDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/totd/TipOfTheDayDialog.java @@ -25,9 +25,9 @@ import docking.DialogComponentProvider; import docking.DockingWindowManager; import docking.widgets.checkbox.GCheckBox; import docking.widgets.label.GLabel; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors; import generic.theme.GThemeDefaults.Colors.Java; -import resources.ResourceManager; class TipOfTheDayDialog extends DialogComponentProvider { private static final int _24_HOURS = 86400000; @@ -49,7 +49,7 @@ class TipOfTheDayDialog extends DialogComponentProvider { tips.add("Could not find any tips!"); } - ImageIcon tipIcon = ResourceManager.loadImage("images/help-hint.png"); + Icon tipIcon = new GIcon("icon.plugin.totd.provider"); tipArea = new JTextArea(4, 30); tipArea.setEditable(false); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DbViewerProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DbViewerProvider.java index d39a63b7d8..7b837bd9f8 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DbViewerProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DbViewerProvider.java @@ -19,15 +19,13 @@ import javax.swing.JComponent; import db.DBHandle; import docking.WindowPosition; +import generic.theme.GIcon; import ghidra.framework.plugintool.ComponentProviderAdapter; import ghidra.framework.plugintool.Plugin; import ghidra.util.HelpLocation; -import resources.ResourceManager; public class DbViewerProvider extends ComponentProviderAdapter { - private static final String ICON_IMAGE = "images/zoom.png"; - private DBHandle dbh; private String dbName; private DbViewerComponent comp; @@ -35,7 +33,7 @@ public class DbViewerProvider extends ComponentProviderAdapter { public DbViewerProvider(Plugin plugin) { super(plugin.getTool(), "Database Viewer", plugin.getName()); - setIcon(ResourceManager.loadImage(ICON_IMAGE)); + setIcon(new GIcon("icon.plugin.debug.dbviewer.provider")); setDefaultWindowPosition(WindowPosition.BOTTOM); setHelpLocation(new HelpLocation(plugin.getName(), "DbViewer")); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DomainEventComponentProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DomainEventComponentProvider.java index 4c07160b56..e51804fe0b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DomainEventComponentProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DomainEventComponentProvider.java @@ -25,13 +25,14 @@ import docking.ActionContext; import docking.WindowPosition; import docking.action.DockingAction; import docking.action.ToolBarData; +import generic.theme.GIcon; import ghidra.framework.plugintool.ComponentProviderAdapter; import ghidra.framework.plugintool.PluginTool; -import resources.ResourceManager; +import resources.Icons; public class DomainEventComponentProvider extends ComponentProviderAdapter { final static int LIMIT = 200; - private final static ImageIcon ICON = ResourceManager.loadImage("images/monitor.png"); + private final static Icon ICON = new GIcon("icon.plugin.debug.domaineventviewer.provider"); private JTextArea textArea; private JScrollPane scrollPane; @@ -84,7 +85,7 @@ public class DomainEventComponentProvider extends ComponentProviderAdapter { clearAction.markHelpUnnecessary(); clearAction.setEnabled(true); - ImageIcon icon = ResourceManager.loadImage("images/erase16.png"); + Icon icon = Icons.CLEAR_ICON; clearAction.setToolBarData(new ToolBarData(icon)); addLocalAction(clearAction); } @@ -109,8 +110,7 @@ public class DomainEventComponentProvider extends ComponentProviderAdapter { } textArea.setText(""); int length = 0; - for (int i = 0; i < eventList.size(); i++) { - String str = eventList.get(i); + for (String str : eventList) { textArea.append(str); length += str.length(); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DomainFolderChangesDisplayComponentProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DomainFolderChangesDisplayComponentProvider.java index ccaafbccb2..51d4531b8f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DomainFolderChangesDisplayComponentProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/DomainFolderChangesDisplayComponentProvider.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,20 +15,19 @@ */ package ghidra.app.plugin.debug; -import ghidra.framework.plugintool.ComponentProviderAdapter; -import ghidra.framework.plugintool.PluginTool; -import ghidra.util.Msg; - import java.awt.Point; import java.util.Date; import javax.swing.*; -import resources.ResourceManager; import docking.ActionContext; import docking.WindowPosition; import docking.action.DockingAction; import docking.action.ToolBarData; +import ghidra.framework.plugintool.ComponentProviderAdapter; +import ghidra.framework.plugintool.PluginTool; +import ghidra.util.Msg; +import resources.Icons; public class DomainFolderChangesDisplayComponentProvider extends ComponentProviderAdapter { private JTextArea textArea; @@ -72,7 +70,7 @@ public class DomainFolderChangesDisplayComponentProvider extends ComponentProvid } }; clearAction.setEnabled(true); - ImageIcon icon = ResourceManager.loadImage("images/erase16.png"); + Icon icon = Icons.CLEAR_ICON; clearAction.setToolBarData(new ToolBarData(icon)); addLocalAction(clearAction); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/EventDisplayComponentProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/EventDisplayComponentProvider.java index c04a547481..3b33ff1f4e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/EventDisplayComponentProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/EventDisplayComponentProvider.java @@ -27,7 +27,7 @@ import docking.action.ToolBarData; import ghidra.app.events.ProgramLocationPluginEvent; import ghidra.framework.plugintool.*; import ghidra.program.util.ProgramLocation; -import resources.ResourceManager; +import resources.Icons; public class EventDisplayComponentProvider extends ComponentProviderAdapter { private JTextArea textArea; @@ -82,7 +82,7 @@ public class EventDisplayComponentProvider extends ComponentProviderAdapter { clearAction.markHelpUnnecessary(); clearAction.setEnabled(true); - ImageIcon icon = ResourceManager.loadImage("images/erase16.png"); + Icon icon = Icons.CLEAR_ICON; clearAction.setToolBarData(new ToolBarData(icon)); addLocalAction(clearAction); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/propertymanager/PropertyManagerPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/propertymanager/PropertyManagerPlugin.java index 32bb077f4c..1c9d8fb6ed 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/propertymanager/PropertyManagerPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/propertymanager/PropertyManagerPlugin.java @@ -15,9 +15,10 @@ */ package ghidra.app.plugin.debug.propertymanager; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.Timer; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors.Palette; import ghidra.app.CorePluginPackage; import ghidra.app.plugin.PluginCategoryNames; @@ -32,7 +33,6 @@ import ghidra.program.model.address.Address; import ghidra.program.model.address.AddressSetView; import ghidra.program.model.listing.Program; import ghidra.program.util.*; -import resources.ResourceManager; /** * PropertyManagerPlugin @@ -51,7 +51,7 @@ import resources.ResourceManager; //@formatter:on public class PropertyManagerPlugin extends ProgramPlugin implements DomainObjectListener { - private static final ImageIcon propIcon = ResourceManager.loadImage("images/searchm_pink.gif"); + private static final Icon MARKER_ICON = new GIcon("icon.plugin.debug.propertymanager.marker"); final static String DISPLAY_ACTION_NAME = "Display Property Viewer"; final static String PROPERTY_MARKER_NAME = "Property Locations"; @@ -67,9 +67,6 @@ public class PropertyManagerPlugin extends ProgramPlugin implements DomainObject propertyViewProvider = new PropertyManagerProvider(this); } - /** - * @see ghidra.framework.plugintool.Plugin#init() - */ @Override protected void init() { @@ -83,10 +80,6 @@ public class PropertyManagerPlugin extends ProgramPlugin implements DomainObject updateTimer.setRepeats(false); } - /* - * (non-Javadoc) - * @see ghidra.framework.model.DomainObjectListener#domainObjectChanged(ghidra.framework.model.DomainObjectChangedEvent) - */ @Override public void domainObjectChanged(DomainObjectChangedEvent ev) { if (propertyViewProvider == null || !propertyViewProvider.isVisible()) { @@ -161,21 +154,15 @@ public class PropertyManagerPlugin extends ProgramPlugin implements DomainObject } } - /** - * Initialize search marker manager - */ MarkerSet getSearchMarks() { if (searchMarks == null && currentProgram != null) { searchMarks = markerService.createPointMarker(PROPERTY_MARKER_NAME, "Locations where properties are set", currentProgram, - MarkerService.PROPERTY_PRIORITY, true, true, false, Palette.PINK, propIcon); + MarkerService.PROPERTY_PRIORITY, true, true, false, Palette.PINK, MARKER_ICON); } return searchMarks; } - /** - * Dispose search marker manager - */ void disposeSearchMarks() { disposeSearchMarks(currentProgram); } @@ -193,9 +180,6 @@ public class PropertyManagerPlugin extends ProgramPlugin implements DomainObject } } - /** - * @see ghidra.framework.plugintool.Plugin#dispose() - */ @Override public void dispose() { super.dispose(); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/propertymanager/PropertyManagerProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/propertymanager/PropertyManagerProvider.java index 8ace64dde9..221e5195da 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/propertymanager/PropertyManagerProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/propertymanager/PropertyManagerProvider.java @@ -25,6 +25,7 @@ import javax.swing.event.TableModelListener; import docking.ActionContext; import docking.action.DockingAction; import docking.action.MenuData; +import generic.theme.GIcon; import ghidra.app.services.MarkerSet; import ghidra.framework.cmd.Command; import ghidra.framework.plugintool.ComponentProviderAdapter; @@ -32,15 +33,13 @@ import ghidra.program.model.address.AddressSetView; import ghidra.program.model.listing.*; import ghidra.util.HelpLocation; import ghidra.util.table.GhidraTable; -import resources.ResourceManager; /** * PropertyManagerDialog */ public class PropertyManagerProvider extends ComponentProviderAdapter { - protected static final ImageIcon ICON = - ResourceManager.loadImage("images/document-properties.png"); + protected static final Icon ICON = new GIcon("icon.plugin.debug.propertymanager.provider"); protected static final String DELETE_PROPERTIES_ACTION_NAME = "Delete Properties"; @@ -140,7 +139,6 @@ public class PropertyManagerProvider extends ComponentProviderAdapter { ListSelectionModel tlsm = table.getSelectionModel(); selectionListener = e -> { - ListSelectionModel lsm = (ListSelectionModel) e.getSource(); refreshMarkers(table.getSelectedRow()); }; tlsm.addListSelectionListener(selectionListener); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddressSetEditorPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddressSetEditorPanel.java index 52b0d42825..3679818faf 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddressSetEditorPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/AddressSetEditorPanel.java @@ -16,8 +16,6 @@ package ghidra.app.util; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.util.HashSet; import java.util.List; @@ -25,13 +23,14 @@ import javax.swing.*; import javax.swing.event.*; import docking.widgets.label.GDLabel; +import generic.theme.GIcon; import ghidra.program.model.address.*; import ghidra.util.layout.MiddleLayout; -import resources.ResourceManager; +import resources.Icons; public class AddressSetEditorPanel extends JPanel { - private static Icon ADD_ICON = ResourceManager.loadImage("images/Plus.png"); - private static Icon SUBTRACT_ICON = ResourceManager.loadImage("images/list-remove.png"); + private static Icon ADD_ICON = Icons.ADD_ICON; + private static Icon SUBTRACT_ICON = new GIcon("icon.subtract"); private AddressInput minAddressField; private AddressInput maxAddressField; @@ -68,12 +67,7 @@ public class AddressSetEditorPanel extends JPanel { minAddressPanel.add(minLabel, BorderLayout.WEST); minAddressField = new AddressInput(); minAddressField.setAddressFactory(addressFactory); - ChangeListener listener = new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - validateAddRemoveButton(); - } - }; + ChangeListener listener = e -> validateAddRemoveButton(); minAddressField.addChangeListener(listener); minAddressPanel.add(minAddressField, BorderLayout.CENTER); @@ -88,20 +82,10 @@ public class AddressSetEditorPanel extends JPanel { maxAddressPanel.add(maxAddressField, BorderLayout.CENTER); maxAddressPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); addRangeButton = new JButton(ADD_ICON); - addRangeButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - addRange(); - } - }); + addRangeButton.addActionListener(e -> addRange()); addRangeButton.setToolTipText("Add the range to the set of included addresses"); subtractRangeButton = new JButton(SUBTRACT_ICON); - subtractRangeButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - subtractRange(); - } - }); + subtractRangeButton.addActionListener(e -> subtractRange()); subtractRangeButton.setToolTipText("Remove the range from the set of included addresses"); JPanel addressPanel = new JPanel(); @@ -133,12 +117,7 @@ public class AddressSetEditorPanel extends JPanel { bottomButtons.setLayout(new MiddleLayout()); removeRangeButton = new JButton("Remove Selected Range(s)"); - removeRangeButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - removeRange(); - } - }); + removeRangeButton.addActionListener(e -> removeRange()); bottomButtons.add(removeRangeButton); return bottomButtons; @@ -149,12 +128,7 @@ public class AddressSetEditorPanel extends JPanel { listModel = new AddressSetListModel(addressSet.toList()); list = new JList<>(listModel); list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - list.getSelectionModel().addListSelectionListener(new ListSelectionListener() { - @Override - public void valueChanged(ListSelectionEvent e) { - validateRemoveButton(); - } - }); + list.getSelectionModel().addListSelectionListener(e -> validateRemoveButton()); JScrollPane scrollPane = new JScrollPane(list); panel.setBorder(BorderFactory.createTitledBorder( BorderFactory.createEmptyBorder(10, 10, 10, 10), "Included Address Ranges:")); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/FixedBitSizeValueField.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/FixedBitSizeValueField.java index a3ee981ea1..39efb19014 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/FixedBitSizeValueField.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bean/FixedBitSizeValueField.java @@ -15,12 +15,11 @@ */ package ghidra.app.util.bean; - import java.awt.*; -import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.math.BigInteger; import java.util.ArrayList; +import java.util.List; import javax.swing.*; import javax.swing.event.ChangeEvent; @@ -28,14 +27,12 @@ import javax.swing.event.ChangeListener; import javax.swing.text.*; import docking.widgets.SmallBorderButton; -import resources.ResourceManager; +import generic.theme.GIcon; - -/** - * - */ public class FixedBitSizeValueField extends JPanel { - private static final ImageIcon DROP_DOWN_MENU_ICON = ResourceManager.loadImage("images/menu16.gif"); + + private static final Icon DROP_DOWN_MENU_ICON = new GIcon("icon.base.app.fixed.bit.size.field"); + protected JTextField valueField; protected JButton menuButton; private PlainDocument doc; @@ -49,32 +46,27 @@ public class FixedBitSizeValueField extends JPanel { private BigInteger maxValue; private BigInteger minValue; protected JPopupMenu popupMenu; - protected java.util.List menuItems = new ArrayList<>(); - protected java.util.List listeners = new ArrayList<>(); + protected List menuItems = new ArrayList<>(); + protected List listeners = new ArrayList<>(); public FixedBitSizeValueField(int bitSize, boolean includeFormatButton, boolean leftJustify) { setLayout(new BorderLayout()); valueField = new JTextField(); if (includeFormatButton) { JPanel buttonPanel = new JPanel(new BorderLayout()); - menuButton = new SmallBorderButton(" hex",DROP_DOWN_MENU_ICON); + menuButton = new SmallBorderButton(" hex", DROP_DOWN_MENU_ICON); menuButton.setHorizontalTextPosition(SwingConstants.LEADING); - buttonPanel.setBorder(BorderFactory.createEmptyBorder(0,2,0,3)); + buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 3)); buttonPanel.add(menuButton, BorderLayout.EAST); add(buttonPanel, BorderLayout.EAST); menuButton.setFocusable(false); - menuButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - showPopup(); - } - }); + menuButton.addActionListener(e -> showPopup()); } add(valueField, BorderLayout.CENTER); Font f2 = new Font("monospaced", Font.PLAIN, 14); valueField.setFont(f2); - valueField.setMargin(new Insets(0,2,0,2)); + valueField.setMargin(new Insets(0, 2, 0, 2)); createPopup(); @@ -92,8 +84,8 @@ public class FixedBitSizeValueField extends JPanel { public void setBitSize(int bitSize) { BigInteger b = BigInteger.valueOf(2); - maxSignedValue = b.pow(bitSize-1).subtract(BigInteger.ONE); - minSignedValue = b.pow(bitSize-1).negate(); + maxSignedValue = b.pow(bitSize - 1).subtract(BigInteger.ONE); + minSignedValue = b.pow(bitSize - 1).negate(); maxUnsignedValue = b.pow(bitSize).subtract(BigInteger.ONE); maxValue = signed ? maxSignedValue : maxUnsignedValue; @@ -104,6 +96,7 @@ public class FixedBitSizeValueField extends JPanel { public void addChangeListener(ChangeListener listener) { listeners.add(listener); } + public void removeChangeListener(ChangeListener listener) { listeners.remove(listener); } @@ -128,18 +121,16 @@ public class FixedBitSizeValueField extends JPanel { } return true; } + public void setMinMax(BigInteger min, BigInteger max) { minValue = min; maxValue = max; } protected void createPopup() { - ActionListener actionListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - JCheckBoxMenuItem item = (JCheckBoxMenuItem)e.getSource(); - menuActivated(item); - } + ActionListener actionListener = e -> { + JCheckBoxMenuItem item = (JCheckBoxMenuItem) e.getSource(); + menuActivated(item); }; popupMenu = new JPopupMenu(); @@ -154,16 +145,18 @@ public class FixedBitSizeValueField extends JPanel { menuItem.addActionListener(actionListener); } } + private void showPopup() { Dimension d = getSize(); - popupMenu.show(this, d.width, d.height ); + popupMenu.show(this, d.width, d.height); } + protected void updatePopup() { - for (JCheckBoxMenuItem menuItem : menuItems) { + for (JCheckBoxMenuItem menuItem : menuItems) { menuItem.setSelected(false); } int selectedMenuItem = -1; - switch(radix) { + switch (radix) { case 2: selectedMenuItem = signed ? -1 : 5; break; @@ -181,10 +174,11 @@ public class FixedBitSizeValueField extends JPanel { menuItems.get(selectedMenuItem).setSelected(true); } } + protected void menuActivated(JCheckBoxMenuItem item) { int index = menuItems.indexOf(item); - switch(index) { + switch (index) { case 0: setFormat(16, false); break; @@ -205,6 +199,7 @@ public class FixedBitSizeValueField extends JPanel { break; } } + public void setFormat(int radix, boolean signed) { BigInteger curValue = getValue(valueField.getText()); @@ -243,7 +238,7 @@ public class FixedBitSizeValueField extends JPanel { return; } String buttonText = ""; - switch(radix) { + switch (radix) { case 16: buttonText = " hex"; break; @@ -264,6 +259,7 @@ public class FixedBitSizeValueField extends JPanel { public boolean setValue(BigInteger value) { return setValue(value, false); } + public boolean setValue(BigInteger value, boolean pad) { setText(""); if (value == null) { @@ -282,6 +278,7 @@ public class FixedBitSizeValueField extends JPanel { setText(valueString); return true; } + private String pad(String valueString) { if (signed) { return valueString; @@ -290,7 +287,7 @@ public class FixedBitSizeValueField extends JPanel { if (maxValueString.length() > valueString.length()) { StringBuffer buf = new StringBuffer(); int n = maxValueString.length() - valueString.length(); - for(int i=0;iThreadedTableModel). @@ -65,7 +65,7 @@ public interface TableService { */ public TableComponentProvider showTableWithMarkers(String componentProviderTitle, String tableTypeName, GhidraProgramTableModel model, Color markerColor, - ImageIcon markerIcon, String windowSubMenu, Navigatable navigatable); + Icon markerIcon, String windowSubMenu, Navigatable navigatable); public TableChooserDialog createTableChooserDialog(TableChooserExecutor executor, Program program, String name, Navigatable navigatable); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/LabelFieldFactory.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/LabelFieldFactory.java index 548a05ad9b..e225df955b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/LabelFieldFactory.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/LabelFieldFactory.java @@ -24,6 +24,7 @@ import javax.swing.event.ChangeListener; import docking.widgets.fieldpanel.field.*; import docking.widgets.fieldpanel.support.FieldLocation; +import generic.theme.GIcon; import ghidra.app.util.*; import ghidra.app.util.viewer.format.FieldFormatModel; import ghidra.app.util.viewer.proxy.ProxyObj; @@ -36,9 +37,7 @@ import ghidra.program.util.*; import ghidra.util.HelpLocation; import ghidra.util.exception.AssertException; import resources.MultiIcon; -import resources.ResourceManager; import resources.icons.EmptyIcon; -import resources.icons.TranslateIcon; /** * Generates label Fields. @@ -58,8 +57,8 @@ public class LabelFieldFactory extends FieldFactory { // These icons would normally be static, but can't be because the class searcher loads this // class and it triggers swing access which is not allowed in headless. private Icon EMPTY_ICON = new EmptyIcon(12, 16); - private Icon ANCHOR_ICON = new MultiIcon(EMPTY_ICON, - new TranslateIcon(ResourceManager.loadImage("images/pin.png"), 0, 4)); + private Icon ANCHOR_ICON = + new MultiIcon(EMPTY_ICON, new GIcon("icon.base.util.viewer.fieldfactory.label")); private PropertyEditor namespaceOptionsEditor = new NamespacePropertyEditor(); @@ -75,7 +74,6 @@ public class LabelFieldFactory extends FieldFactory { public LabelFieldFactory() { super(FIELD_NAME); - initIcons(); } /** @@ -103,14 +101,6 @@ public class LabelFieldFactory extends FieldFactory { // Create code unit format and associated options - listen for changes codeUnitFormat = new LabelCodeUnitFormat(fieldOptions); codeUnitFormat.addChangeListener(codeUnitFormatListener); - initIcons(); - } - - private void initIcons() { - EMPTY_ICON = new EmptyIcon(12, 16); - ANCHOR_ICON = new MultiIcon(EMPTY_ICON, - new TranslateIcon(ResourceManager.loadImage("images/pin.png"), 0, 4)); - } private void setupNamespaceOptions(Options fieldOptions) { @@ -198,8 +188,8 @@ public class LabelFieldFactory extends FieldFactory { int nextPos = 0; if (hasOffcuts) { - for (int i = 0; i < offcuts.size(); i++) { - AttributedString as = getAttributedOffsetText(obj, cu, currAddr, offcuts.get(i)); + for (Address offcut : offcuts) { + AttributedString as = getAttributedOffsetText(obj, cu, currAddr, offcut); if (as == null) { as = new AttributedString(EMPTY_ICON, SymbolUtilities.getDynamicOffcutName(currAddr), diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/OpenCloseField.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/OpenCloseField.java index 8297462d28..29557cd47e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/OpenCloseField.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/OpenCloseField.java @@ -17,25 +17,26 @@ package ghidra.app.util.viewer.field; import java.awt.*; -import javax.swing.ImageIcon; import javax.swing.JComponent; import docking.widgets.fieldpanel.internal.FieldBackgroundColorManager; import docking.widgets.fieldpanel.internal.PaintContext; import docking.widgets.fieldpanel.support.*; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors.Palette; import ghidra.app.util.viewer.format.FieldFormatModel; import ghidra.app.util.viewer.proxy.EmptyProxy; import ghidra.app.util.viewer.proxy.ProxyObj; import ghidra.program.model.listing.Data; -import resources.ResourceManager; /** * FactoryField class for displaying the open/close field. */ public class OpenCloseField implements ListingField { - private static final ImageIcon openImage = ResourceManager.loadImage("images/small_minus.png"); - private static final ImageIcon closedImage = ResourceManager.loadImage("images/small_plus.png"); + private static final GIcon OPEN_ICON = + new GIcon("icon.base.util.viewer.fieldfactory.openclose.open"); + private static final GIcon CLOSED_ICON = + new GIcon("icon.base.util.viewer.fieldfactory.openclose.closed"); private FieldFactory factory; private int startX; @@ -43,7 +44,7 @@ public class OpenCloseField implements ListingField { private int fieldWidth; private int heightAbove; private int heightBelow; - private ProxyObj proxy; + private ProxyObj proxy; private boolean isOpen; private int indentLevel; @@ -62,7 +63,7 @@ public class OpenCloseField implements ListingField { * @param width the width of this field. * @param isLast true if the data object is the last subcomponent at its level. */ - public OpenCloseField(FieldFactory factory, ProxyObj proxy, int indentLevel, + public OpenCloseField(FieldFactory factory, ProxyObj proxy, int indentLevel, FontMetrics metrics, int x, int width, boolean isLast) { this.factory = factory; this.proxy = proxy; @@ -87,7 +88,7 @@ public class OpenCloseField implements ListingField { } @Override - public ProxyObj getProxy() { + public ProxyObj getProxy() { if (proxy == null) { return EmptyProxy.EMPTY_PROXY; } @@ -106,7 +107,7 @@ public class OpenCloseField implements ListingField { /** * Sets the yPos relative to the overall layout. - * @param yPos the starting Ypos of the layout row. + * @param yPos the starting Y position of the layout row. * @param heightAbove the heightAbove the alignment line in the layout row. * @param heightBelow the heightBelow the alignment line in the layout row. */ @@ -138,6 +139,7 @@ public class OpenCloseField implements ListingField { /** * Returns the vertical position of this field. + * @return the position */ public int getStartY() { return startY; @@ -168,12 +170,12 @@ public class OpenCloseField implements ListingField { // if (!context.isPrinting()) { if (isOpen) { - g.drawImage(openImage.getImage(), toggleHandleStartX, toggleHandleStartY, - context.getBackground(), null); + g.drawImage(OPEN_ICON.getImageIcon().getImage(), toggleHandleStartX, + toggleHandleStartY, context.getBackground(), null); } else { - g.drawImage(closedImage.getImage(), toggleHandleStartX, toggleHandleStartY, - context.getBackground(), null); + g.drawImage(CLOSED_ICON.getImageIcon().getImage(), toggleHandleStartX, + toggleHandleStartY, context.getBackground(), null); } } @@ -341,6 +343,6 @@ public class OpenCloseField implements ListingField { //================================================================================================== static int getOpenCloseHandleSize() { - return openImage.getIconWidth(); + return OPEN_ICON.getIconWidth(); } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/VariableLocFieldFactory.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/VariableLocFieldFactory.java index aabf716b79..8b8a9e73c9 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/VariableLocFieldFactory.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/VariableLocFieldFactory.java @@ -23,6 +23,7 @@ import javax.swing.Icon; import docking.widgets.fieldpanel.field.*; import docking.widgets.fieldpanel.support.FieldLocation; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors.Messages; import ghidra.app.util.HighlightProvider; import ghidra.app.util.viewer.format.FieldFormatModel; @@ -35,7 +36,6 @@ import ghidra.program.model.listing.Variable; import ghidra.program.util.ProgramLocation; import ghidra.program.util.VariableLocFieldLocation; import resources.MultiIcon; -import resources.ResourceManager; import resources.icons.EmptyIcon; /** @@ -43,12 +43,9 @@ import resources.icons.EmptyIcon; */ public class VariableLocFieldFactory extends AbstractVariableFieldFactory { public static final String FIELD_NAME = "Variable Location"; -// - private static final Icon INVALID_STORAGE_ICON = - ResourceManager.loadImage("images/warning.png"); -// private static final Icon EMPTY_ICON = new EmptyIcon(20, 12); -// private static Icon invalidStorageIcon; + private static final Icon INVALID_STORAGE_ICON = + new GIcon("icon.base.util.viewer.fieldfactory.variable"); /** * Constructor diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingCodeComparisonPanel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingCodeComparisonPanel.java index ddf2519d71..553d6a1db8 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingCodeComparisonPanel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingCodeComparisonPanel.java @@ -35,6 +35,7 @@ import docking.widgets.fieldpanel.internal.FieldPanelCoordinator; import docking.widgets.fieldpanel.listener.FieldLocationListener; import docking.widgets.fieldpanel.support.FieldLocation; import docking.widgets.fieldpanel.support.ViewerPosition; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors.Palette; import ghidra.GhidraOptions; import ghidra.app.nav.Navigatable; @@ -62,7 +63,6 @@ import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; import help.Help; import help.HelpService; -import resources.Icons; import resources.ResourceManager; /** @@ -88,22 +88,24 @@ public class ListingCodeComparisonPanel private static final String DIFF_NAVIGATE_GROUP = "A2_DiffNavigate"; private static final String HOVER_GROUP = "A5_Hovers"; private static final String PROPERTIES_GROUP = "B1_Properties"; - private static final Icon NEXT_DIFF_ICON = - ResourceManager.loadImage("images/view-sort-ascending.png"); - private static final Icon PREVIOUS_DIFF_ICON = - ResourceManager.loadImage("images/view-sort-descending.png"); - private static final Icon bothIcon = ResourceManager.loadImage("images/text_list_bullets.png"); - private static final Icon unmatchedIcon = Icons.NAVIGATE_ON_INCOMING_EVENT_ICON; - private static final Icon diffsIcon = - ResourceManager.loadImage("images/table_relationship.png"); + + //@formatter:off + private static final Icon NEXT_DIFF_ICON = new GIcon("icon.base.util.listingcompare.diff.next"); + private static final Icon PREVIOUS_DIFF_ICON = new GIcon("icon.base.util.listingcompare.previous.next"); + private static final Icon BOTH_VIEWS_ICON = new GIcon("icon.base.util.listingcompare.area.markers.all"); + private static final Icon UNMATCHED_ICON = new GIcon("icon.base.util.listingcompare.area.markers.unmatched"); + private static final Icon DIFF_ICON = new GIcon("icon.base.util.listingcompare.area.markers.diff"); + private static final Icon CURSOR_LOC_ICON = new GIcon("icon.base.util.listingcompare.cursor"); + //@formatter:on + + private static final Icon HOVER_ON_ICON = new GIcon("icon.base.util.listingcompare.hover.off"); + private static final Icon HOVER_OFF_ICON = ResourceManager.loadImage("images/hoverOff.gif"); + private static final String ALL_AREA_MARKERS = "All Area Markers"; private static final String UNMATCHED_AREA_MARKERS = "Unmatched Area Markers"; private static final String DIFF_AREA_MARKERS = "Diff Area Markers"; private String nextPreviousAreaType; - private static final Icon HOVER_ON_ICON = ResourceManager.loadImage("images/hoverOn.gif"); - private static final Icon HOVER_OFF_ICON = ResourceManager.loadImage("images/hoverOff.gif"); - private ListingPanel[] listingPanels = new ListingPanel[2]; private ListingDiff listingDiff; private ListingDiffActionManager diffActionManager; @@ -119,8 +121,6 @@ public class ListingCodeComparisonPanel private MarkerSet[] diffMarkers = new MarkerSet[2]; private MarkerSet[] currentCursorMarkers = new MarkerSet[2]; private static final Color CURSOR_LINE_COLOR = GhidraOptions.DEFAULT_CURSOR_LINE_COLOR; - private ImageIcon CURSOR_LOC_ICON = - ResourceManager.loadImage("images/cursor_arrow_flipped.gif"); private Color cursorHighlightColor; private boolean isShowingEntireListing; private boolean isSideBySide = true; @@ -666,7 +666,7 @@ public class ListingCodeComparisonPanel public NextPreviousAreaMarkerAction(String owner) { super("Dual Listing Next/Previous Area Marker", owner); - ToolBarData toolBarData = new ToolBarData(diffsIcon, DIFF_NAVIGATE_GROUP); + ToolBarData toolBarData = new ToolBarData(DIFF_ICON, DIFF_NAVIGATE_GROUP); setToolBarData(toolBarData); HelpLocation helpLocation = @@ -675,13 +675,13 @@ public class ListingCodeComparisonPanel setDescription("Set Navigate Next/Previous Area Marker options"); ActionState allAreaMarkers = - new ActionState<>(ALL_AREA_MARKERS, bothIcon, ALL_AREA_MARKERS); + new ActionState<>(ALL_AREA_MARKERS, BOTH_VIEWS_ICON, ALL_AREA_MARKERS); allAreaMarkers.setHelpLocation(helpLocation); ActionState unmatchedAreaMarkers = - new ActionState<>(UNMATCHED_AREA_MARKERS, unmatchedIcon, UNMATCHED_AREA_MARKERS); + new ActionState<>(UNMATCHED_AREA_MARKERS, UNMATCHED_ICON, UNMATCHED_AREA_MARKERS); unmatchedAreaMarkers.setHelpLocation(helpLocation); ActionState diffAreaMarkers = - new ActionState<>(DIFF_AREA_MARKERS, diffsIcon, DIFF_AREA_MARKERS); + new ActionState<>(DIFF_AREA_MARKERS, DIFF_ICON, DIFF_AREA_MARKERS); diffAreaMarkers.setHelpLocation(helpLocation); addActionState(allAreaMarkers); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingComparisonProvider.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingComparisonProvider.java index eee56d3eaa..1d37b0f2e4 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingComparisonProvider.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingComparisonProvider.java @@ -17,11 +17,11 @@ package ghidra.app.util.viewer.listingpanel; import javax.swing.Icon; +import generic.theme.GIcon; import ghidra.framework.plugintool.ComponentProviderAdapter; import ghidra.framework.plugintool.PluginTool; import ghidra.program.model.address.AddressSetView; import ghidra.program.model.listing.Program; -import resources.ResourceManager; /** * Provider for displaying a ListingCodeComparisonPanel. @@ -29,7 +29,7 @@ import resources.ResourceManager; public class ListingComparisonProvider extends ComponentProviderAdapter { private static final Icon DUAL_LISTING_ICON = - ResourceManager.loadImage("images/table_relationship.png"); + new GIcon("icon.base.util.listingcompare.provider"); private ListingCodeComparisonPanel dualListingPanel; /** diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingDiffActionManager.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingDiffActionManager.java index 408a2b1be0..749dd7f864 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingDiffActionManager.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/listingpanel/ListingDiffActionManager.java @@ -19,11 +19,11 @@ import javax.swing.Icon; import docking.ActionContext; import docking.action.*; +import generic.theme.GIcon; import ghidra.program.util.ListingDiff; import ghidra.util.HTMLUtilities; import ghidra.util.HelpLocation; import resources.MultiIcon; -import resources.ResourceManager; /** * Manages the actions that control a ListingDiff. @@ -31,15 +31,16 @@ import resources.ResourceManager; public class ListingDiffActionManager { private static final String HELP_TOPIC = "FunctionComparison"; - private static final Icon NOT_ICON = ResourceManager.loadImage("images/no_small.png"); - private static final Icon BYTE_DIFFS_ICON = ResourceManager.loadImage("images/binaryData.gif"); + + //@formatter:off + private static final Icon NOT_ICON = new GIcon("icon.base.util.listingdiff.diffs.not"); + private static final Icon BYTE_DIFFS_ICON = new GIcon("icon.base.util.listingdiff.diffs.byte"); private static final Icon NO_BYTE_DIFFS_ICON = new MultiIcon(BYTE_DIFFS_ICON, NOT_ICON); - private static final Icon DIFF_CONSTANTS_ICON = - ResourceManager.loadImage("images/class.png"); + private static final Icon DIFF_CONSTANTS_ICON = new GIcon("icon.base.util.listingdiff.diffs.constants"); private static final Icon IGNORE_CONSTANTS_ICON = new MultiIcon(DIFF_CONSTANTS_ICON, NOT_ICON); - private static final Icon DIFF_REGISTERS_ICON = - ResourceManager.loadImage("images/registerGroup.png"); + private static final Icon DIFF_REGISTERS_ICON = new GIcon("icon.base.util.listingdiff.diffs.registers"); private static final Icon IGNORE_REGISTERS_ICON = new MultiIcon(DIFF_REGISTERS_ICON, NOT_ICON); + //@formatter:on private static final String ACTION_GROUP = "A4_Diff"; private DockingAction toggleIgnoreByteDiffsAction; @@ -89,8 +90,8 @@ public class ListingDiffActionManager { ToggleIgnoreByteDiffsAction() { super("Toggle Ignore Byte Diffs", "DualListing"); - setDescription(HTMLUtilities.toHTML("If selected, difference highlights should\n" - + "ignore Byte differences.")); + setDescription(HTMLUtilities.toHTML( + "If selected, difference highlights should\n" + "ignore Byte differences.")); setEnabled(true); setPopupMenuData(new MenuData(new String[] { "Ignore Bytes As Differences" }, BYTE_DIFFS_ICON, @@ -117,8 +118,8 @@ public class ListingDiffActionManager { ToggleIgnoreConstantsAction() { super("Toggle Ignore Constants", "DualListing"); - setDescription(HTMLUtilities.toHTML("If selected, difference highlights should\n" - + "ignore operand Constants.")); + setDescription(HTMLUtilities.toHTML( + "If selected, difference highlights should\n" + "ignore operand Constants.")); setEnabled(true); setPopupMenuData(new MenuData( new String[] { "Ignore Operand Constants As Differences" }, @@ -146,8 +147,8 @@ public class ListingDiffActionManager { ToggleIgnoreRegisterNamesAction() { super("Toggle Ignore Register Names", "DualListing"); - setDescription(HTMLUtilities.toHTML("If selected, difference highlights should\n" - + "ignore operand Registers.")); + setDescription(HTMLUtilities.toHTML( + "If selected, difference highlights should\n" + "ignore operand Registers.")); setEnabled(true); setPopupMenuData(new MenuData( new String[] { "Ignore Operand Registers As Differences" }, diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/xml/FunctionsXmlMgr.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/xml/FunctionsXmlMgr.java index fca8dacd82..9592040821 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/xml/FunctionsXmlMgr.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/xml/FunctionsXmlMgr.java @@ -17,8 +17,9 @@ package ghidra.app.util.xml; import java.util.*; -import javax.swing.ImageIcon; +import javax.swing.Icon; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors.Palette; import ghidra.app.cmd.function.*; import ghidra.app.services.DataTypeManagerService; @@ -39,7 +40,6 @@ import ghidra.util.task.TaskMonitor; import ghidra.util.xml.*; import ghidra.xml.XmlElement; import ghidra.xml.XmlPullParser; -import resources.ResourceManager; class FunctionsXmlMgr { public final static String LIB_BOOKMARK_CATEGORY = "Library Identification"; @@ -127,8 +127,7 @@ class FunctionsXmlMgr { BookmarkManager bm = program.getBookmarkManager(); BookmarkType bt = bm.getBookmarkType("IMPORTED"); if (bt == null) { - ImageIcon icon = - ResourceManager.loadImage("images/imported_bookmark.gif"); + Icon icon = new GIcon("icon.base.util.xml.functions.bookmark"); bt = bm.defineType("IMPORTED", icon, Palette.DARK_GRAY, 0); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/framework/main/GhidraApplicationInformationDisplayFactory.java b/Ghidra/Features/Base/src/main/java/ghidra/framework/main/GhidraApplicationInformationDisplayFactory.java index dd073093a0..6503315e3e 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/framework/main/GhidraApplicationInformationDisplayFactory.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/framework/main/GhidraApplicationInformationDisplayFactory.java @@ -19,13 +19,13 @@ import java.awt.Image; import java.util.ArrayList; import java.util.List; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.JComponent; import docking.framework.ApplicationInformationDisplayFactory; +import generic.theme.GIcon; import ghidra.app.util.GenericHelpTopics; import ghidra.util.HelpLocation; -import resources.ResourceManager; public class GhidraApplicationInformationDisplayFactory extends ApplicationInformationDisplayFactory { @@ -33,17 +33,21 @@ public class GhidraApplicationInformationDisplayFactory @Override protected List doGetWindowIcons() { List list = new ArrayList<>(); - list.add(ResourceManager.loadImage("images/GhidraIcon16.png").getImage()); - list.add(ResourceManager.loadImage("images/GhidraIcon24.png").getImage()); - list.add(ResourceManager.loadImage("images/GhidraIcon32.png").getImage()); - list.add(ResourceManager.loadImage("images/GhidraIcon40.png").getImage()); - list.add(ResourceManager.loadImage("images/GhidraIcon48.png").getImage()); - list.add(ResourceManager.loadImage("images/GhidraIcon64.png").getImage()); - list.add(ResourceManager.loadImage("images/GhidraIcon128.png").getImage()); - list.add(ResourceManager.loadImage("images/GhidraIcon256.png").getImage()); + list.add(image("icon.base.application.16")); + list.add(image("icon.base.application.24")); + list.add(image("icon.base.application.32")); + list.add(image("icon.base.application.40")); + list.add(image("icon.base.application.48")); + list.add(image("icon.base.application.64")); + list.add(image("icon.base.application.128")); + list.add(image("icon.base.application.256")); return list; } + private Image image(String id) { + return new GIcon(id).getImageIcon().getImage(); + } + @Override protected String doCreateSplashScreenTitle() { return "Welcome To Ghidra"; @@ -65,8 +69,8 @@ public class GhidraApplicationInformationDisplayFactory } @Override - public ImageIcon doGetHomeIcon() { - return ResourceManager.loadImage("images/GhidraIcon16.png"); + public Icon doGetHomeIcon() { + return new GIcon("icon.base.application.home"); } @Override diff --git a/Ghidra/Features/Base/src/main/java/ghidra/framework/main/datatree/VersionControlDataTypeArchiveUndoCheckoutAction.java b/Ghidra/Features/Base/src/main/java/ghidra/framework/main/datatree/VersionControlDataTypeArchiveUndoCheckoutAction.java index 012820e7e9..81d3e4fcc7 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/framework/main/datatree/VersionControlDataTypeArchiveUndoCheckoutAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/framework/main/datatree/VersionControlDataTypeArchiveUndoCheckoutAction.java @@ -19,9 +19,10 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import javax.swing.ImageIcon; +import javax.swing.Icon; import docking.action.MenuData; +import generic.theme.GIcon; import ghidra.app.plugin.core.datamgr.DataTypeManagerPlugin; import ghidra.app.plugin.core.datamgr.archive.*; import ghidra.app.plugin.core.datamgr.editor.DataTypeEditorManager; @@ -34,13 +35,15 @@ import ghidra.util.exception.AssertException; import ghidra.util.exception.CancelledException; import ghidra.util.task.Task; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; /** * Action to undo checkouts for domain files in the repository. */ public class VersionControlDataTypeArchiveUndoCheckoutAction extends VersionControlAction { + private static final Icon ICON = + new GIcon("icon.base.util.datatree.version.control.archive.dt.checkout.undo"); + private DataTypeManagerPlugin dtmPlugin; private ArchiveProvider archiveProvider; @@ -54,8 +57,8 @@ public class VersionControlDataTypeArchiveUndoCheckoutAction extends VersionCont super("UndoCheckOut", plugin.getName(), plugin.getTool()); this.dtmPlugin = plugin; this.archiveProvider = provider; - ImageIcon icon = ResourceManager.loadImage("images/vcUndoCheckOut.png"); - setPopupMenuData(new MenuData(new String[] { "Undo Checkout" }, icon, GROUP)); + + setPopupMenuData(new MenuData(new String[] { "Undo Checkout" }, ICON, GROUP)); setDescription("Undo checkout"); } @@ -135,7 +138,7 @@ public class VersionControlDataTypeArchiveUndoCheckoutAction extends VersionCont * will be undone. * @param unmodifiedArchivesList the list of unmodified archives * @param modifiedArchivesList the list of archives that have been modified - * @throws CancelledException if canclled + * @throws CancelledException if cancelled */ protected void undoCheckOuts(List unmodifiedArchivesList, List modifiedArchivesList) throws CancelledException { @@ -146,8 +149,7 @@ public class VersionControlDataTypeArchiveUndoCheckoutAction extends VersionCont // Now confirm the modified ones and undo checkout for the ones the user indicates. if (modifiedArchivesList.size() > 0) { UndoActionDialog dialog = new UndoActionDialog("Confirm Undo Checkout", - resources.ResourceManager.loadImage("images/vcUndoCheckOut.png"), "UndoCheckOut", - "checkout", getDomainFileList(modifiedArchivesList)); + ICON, "UndoCheckOut", "checkout", getDomainFileList(modifiedArchivesList)); int actionID = dialog.showDialog(tool); if (actionID != UndoActionDialog.CANCEL) { saveCopy = dialog.saveCopy(); @@ -245,8 +247,7 @@ public class VersionControlDataTypeArchiveUndoCheckoutAction extends VersionCont @Override public void run(TaskMonitor monitor) { try { - for (int i = 0; i < unmodifiedCheckOutsList.size(); i++) { - DomainFileArchive archive = unmodifiedCheckOutsList.get(i); + for (DomainFileArchive archive : unmodifiedCheckOutsList) { DomainFile df = archive.getDomainFile(); if (df.isCheckedOut() && (dtmPlugin != null)) { // TODO Need to close archive here if it is open. diff --git a/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/ImporterDialog.java b/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/ImporterDialog.java index e562d828ba..1d8b0a8367 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/ImporterDialog.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/plugin/importer/ImporterDialog.java @@ -15,14 +15,13 @@ */ package ghidra.plugin.importer; -import java.util.*; -import java.util.List; -import java.util.stream.Collectors; - import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.IOException; +import java.util.*; +import java.util.List; +import java.util.stream.Collectors; import javax.swing.*; import javax.swing.event.DocumentEvent; @@ -38,6 +37,7 @@ import docking.widgets.combobox.GhidraComboBox; import docking.widgets.dialogs.MultiLineMessageDialog; import docking.widgets.label.GLabel; import docking.widgets.list.GListCellRenderer; +import generic.theme.GIcon; import ghidra.app.services.ProgramManager; import ghidra.app.util.*; import ghidra.app.util.bin.ByteProvider; @@ -56,7 +56,6 @@ import ghidra.util.*; import ghidra.util.layout.PairLayout; import ghidra.util.layout.VerticalLayout; import ghidra.util.task.TaskBuilder; -import resources.ResourceManager; /** * Dialog for importing a file into Ghidra as a program. @@ -279,7 +278,7 @@ public class ImporterDialog extends DialogComponentProvider { private Component buildLoaderInfoButton() { JPanel panel = new JPanel(new BorderLayout()); EmptyBorderButton helpButton = - new EmptyBorderButton(ResourceManager.loadImage("images/information.png")); + new EmptyBorderButton(new GIcon("icon.information")); helpButton.setToolTipText("Show list of supported format/loaders"); helpButton.addActionListener(e -> showSupportedImportFormats()); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/plugins/fsbrowser/FileIconService.java b/Ghidra/Features/Base/src/main/java/ghidra/plugins/fsbrowser/FileIconService.java index 1e05252199..3efad605f4 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/plugins/fsbrowser/FileIconService.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/plugins/fsbrowser/FileIconService.java @@ -45,7 +45,7 @@ import util.CollectionUtils; * are resized to be 1/2 the width and height of the icon they are being * overlaid on. *

- * Threadsafe + * Thread safe *

*/ public class FileIconService { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/plugins/fsbrowser/ImageManager.java b/Ghidra/Features/Base/src/main/java/ghidra/plugins/fsbrowser/ImageManager.java index 5e7617106c..3ea17f2af4 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/plugins/fsbrowser/ImageManager.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/plugins/fsbrowser/ImageManager.java @@ -17,8 +17,7 @@ package ghidra.plugins.fsbrowser; import javax.swing.Icon; -import resources.Icons; -import resources.ResourceManager; +import generic.theme.GIcon; /** * Static helper to register and load Icons for the file system browser plugin and its @@ -28,43 +27,39 @@ import resources.ResourceManager; */ public class ImageManager { //@formatter:off - public final static Icon COPY = ResourceManager.loadImage("images/page_copy.png"); - public final static Icon CUT = ResourceManager.loadImage("images/edit-cut.png"); - public final static Icon DELETE = ResourceManager.loadImage("images/page_delete.png"); - public final static Icon FONT = ResourceManager.loadImage("images/text_lowercase.png"); - public final static Icon LOCKED = ResourceManager.loadImage("images/lock.gif"); - public final static Icon NEW = ResourceManager.loadImage("images/page_add.png"); - public final static Icon PASTE = ResourceManager.loadImage("images/page_paste.png"); - public final static Icon REDO = ResourceManager.loadImage("images/redo.png"); - public final static Icon RENAME = ResourceManager.loadImage("images/textfield_rename.png"); - public final static Icon REFRESH = Icons.REFRESH_ICON; - public final static Icon SAVE = ResourceManager.loadImage("images/disk.png"); - public final static Icon SAVE_AS = ResourceManager.loadImage("images/disk_save_as.png"); - public final static Icon UNDO = ResourceManager.loadImage("images/undo.png"); - public final static Icon UNLOCKED = ResourceManager.loadImage("images/unlock.gif"); - public final static Icon CLOSE = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/door.png"); - public final static Icon COLLAPSE_ALL = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/arrow_in.png"); - public final static Icon COMPRESS = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/compress.png"); - public final static Icon CREATE_FIRMWARE = ResourceManager.loadImage("images/media-flash.png"); - public final static Icon EXPAND_ALL = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/arrow_inout.png"); - public final static Icon EXTRACT = ResourceManager.loadImage("images/package_green.png"); - public final static Icon INFO = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/information.png"); - public final static Icon OPEN = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/door_open.png"); - public final static Icon OPEN_AS_BINARY = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/controller.png"); - public final static Icon OPEN_IN_LISTING = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/folder_table.png"); - public final static Icon OPEN_FILE_SYSTEM = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/folder_brick.png"); - public final static Icon PHOTO = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/photo.png"); - public final static Icon VIEW_AS_IMAGE = ResourceManager.loadImage("images/oxygen/16x16/games-config-background.png"); - public final static Icon VIEW_AS_TEXT = ResourceManager.loadImage("images/format-text-bold.png"); - public final static Icon UNKNOWN = ResourceManager.loadImage("images/help-browser.png"); - public final static Icon IPOD = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/ipod.png"); - public final static Icon IPOD_48 = ResourceManager.loadImage("images/oxygen/48x48/multimedia-player-apple-ipod.png"); - public final static Icon ECLIPSE = ResourceManager.loadImage("images/eclipse.png"); - public final static Icon JAR = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/page_white_cup.png"); - public final static Icon KEY = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/application_key.png"); - public final static Icon IMPORT = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/application_get.png"); - public final static Icon iOS = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/phone.png"); - public final static Icon OPEN_ALL = ResourceManager.loadImage("images/famfamfam_silk_icons_v013/application_cascade.png"); - public final static Icon LIST_MOUNTED = ResourceManager.loadImage("images/downArrow.png"); + public final static Icon COPY = new GIcon("icon.plugin.fsbrowser.copy"); + public final static Icon CUT = new GIcon("icon.plugin.fsbrowser.cut"); + public final static Icon DELETE = new GIcon("icon.plugin.fsbrowser.delete"); + public final static Icon FONT = new GIcon("icon.plugin.fsbrowser.font"); + public final static Icon LOCKED = new GIcon("icon.plugin.fsbrowser.locked"); + public final static Icon NEW = new GIcon("icon.plugin.fsbrowser.new"); + public final static Icon PASTE = new GIcon("icon.plugin.fsbrowser.paste"); + public final static Icon REDO = new GIcon("icon.plugin.fsbrowser.redo"); + public final static Icon RENAME = new GIcon("icon.plugin.fsbrowser.rename"); + public final static Icon REFRESH = new GIcon("icon.plugin.fsbrowser.refresh"); + public final static Icon SAVE = new GIcon("icon.plugin.fsbrowser.save"); + public final static Icon SAVE_AS = new GIcon("icon.plugin.fsbrowser.save.as"); + public final static Icon UNDO = new GIcon("icon.plugin.fsbrowser.undo"); + public final static Icon UNLOCKED = new GIcon("icon.plugin.fsbrowser.unlocked"); + public final static Icon CLOSE = new GIcon("icon.plugin.fsbrowser.close"); + public final static Icon COLLAPSE_ALL = new GIcon("icon.plugin.fsbrowser.collapse.all"); + public final static Icon COMPRESS = new GIcon("icon.plugin.fsbrowser.compress"); + public final static Icon CREATE_FIRMWARE = new GIcon("icon.plugin.fsbrowser.create.firmware"); + public final static Icon EXPAND_ALL = new GIcon("icon.plugin.fsbrowser.expand.all"); + public final static Icon EXTRACT = new GIcon("icon.plugin.fsbrowser.extract"); + public final static Icon INFO = new GIcon("icon.plugin.fsbrowser.info"); + public final static Icon OPEN = new GIcon("icon.plugin.fsbrowser.open"); + public final static Icon OPEN_AS_BINARY = new GIcon("icon.plugin.fsbrowser.open.as.binary"); + public final static Icon OPEN_IN_LISTING = new GIcon("icon.plugin.fsbrowser.open.in.listing"); + public final static Icon OPEN_FILE_SYSTEM = new GIcon("icon.plugin.fsbrowser.open.file.system"); + public final static Icon PHOTO = new GIcon("icon.plugin.fsbrowser.photo"); + public final static Icon VIEW_AS_IMAGE = new GIcon("icon.plugin.fsbrowser.view.as.image"); + public final static Icon VIEW_AS_TEXT = new GIcon("icon.plugin.fsbrowser.view.as.text"); + public final static Icon ECLIPSE = new GIcon("icon.plugin.fsbrowser.eclipse"); + public final static Icon JAR = new GIcon("icon.plugin.fsbrowser.jar"); + public final static Icon IMPORT = new GIcon("icon.plugin.fsbrowser.import"); + public final static Icon iOS = new GIcon("icon.plugin.fsbrowser.ios"); + public final static Icon OPEN_ALL = new GIcon("icon.plugin.fsbrowser.open.all"); + public final static Icon LIST_MOUNTED = new GIcon("icon.plugin.fsbrowser.list.mounted"); //@formatter:on } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/util/table/actions/DeleteTableRowAction.java b/Ghidra/Features/Base/src/main/java/ghidra/util/table/actions/DeleteTableRowAction.java index 189cfa81b5..5819db0c25 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/util/table/actions/DeleteTableRowAction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/util/table/actions/DeleteTableRowAction.java @@ -19,7 +19,7 @@ import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.List; -import javax.swing.ImageIcon; +import javax.swing.Icon; import javax.swing.KeyStroke; import javax.swing.table.TableModel; @@ -29,12 +29,12 @@ import docking.actions.SharedDockingActionPlaceholder; import docking.widgets.table.GTable; import docking.widgets.table.RowObjectTableModel; import docking.widgets.table.threaded.ThreadedTableModel; +import generic.theme.GIcon; import ghidra.app.util.HelpTopics; import ghidra.framework.plugintool.PluginTool; import ghidra.util.*; import ghidra.util.exception.AssertException; import ghidra.util.timer.GTimer; -import resources.ResourceManager; /** * An action to delete data from a table. If your model is a {@link ThreadedTableModel}, then @@ -54,7 +54,7 @@ public class DeleteTableRowAction extends DockingAction { private static final KeyStroke DEFAULT_KEYSTROKE = KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0); - private static final ImageIcon ICON = ResourceManager.loadImage("images/table_delete.png"); + private static final Icon ICON = new GIcon("icon.plugin.table.delete.row"); private static final String NAME = "Remove Items"; private GTable table; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/util/table/field/MemoryTypeProgramLocationBasedTableColumn.java b/Ghidra/Features/Base/src/main/java/ghidra/util/table/field/MemoryTypeProgramLocationBasedTableColumn.java index 48e46aed32..b704889928 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/util/table/field/MemoryTypeProgramLocationBasedTableColumn.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/util/table/field/MemoryTypeProgramLocationBasedTableColumn.java @@ -19,10 +19,10 @@ import java.awt.Color; import java.awt.Component; import java.util.Comparator; -import javax.swing.ImageIcon; import javax.swing.JLabel; import docking.widgets.table.GTableCellRenderingData; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors; import ghidra.docking.settings.Settings; import ghidra.framework.plugintool.ServiceProvider; @@ -33,7 +33,7 @@ import ghidra.program.util.ProgramLocation; import ghidra.util.HTMLUtilities; import ghidra.util.table.column.AbstractGhidraColumnRenderer; import ghidra.util.table.column.GColumnRenderer; -import resources.ResourceManager; +import resources.Icons; public class MemoryTypeProgramLocationBasedTableColumn extends ProgramLocationTableColumnExtensionPoint { @@ -77,8 +77,8 @@ public class MemoryTypeProgramLocationBasedTableColumn private class MemoryTypeRenderer extends AbstractGhidraColumnRenderer { private Color disabledColor = Colors.DISABLED; - private ImageIcon offIcon = ResourceManager.loadImage("images/EmptyIcon16.gif"); - private ImageIcon onIcon = ResourceManager.loadImage("images/check.png"); + private GIcon offIcon = (GIcon) Icons.EMPTY_ICON; + private GIcon onIcon = new GIcon("icon.check"); MemoryTypeRenderer() { setHTMLRenderingEnabled(true); @@ -97,8 +97,8 @@ public class MemoryTypeProgramLocationBasedTableColumn MemoryBlock block = (MemoryBlock) value; - StringBuffer buffy = new StringBuffer(""); - StringBuffer tooltipBuffy = new StringBuffer(""); + StringBuilder buffy = new StringBuilder(""); + StringBuilder tooltipBuffy = new StringBuilder(""); asString(block, buffy, tooltipBuffy); setText(buffy.toString()); @@ -106,66 +106,66 @@ public class MemoryTypeProgramLocationBasedTableColumn return theRenderer; } - private void asString(MemoryBlock block, StringBuffer buffy, StringBuffer tooltipBuffy) { + private void asString(MemoryBlock block, StringBuilder buffy, StringBuilder tooltipBuffy) { updateForRead(block, buffy, tooltipBuffy); updateForWrite(block, buffy, tooltipBuffy); updateForExecute(block, buffy, tooltipBuffy); updateForVolatile(block, buffy, tooltipBuffy); } - private void updateForVolatile(MemoryBlock block, StringBuffer buffy, - StringBuffer tooltipBuffy) { + private void updateForVolatile(MemoryBlock block, StringBuilder buffy, + StringBuilder tooltipBuffy) { if (block.isVolatile()) { buffy.append("V"); - tooltipBuffy.append(""); + tooltipBuffy.append(""); } else { buffy.append(HTMLUtilities.colorString(disabledColor, "V")); - tooltipBuffy.append(""); + tooltipBuffy.append(""); } tooltipBuffy.append(HTMLUtilities.spaces(2)).append("Volatile
"); } - private void updateForExecute(MemoryBlock block, StringBuffer buffy, - StringBuffer tooltipBuffy) { + private void updateForExecute(MemoryBlock block, StringBuilder buffy, + StringBuilder tooltipBuffy) { if (block.isExecute()) { buffy.append("E"); - tooltipBuffy.append(""); + tooltipBuffy.append(""); } else { buffy.append(HTMLUtilities.colorString(disabledColor, "E")); - tooltipBuffy.append(""); + tooltipBuffy.append(""); } tooltipBuffy.append(HTMLUtilities.spaces(2)).append("Execute
"); } - private void updateForWrite(MemoryBlock block, StringBuffer buffy, - StringBuffer tooltipBuffy) { + private void updateForWrite(MemoryBlock block, StringBuilder buffy, + StringBuilder tooltipBuffy) { if (block.isWrite()) { buffy.append("W"); - tooltipBuffy.append(""); + tooltipBuffy.append(""); } else { buffy.append(HTMLUtilities.colorString(disabledColor, "W")); - tooltipBuffy.append(""); + tooltipBuffy.append(""); } tooltipBuffy.append(HTMLUtilities.spaces(2)).append("Write
"); } - private void updateForRead(MemoryBlock block, StringBuffer buffy, - StringBuffer tooltipBuffy) { + private void updateForRead(MemoryBlock block, StringBuilder buffy, + StringBuilder tooltipBuffy) { if (block.isRead()) { buffy.append("R"); - tooltipBuffy.append(""); + tooltipBuffy.append(""); } else { buffy.append(HTMLUtilities.colorString(disabledColor, "R")); - tooltipBuffy.append(""); + tooltipBuffy.append(""); } tooltipBuffy.append(HTMLUtilities.spaces(2)).append("Read
"); } @@ -176,8 +176,8 @@ public class MemoryTypeProgramLocationBasedTableColumn return ""; } - StringBuffer buffy = new StringBuffer(""); - StringBuffer tooltipBuffy = new StringBuffer(""); + StringBuilder buffy = new StringBuilder(""); + StringBuilder tooltipBuffy = new StringBuilder(""); asString(t, buffy, tooltipBuffy); return buffy.toString(); } diff --git a/Ghidra/Features/Base/src/main/java/help/screenshot/ImageDialogProvider.java b/Ghidra/Features/Base/src/main/java/help/screenshot/ImageDialogProvider.java index 47bc9eba52..49c68495f9 100644 --- a/Ghidra/Features/Base/src/main/java/help/screenshot/ImageDialogProvider.java +++ b/Ghidra/Features/Base/src/main/java/help/screenshot/ImageDialogProvider.java @@ -38,7 +38,7 @@ import generic.theme.GThemeDefaults.Colors.Palette; import ghidra.util.Msg; import ghidra.util.bean.GGlassPane; import ghidra.util.bean.GGlassPanePainter; -import resources.ResourceManager; +import resources.Icons; public class ImageDialogProvider extends DialogComponentProvider { private GGlassPane glassPane; @@ -94,17 +94,7 @@ public class ImageDialogProvider extends DialogComponentProvider { } } }; - action.setToolBarData(new ToolBarData(ResourceManager.loadImage("images/Plus.png"))); - addAction(action); - - action = new DockingAction("Write", "Test") { - - @Override - public void actionPerformed(ActionContext context) { - Msg.debug(this, "Just kidding..."); - } - }; - action.setToolBarData(new ToolBarData(ResourceManager.loadImage("images/pencil16.png"))); + action.setToolBarData(new ToolBarData(Icons.ADD_ICON)); addAction(action); } diff --git a/Ghidra/Features/Base/src/main/resources/images/no_small.png b/Ghidra/Features/Base/src/main/resources/images/no_small.png new file mode 100644 index 0000000000..98f9f0d8bd Binary files /dev/null and b/Ghidra/Features/Base/src/main/resources/images/no_small.png differ diff --git a/Ghidra/Features/Base/src/test.slow/java/docking/ComponentProviderActionsTest.java b/Ghidra/Features/Base/src/test.slow/java/docking/ComponentProviderActionsTest.java index 4f57794763..7c46341c68 100644 --- a/Ghidra/Features/Base/src/test.slow/java/docking/ComponentProviderActionsTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/docking/ComponentProviderActionsTest.java @@ -29,18 +29,18 @@ import docking.action.*; import docking.actions.KeyEntryDialog; import docking.actions.ToolActions; import docking.tool.util.DockingToolConstants; +import generic.theme.GIcon; import ghidra.framework.options.ToolOptions; import ghidra.framework.plugintool.PluginTool; import ghidra.test.AbstractGhidraHeadedIntegrationTest; import ghidra.test.TestEnv; import ghidra.util.*; import resources.Icons; -import resources.ResourceManager; public class ComponentProviderActionsTest extends AbstractGhidraHeadedIntegrationTest { // note: this has to happen after the test framework is initialized, so it cannot be static - private final Icon ICON = ResourceManager.loadImage("images/refresh.png"); + private final Icon ICON = Icons.REFRESH_ICON; private static final String PROVIDER_NAME = "Test Action Provider"; private static final KeyStroke CONTROL_T = KeyStroke.getKeyStroke(KeyEvent.VK_T, DockingUtils.CONTROL_KEY_MODIFIER_MASK); @@ -498,8 +498,19 @@ public class ComponentProviderActionsTest extends AbstractGhidraHeadedIntegratio private void assertWindowMenuActionHasIcon(Icon expected) { DockingActionIf action = getWindowMenuShowProviderAction(); + Icon menuIcon = action.getMenuBarData().getMenuIcon(); assertEquals("Windows menu icons for provider does not match the value set on the provider", - expected, action.getMenuBarData().getMenuIcon()); + getDescription(expected), getDescription(menuIcon)); + } + + private String getDescription(Icon icon) { + if (icon instanceof GIcon) { + return ((GIcon) icon).getUrl().toString(); + } + if (icon instanceof ImageIcon) { + return ((ImageIcon) icon).getDescription(); + } + return icon.toString(); } private void assertToolbarActionHasIcon(Icon expected) { diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/navigation/NextPrevCodeUnitPluginTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/navigation/NextPrevCodeUnitPluginTest.java index 04ceffea1f..37b8e85f39 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/navigation/NextPrevCodeUnitPluginTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/navigation/NextPrevCodeUnitPluginTest.java @@ -18,13 +18,13 @@ package ghidra.app.plugin.core.navigation; import static org.junit.Assert.*; import javax.swing.Icon; -import javax.swing.ImageIcon; import org.junit.*; import docking.action.DockingActionIf; import docking.menu.ActionState; import docking.menu.MultiStateDockingAction; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors.Palette; import ghidra.app.cmd.data.CreateDataCmd; import ghidra.app.cmd.disassemble.DisassembleCommand; @@ -39,7 +39,7 @@ import ghidra.program.model.listing.*; import ghidra.program.model.mem.Memory; import ghidra.test.*; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; +import resources.Icons; public class NextPrevCodeUnitPluginTest extends AbstractGhidraHeadedIntegrationTest { @@ -121,8 +121,8 @@ public class NextPrevCodeUnitPluginTest extends AbstractGhidraHeadedIntegrationT @Test public void testToggle() throws Exception { - Icon upIcon = ResourceManager.loadImage("images/up.png"); - Icon downIcon = ResourceManager.loadImage("images/down.png"); + Icon upIcon = new GIcon("icon.up"); + Icon downIcon = new GIcon("icon.down"); assertEquals(downIcon, direction.getToolBarData().getIcon()); assertStartsWith("Go To Next Instruction", nextInstruction.getDescription()); @@ -795,8 +795,7 @@ public class NextPrevCodeUnitPluginTest extends AbstractGhidraHeadedIntegrationT public void testSearchCustomBobBookmark() throws Exception { assertAddress("01001000"); - ImageIcon bookmarkBobIcon = - ResourceManager.loadImage("images/applications-engineering.png"); + Icon bookmarkBobIcon = Icons.ADD_ICON; // arbitrary icon BookmarkType bob = bookmarkManager.defineType("BOB", bookmarkBobIcon, Palette.YELLOW, 0); diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin1Test.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin1Test.java index 4c555c0134..795d68a97c 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin1Test.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin1Test.java @@ -30,6 +30,7 @@ import javax.swing.tree.TreePath; import org.junit.*; import docking.action.DockingActionIf; +import generic.theme.GIcon; import ghidra.app.services.GoToService; import ghidra.program.database.ProgramBuilder; import ghidra.program.database.ProgramDB; @@ -41,9 +42,13 @@ import ghidra.program.model.symbol.SourceType; import ghidra.program.model.symbol.SymbolTable; import ghidra.program.util.GroupPath; import ghidra.program.util.ProgramLocation; +<<<<<<< Upstream, based on origin/master import ghidra.util.Swing; import ghidra.util.task.TaskMonitor; import resources.ResourceManager; +======= +import ghidra.util.task.TaskMonitorAdapter; +>>>>>>> 0eb4b9d GP-1981 - Theming - Base Module public class ProgramTreePlugin1Test extends AbstractProgramTreePluginTest { @@ -633,7 +638,7 @@ public class ProgramTreePlugin1Test extends AbstractProgramTreePluginTest { int row = getRowForPath(nodes[0].getTreePath()); Component comp = getCellRendererComponentForLeaf(nodes[0], row); - assertEquals(ResourceManager.loadImage(DnDTreeCellRenderer.VIEWED_FRAGMENT), + assertEquals(new GIcon(DnDTreeCellRenderer.VIEWED_FRAGMENT), ((JLabel) comp).getIcon()); } @@ -676,12 +681,12 @@ public class ProgramTreePlugin1Test extends AbstractProgramTreePluginTest { int row = getRowForPath(node.getTreePath()); Component comp = getCellRendererComponentForLeaf(node, row); - assertEquals(ResourceManager.loadImage(DnDTreeCellRenderer.VIEWED_FRAGMENT), + assertEquals(new GIcon(DnDTreeCellRenderer.VIEWED_FRAGMENT), ((JLabel) comp).getIcon()); row = getRowForPath(n2.getTreePath()); comp = getCellRendererComponentForLeaf(n2, row); - assertEquals(ResourceManager.loadImage(DnDTreeCellRenderer.VIEWED_FRAGMENT), + assertEquals(new GIcon(DnDTreeCellRenderer.VIEWED_FRAGMENT), ((JLabel) comp).getIcon()); setSelectionPaths(new TreePath[] { n2.getTreePath() }); @@ -689,12 +694,12 @@ public class ProgramTreePlugin1Test extends AbstractProgramTreePluginTest { row = getRowForPath(n2.getTreePath()); comp = getCellRendererComponentForLeaf(n2, row); - assertEquals(ResourceManager.loadImage(DnDTreeCellRenderer.VIEWED_FRAGMENT), + assertEquals(new GIcon(DnDTreeCellRenderer.VIEWED_FRAGMENT), ((JLabel) comp).getIcon()); row = getRowForPath(node.getTreePath()); getCellRendererComponentForLeaf(node, row); - assertEquals(ResourceManager.loadImage(DnDTreeCellRenderer.FRAGMENT), + assertEquals(new GIcon(DnDTreeCellRenderer.FRAGMENT), ((JLabel) comp).getIcon()); } @@ -735,9 +740,15 @@ public class ProgramTreePlugin1Test extends AbstractProgramTreePluginTest { runSwing(() -> tree.removeFromView(finalNode.getTreePath())); int row = getRowForPath(node.getTreePath()); +<<<<<<< Upstream, based on origin/master Component comp = runSwing(() -> tree.getCellRenderer() .getTreeCellRendererComponent(tree, node, true, false, true, row, false)); assertEquals(ResourceManager.loadImage(DnDTreeCellRenderer.CLOSED_FOLDER), +======= + Component comp = tree.getCellRenderer() + .getTreeCellRendererComponent(tree, node, true, false, true, row, false); + assertEquals(new GIcon(DnDTreeCellRenderer.CLOSED_FOLDER), +>>>>>>> 0eb4b9d GP-1981 - Theming - Base Module ((JLabel) comp).getIcon()); } @@ -833,9 +844,15 @@ public class ProgramTreePlugin1Test extends AbstractProgramTreePluginTest { assertTrue(getView().hasSameAddresses(viewMgrService.getCurrentView())); int row = getRowForPath(child.getTreePath()); +<<<<<<< Upstream, based on origin/master Component comp = runSwing(() -> tree.getCellRenderer() .getTreeCellRendererComponent(tree, child, true, false, true, row, false)); assertEquals(ResourceManager.loadImage(DnDTreeCellRenderer.VIEWED_FRAGMENT), +======= + Component comp = tree.getCellRenderer() + .getTreeCellRendererComponent(tree, child, true, false, true, row, false); + assertEquals(new GIcon(DnDTreeCellRenderer.VIEWED_FRAGMENT), +>>>>>>> 0eb4b9d GP-1981 - Theming - Base Module ((JLabel) comp).getIcon()); } diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin2Test.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin2Test.java index 31a7ec6cfc..5fc53c71b1 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin2Test.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin2Test.java @@ -26,12 +26,12 @@ import org.junit.*; import docking.ActionContext; import docking.action.DockingActionIf; +import generic.theme.GIcon; import ghidra.program.database.ProgramBuilder; import ghidra.program.database.ProgramDB; import ghidra.program.model.address.AddressSet; import ghidra.program.model.address.AddressSetView; import ghidra.program.model.listing.*; -import resources.ResourceManager; /** * Tests for cut/copy/paste in the Program tree. @@ -969,7 +969,7 @@ public class ProgramTreePlugin2Test extends AbstractProgramTreePluginTest { int row = getRowForPath(nodes[0].getTreePath()); Component comp = getCellRendererComponentForNonLeaf(nodes[0], row); - assertEquals(ResourceManager.loadImage(DnDTreeCellRenderer.VIEWED_CLOSED_FOLDER_WITH_DESC), + assertEquals(new GIcon(DnDTreeCellRenderer.VIEWED_CLOSED_FOLDER_WITH_DESC), ((JLabel) comp).getIcon()); visitNode(nodes[0]); diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin3Test.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin3Test.java index 8997562508..f88e97078e 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin3Test.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePlugin3Test.java @@ -27,6 +27,7 @@ import javax.swing.JLabel; import org.junit.*; import docking.action.DockingActionIf; +import generic.theme.GIcon; import ghidra.app.util.SelectionTransferData; import ghidra.app.util.SelectionTransferable; import ghidra.program.database.ProgramBuilder; @@ -35,7 +36,6 @@ import ghidra.program.model.address.AddressSet; import ghidra.program.model.address.AddressSetView; import ghidra.program.model.listing.*; import ghidra.util.exception.NotFoundException; -import resources.ResourceManager; /** * Tests for drag/drop/reorder for copy and move in the program tree. @@ -183,7 +183,7 @@ public class ProgramTreePlugin3Test extends AbstractProgramTreePluginTest { setSelectionPath(node); AddressSet fragSet = new AddressSet(debugNode.getFragment()); - ArrayList list = new ArrayList(); + ArrayList list = new ArrayList<>(); list.add(debugNode); //drag .debug_data to 01004a15 @@ -391,7 +391,7 @@ public class ProgramTreePlugin3Test extends AbstractProgramTreePluginTest { int row = getRowForPath(nodes[0].getTreePath()); Component comp = getCellRendererComponentForNonLeaf(nodes[0], row); - assertEquals(ResourceManager.loadImage(DnDTreeCellRenderer.VIEWED_CLOSED_FOLDER_WITH_DESC), + assertEquals(new GIcon(DnDTreeCellRenderer.VIEWED_CLOSED_FOLDER_WITH_DESC), ((JLabel) comp).getIcon()); visitNode(nodes[0]); @@ -428,7 +428,7 @@ public class ProgramTreePlugin3Test extends AbstractProgramTreePluginTest { waitForSwing(); Component comp = getCellRendererComponentForLeaf(n, row); - assertEquals(ResourceManager.loadImage(DnDTreeCellRenderer.VIEWED_FRAGMENT), + assertEquals(new GIcon(DnDTreeCellRenderer.VIEWED_FRAGMENT), ((JLabel) comp).getIcon()); } diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePluginShowInViewTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePluginShowInViewTest.java index 4ef19fac45..af616f17b0 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePluginShowInViewTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/plugin/core/programtree/ProgramTreePluginShowInViewTest.java @@ -30,6 +30,7 @@ import org.junit.*; import docking.ActionContext; import docking.action.DockingActionIf; import docking.action.ToggleDockingAction; +import generic.theme.GIcon; import ghidra.app.plugin.core.codebrowser.CodeBrowserPlugin; import ghidra.app.plugin.core.navigation.GoToAddressLabelPlugin; import ghidra.app.services.*; @@ -42,7 +43,6 @@ import ghidra.program.util.GroupPath; import ghidra.test.AbstractGhidraHeadedIntegrationTest; import ghidra.test.TestEnv; import ghidra.util.task.RunManager; -import resources.ResourceManager; public class ProgramTreePluginShowInViewTest extends AbstractGhidraHeadedIntegrationTest { @@ -514,7 +514,7 @@ public class ProgramTreePluginShowInViewTest extends AbstractGhidraHeadedIntegra int row = getRow(node.getTreePath()); JLabel comp = render(tree, node, true, isExpanded, isLeaf, row, false); - assertEquals(ResourceManager.loadImage(iconName), getIcon(comp)); + assertEquals(new GIcon(iconName), getIcon(comp)); } private void waitForRunManager() { diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/framework/main/datatree/FrontEndPluginActionsTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/framework/main/datatree/FrontEndPluginActionsTest.java index c2da7f2a89..1f516bbb64 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/framework/main/datatree/FrontEndPluginActionsTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/framework/main/datatree/FrontEndPluginActionsTest.java @@ -52,7 +52,6 @@ import ghidra.test.AbstractGhidraHeadedIntegrationTest; import ghidra.test.TestEnv; import ghidra.util.task.TaskMonitor; import resources.MultiIcon; -import resources.ResourceManager; /** * Tests for actions in the front end (Ghidra project window) @@ -749,9 +748,6 @@ public class FrontEndPluginActionsTest extends AbstractGhidraHeadedIntegrationTe performAction(readOnlyAction, getTreeActionContext(), true); assertTrue(((DomainFileNode) npNode).getDomainFile().isReadOnly()); - Icon icon = ResourceManager.loadImage("fileIcons/ProgramReadOnly.gif"); - icon = ResourceManager.getScaledIcon(icon, 16, 16); - assertTrue(npNode.getIcon(false) instanceof MultiIcon); } diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/framework/plugintool/dialog/ManagePlugins2Test.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/framework/plugintool/dialog/ManagePlugins2Test.java index e5087e50b5..bb7cba6f52 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/framework/plugintool/dialog/ManagePlugins2Test.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/framework/plugintool/dialog/ManagePlugins2Test.java @@ -31,7 +31,7 @@ import ghidra.framework.plugintool.*; import ghidra.framework.plugintool.util.*; import ghidra.test.AbstractGhidraHeadedIntegrationTest; import ghidra.test.TestEnv; -import resources.ResourceManager; +import resources.Icons; /** * Tests for the configuring a tool. @@ -54,15 +54,13 @@ public class ManagePlugins2Test extends AbstractGhidraHeadedIntegrationTest { public void tearDown() throws Exception { close(dialog); env.dispose(); - - sleep(1000); } @Test public void testPluginPackage_ReleasedPackage_ReleasedPlugins() throws Exception { PluginPackage testPackage = new PluginPackage("TEST", - ResourceManager.loadImage("images/Data_32.png"), "Test plugin pacakge") { + Icons.ADD_ICON, "Test plugin pacakge") { // }; @@ -99,7 +97,7 @@ public class ManagePlugins2Test extends AbstractGhidraHeadedIntegrationTest { public void testPluginPackage_ReleasedPackage_ReleasedAndStablePlugins() throws Exception { PluginPackage testPackage = new PluginPackage("TEST", - ResourceManager.loadImage("images/Data_32.png"), "Test plugin pacakge") { + Icons.ADD_ICON, "Test plugin pacakge") { // }; @@ -140,7 +138,7 @@ public class ManagePlugins2Test extends AbstractGhidraHeadedIntegrationTest { public void testPluginPackage_StablePackage_ReleasedAndStablePlugins() throws Exception { PluginPackage testPackage = new PluginPackage("TEST", - ResourceManager.loadImage("images/Data_32.png"), "Test plugin pacakge") { + Icons.ADD_ICON, "Test plugin pacakge") { @Override public PluginStatus getActivationLevel() { return PluginStatus.STABLE; @@ -185,7 +183,7 @@ public class ManagePlugins2Test extends AbstractGhidraHeadedIntegrationTest { throws Exception { PluginPackage testPackage = new PluginPackage("TEST", - ResourceManager.loadImage("images/Data_32.png"), "Test plugin pacakge") { + Icons.ADD_ICON, "Test plugin pacakge") { @Override public PluginStatus getActivationLevel() { return PluginStatus.STABLE; @@ -235,7 +233,7 @@ public class ManagePlugins2Test extends AbstractGhidraHeadedIntegrationTest { public void testPluginPackage_ReleasedPackage_StablePlugins() throws Exception { PluginPackage testPackage = new PluginPackage("TEST", - ResourceManager.loadImage("images/Data_32.png"), "Test plugin pacakge") { + Icons.ADD_ICON, "Test plugin pacakge") { // }; @@ -274,7 +272,7 @@ public class ManagePlugins2Test extends AbstractGhidraHeadedIntegrationTest { throws Exception { PluginPackage testPackage = new PluginPackage("TEST", - ResourceManager.loadImage("images/Data_32.png"), "Test plugin pacakge") { + Icons.ADD_ICON, "Test plugin pacakge") { // }; @@ -456,25 +454,25 @@ public class ManagePlugins2Test extends AbstractGhidraHeadedIntegrationTest { } /* - + testPluginPackage_Released() { - + Click to add all - + Click to remove All - + } - - + + testPluginPackage_Stable_ReleasedPlugins() - + testPluginPackage_Stable_ReleasedAndStablePlugins() testPluginPackage_Stable_ReleasedAndStableAndUnstablePlugins() -unstable goes to 'experimental' - + testPluginPackage - + */ } diff --git a/Ghidra/Features/Decompiler/data/decompiler.theme.properties b/Ghidra/Features/Decompiler/data/decompiler.theme.properties index 2fe01e4b15..4e07d637e8 100644 --- a/Ghidra/Features/Decompiler/data/decompiler.theme.properties +++ b/Ghidra/Features/Decompiler/data/decompiler.theme.properties @@ -34,6 +34,12 @@ color.bg.decompiler.pcode.dfg.edge.selected = deeppink color.bg.decompiler.pcode.dfg.edge.within.block = black color.bg.decompiler.pcode.dfg.edge.between.blocks = red + +icon.decompiler.action.provider = icon.provider.clone +icon.decompiler.action.provider.clone = icon.provider.clone +icon.decompiler.action.export = page_edit.png + + [Dark Defaults] color.fg.decompiler.keyword = peru diff --git a/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/DecompilerProvider.java b/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/DecompilerProvider.java index 47617b3d3a..70a50e8edf 100644 --- a/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/DecompilerProvider.java +++ b/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/DecompilerProvider.java @@ -21,12 +21,14 @@ import java.math.BigInteger; import java.util.*; import java.util.concurrent.ConcurrentLinkedQueue; -import javax.swing.*; +import javax.swing.Icon; +import javax.swing.JComponent; import docking.*; import docking.action.*; import docking.widgets.fieldpanel.support.FieldLocation; import docking.widgets.fieldpanel.support.ViewerPosition; +import generic.theme.GIcon; import ghidra.GhidraOptions; import ghidra.app.decompiler.*; import ghidra.app.decompiler.component.*; @@ -51,7 +53,6 @@ import ghidra.util.Swing; import ghidra.util.bean.field.AnnotatedTextFieldElement; import ghidra.util.task.SwingUpdateManager; import resources.Icons; -import resources.ResourceManager; import utility.function.Callback; public class DecompilerProvider extends NavigatableComponentProviderAdapter @@ -61,8 +62,7 @@ public class DecompilerProvider extends NavigatableComponentProviderAdapter private static final String OPTIONS_TITLE = "Decompiler"; private static final Icon REFRESH_ICON = Icons.REFRESH_ICON; - private static final ImageIcon C_SOURCE_ICON = - ResourceManager.loadImage("images/decompileFunction.gif"); + private static final Icon C_SOURCE_ICON = new GIcon("icon.decompiler.action.provider"); private DockingAction pcodeGraphAction; private DockingAction astGraphAction; diff --git a/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/CloneDecompilerAction.java b/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/CloneDecompilerAction.java index 51b8ee0384..864a5bd931 100644 --- a/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/CloneDecompilerAction.java +++ b/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/CloneDecompilerAction.java @@ -18,20 +18,20 @@ package ghidra.app.plugin.core.decompile.actions; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; -import javax.swing.ImageIcon; +import javax.swing.Icon; import docking.action.KeyBindingData; import docking.action.ToolBarData; +import generic.theme.GIcon; import ghidra.app.plugin.core.decompile.DecompilerActionContext; import ghidra.app.util.HelpTopics; import ghidra.util.HelpLocation; -import resources.ResourceManager; public class CloneDecompilerAction extends AbstractDecompilerAction { public CloneDecompilerAction() { super("Decompile Clone"); - ImageIcon image = ResourceManager.loadImage("images/camera-photo.png"); + Icon image = new GIcon("icon.decompiler.action.provider.clone"); setToolBarData(new ToolBarData(image, "ZZZ")); setDescription("Create a snapshot (disconnected) copy of this Decompiler window "); setHelpLocation(new HelpLocation(HelpTopics.DECOMPILER, "ToolBarSnapshot")); diff --git a/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ExportToCAction.java b/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ExportToCAction.java index 2a1461d8a6..94aeca06f1 100644 --- a/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ExportToCAction.java +++ b/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ExportToCAction.java @@ -17,11 +17,12 @@ package ghidra.app.plugin.core.decompile.actions; import java.io.*; -import javax.swing.ImageIcon; +import javax.swing.Icon; import docking.action.ToolBarData; import docking.widgets.OptionDialog; import docking.widgets.filechooser.GhidraFileChooser; +import generic.theme.GIcon; import ghidra.app.decompiler.*; import ghidra.app.decompiler.component.DecompilerPanel; import ghidra.app.plugin.core.decompile.DecompilerActionContext; @@ -30,10 +31,9 @@ import ghidra.framework.preferences.Preferences; import ghidra.util.HelpLocation; import ghidra.util.Msg; import ghidra.util.filechooser.ExtensionFileFilter; -import resources.ResourceManager; public class ExportToCAction extends AbstractDecompilerAction { - private static final ImageIcon EXPORT_ICON = ResourceManager.loadImage("images/page_edit.png"); + private static final Icon EXPORT_ICON = new GIcon("icon.decompiler.action.export"); private static final String LAST_USED_C_FILE = "last.used.decompiler.c.export.file"; public ExportToCAction() { diff --git a/Ghidra/Features/FunctionGraph/data/functiongraph.theme.properties b/Ghidra/Features/FunctionGraph/data/functiongraph.theme.properties index 99c9ba94bf..b563482268 100644 --- a/Ghidra/Features/FunctionGraph/data/functiongraph.theme.properties +++ b/Ghidra/Features/FunctionGraph/data/functiongraph.theme.properties @@ -21,6 +21,39 @@ color.bg.functiongraph.edge.jump.unconditional.highlight = rgb(127, 127, 255) color.bg.functiongraph.paint.icon = rgb(189, 221, 252) // gentle pale blue +icon.functiongraph.layout.experimental = package_development.png +icon.functiongraph.action.vertex.xrefs = brick_link.png +icon.functiongraph.action.vertex.maximize = fullscreen_view.png +icon.functiongraph.action.vertex.minimize = graph_view.png +icon.functiongraph.action.vertex.group = shape_handles.png +icon.functiongraph.action.vertex.group.add = shape_square_add.png +icon.functiongraph.action.vertex.regroup = edit-redo.png +icon.functiongraph.action.vertex.ungroup = shape_ungroup.png +icon.functiongraph.action.vertex.choose.color = paintbrush.png +icon.functiongraph.action.vertex.choose.color.palette = palette.png +icon.functiongraph.action.vertex.edit.label = id.png +icon.functiongraph.action.vertex.full.screen = fullscreen_view.png +icon.functiongraph.action.vertex.edit.format = field.header.png + +icon.functiongraph.action.viewer.clone = icon.provider.clone +icon.functiongraph.action.viewer.layout = preferences-system.png +icon.functiongraph.action.viewer.vertex.hover.paths.to.vertex = fgin.png +icon.functiongraph.action.viewer.vertex.hover.paths.from.vertex = fgout.png +icon.functiongraph.action.viewer.vertex.hover.paths.from.to.vertex = fginout.png +icon.functiongraph.action.viewer.vertex.hover.paths.all = fgpaths.png +icon.functiongraph.action.viewer.vertex.hover.cycles = fgloop.png +icon.functiongraph.action.viewer.vertex.hover.cycles.all = fgloopall.png +icon.functiongraph.action.viewer.vertex.hover.scoped.flow.forward = fgblock.png +icon.functiongraph.action.viewer.vertex.hover.scoped.flow.reverse = fgrevblock.png +icon.functiongraph.action.viewer.vertex.hover.off = hoverOff.gif + +icon.functiongraph.action.viewer.home = house.png +icon.functiongraph.action.viewer.reset = icon.refresh + +icon.functiongraph.action.provider = function_graph.png +icon.functiongraph.action.provider.satellite = network-wireless-16.png + + [Dark Defaults] diff --git a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGActionManager.java b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGActionManager.java index 9aed1f44af..51bfce4980 100644 --- a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGActionManager.java +++ b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGActionManager.java @@ -19,7 +19,8 @@ import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.util.*; -import javax.swing.*; +import javax.swing.Icon; +import javax.swing.KeyStroke; import docking.ActionContext; import docking.DockingUtils; @@ -29,6 +30,7 @@ import docking.menu.MultiStateDockingAction; import docking.widgets.EventTrigger; import docking.widgets.OptionDialog; import edu.uci.ics.jung.graph.Graph; +import generic.theme.GIcon; import ghidra.app.events.ProgramSelectionPluginEvent; import ghidra.app.plugin.core.functiongraph.action.*; import ghidra.app.plugin.core.functiongraph.graph.FGEdge; @@ -48,8 +50,6 @@ import ghidra.program.util.ProgramLocation; import ghidra.program.util.ProgramSelection; import ghidra.util.HelpLocation; import ghidra.util.SystemUtilities; -import resources.Icons; -import resources.ResourceManager; class FGActionManager { private static final String EDGE_HOVER_HIGHLIGHT = "EDGE_HOVER_HIGHLIGHT"; @@ -60,10 +60,15 @@ class FGActionManager { private static final String COMPLEX_LAYOUT_NAME = "COMPLEX_LAYOUT_NAME"; private static final String LAYOUT_CLASS_NAME = "LAYOUT_CLASS_NAME"; - private static final ImageIcon EDIT_ICON = ResourceManager.loadImage("images/id.png"); - private static final ImageIcon FULL_SCREEN_ICON = - ResourceManager.loadImage("images/fullscreen_view.png"); - private static final Icon XREFS_ICON = ResourceManager.loadImage("images/brick_link.png"); + //@formatter:off + private static final Icon GROUP_ICON = new GIcon("icon.functiongraph.action.vertex.group"); + private static final Icon GROUP_ADD_ICON = new GIcon("icon.functiongraph.action.vertex.group.add"); + private static final Icon UNGROUP_ICON = new GIcon("icon.functiongraph.action.vertex.ungroup"); + + private static final Icon EDIT_ICON = new GIcon("icon.functiongraph.action.vertex.edit.label"); + private static final Icon FULL_SCREEN_ICON = new GIcon("icon.functiongraph.action.vertex.full.screen"); + private static final Icon XREFS_ICON = new GIcon("icon.functiongraph.action.vertex.full.screen"); + //@formatter:off private PluginTool tool; private FunctionGraphPlugin plugin; @@ -122,7 +127,7 @@ class FGActionManager { // subgroup 3, after the refresh and layout actions chooseFormatsAction.setToolBarData(new ToolBarData( - ResourceManager.loadImage("images/field.header.png"), layoutGroup, "3")); + new GIcon("icon.functiongraph.action.vertex.edit.format"), layoutGroup, "3")); chooseFormatsAction.setHelpLocation( new HelpLocation("FunctionGraphPlugin", "Function_Graph_Action_Format")); @@ -139,7 +144,7 @@ class FGActionManager { } }; homeAction.setToolBarData( - new ToolBarData(ResourceManager.loadImage("images/house.png"), toolBarGroup1)); + new ToolBarData(new GIcon("icon.functiongraph.action.viewer.home"), toolBarGroup1)); homeAction.setHelpLocation( new HelpLocation("FunctionGraphPlugin", "Function_Graph_Action_Home")); @@ -160,7 +165,8 @@ class FGActionManager { return controller.hasResults(); } }; - resetGraphAction.setToolBarData(new ToolBarData(Icons.REFRESH_ICON, layoutGroup, "1")); + resetGraphAction.setToolBarData( + new ToolBarData(new GIcon("icon.functiongraph.action.viewer.reset"), layoutGroup, "1")); resetGraphAction.setDescription("Reloads the graph--All positioning and grouping " + "information is lost"); resetGraphAction.setHelpLocation( @@ -442,7 +448,7 @@ class FGActionManager { } }; menuData = new MenuData(new String[] { "Group Selected Vertices" }, popupMutateGroup2); - menuData.setIcon(FunctionGraphPlugin.GROUP_ICON); + menuData.setIcon(GROUP_ICON); menuData.setMenuSubGroup(Integer.toString(groupingSubgroupOffset++)); groupSelectedVertices.setPopupMenuData(menuData); groupSelectedVertices.setHelpLocation( @@ -501,7 +507,7 @@ class FGActionManager { menuData = new MenuData(new String[] { "Group Selected Vertices - Add to Group" }, popupMutateGroup2); - menuData.setIcon(FunctionGraphPlugin.GROUP_ADD_ICON); + menuData.setIcon(GROUP_ADD_ICON); menuData.setMenuSubGroup(Integer.toString(groupingSubgroupOffset++)); addSelectedVerticesToGroup.setPopupMenuData(menuData); addSelectedVerticesToGroup.setHelpLocation(new HelpLocation("FunctionGraphPlugin", @@ -544,7 +550,7 @@ class FGActionManager { }; menuData = new MenuData(new String[] { "Ungroup Selected Vertices" }, popupMutateGroup2); - menuData.setIcon(FunctionGraphPlugin.UNGROUP_ICON); + menuData.setIcon(UNGROUP_ICON); menuData.setMenuSubGroup(Integer.toString(groupingSubgroupOffset++)); ungroupSelectedVertices.setPopupMenuData(menuData); ungroupSelectedVertices.setHelpLocation( @@ -653,7 +659,7 @@ class FGActionManager { return controller.getGraphedFunction() != null; } }; - ImageIcon image = ResourceManager.loadImage("images/camera-photo.png"); + Icon image = new GIcon("icon.functiongraph.action.viewer.clone"); cloneAction.setToolBarData(new ToolBarData(image, toolbarEndGroup)); cloneAction.setDescription( "Create a snapshot (disconnected) copy of this Function Graph window "); @@ -883,7 +889,7 @@ class FGActionManager { // This icon will display when the action has no icon. This allows actions with no good // icon to be blank in the menu, but to use this icon on the toolbar. - layoutAction.setDefaultIcon(ResourceManager.loadImage("images/preferences-system.png")); + layoutAction.setDefaultIcon(new GIcon("icon.functiongraph.action.viewer.layout")); List> actionStates = loadActionStatesForLayoutProviders(); for (ActionState actionState : actionStates) { @@ -936,14 +942,17 @@ class FGActionManager { } private void addVertexHoverModeAction(String group) { - Icon pathsToVertexIcon = ResourceManager.loadImage("images/fgin.png"); - Icon pathsFromVertexIcon = ResourceManager.loadImage("images/fgout.png"); - Icon pathsFromToVertexIcon = ResourceManager.loadImage("images/fginout.png"); - Icon cyclesIcon = ResourceManager.loadImage("images/fgloop.png"); - Icon pathsIcon = ResourceManager.loadImage("images/fgpaths.png"); - Icon forwardScopedIcon = ResourceManager.loadImage("images/fgblock.png"); - Icon reverseScopedIcon = ResourceManager.loadImage("images/fgrevblock.png"); - Icon nothingIcon = ResourceManager.loadImage("images/hoverOff.gif"); + + //@formatter:off + Icon pathsToVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.to.vertex"); + Icon pathsFromVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.from.vertex"); + Icon pathsFromToVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.from.to.vertex"); + Icon pathsIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.all"); + Icon cyclesIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.cycles"); + Icon forwardScopedIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.scoped.flow.forward"); + Icon reverseScopedIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.scoped.flow.reverse"); + Icon nothingIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.off"); + //@formatter:off HelpLocation pathHelpLocation = new HelpLocation("FunctionGraphPlugin", "Path_Highlight_Actions"); @@ -1011,14 +1020,18 @@ class FGActionManager { } private void addVertexSelectedModeAction(String group) { - Icon pathsToVertexIcon = ResourceManager.loadImage("images/fgin.png"); - Icon pathsFromVertexIcon = ResourceManager.loadImage("images/fgout.png"); - Icon pathsFromToVertexIcon = ResourceManager.loadImage("images/fginout.png"); - Icon cyclesIcon = ResourceManager.loadImage("images/fgloop.png"); - Icon allCyclesIcon = ResourceManager.loadImage("images/fgloopall.png"); - Icon forwardScopedIcon = ResourceManager.loadImage("images/fgblock.png"); - Icon reverseScopedIcon = ResourceManager.loadImage("images/fgrevblock.png"); - Icon nothingIcon = ResourceManager.loadImage("images/hoverOff.gif"); + + //@formatter:off + Icon pathsToVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.to.vertex"); + Icon pathsFromVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.from.vertex"); + Icon pathsFromToVertexIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.paths.from.to.vertex"); + Icon cyclesIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.cycles"); + Icon allCyclesIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.cycles.all"); + Icon forwardScopedIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.scoped.flow.forward"); + Icon reverseScopedIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.scoped.flow.reverse"); + Icon nothingIcon = new GIcon("icon.functiongraph.action.viewer.vertex.hover.off"); + //@formatter:off + HelpLocation pathHelpLocation = new HelpLocation("FunctionGraphPlugin", "Path_Highlight_Actions"); diff --git a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGSatelliteUndockedProvider.java b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGSatelliteUndockedProvider.java index fa82a7a72d..096bc836f1 100644 --- a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGSatelliteUndockedProvider.java +++ b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGSatelliteUndockedProvider.java @@ -22,15 +22,15 @@ import javax.swing.Icon; import javax.swing.JComponent; import docking.*; +import generic.theme.GIcon; import ghidra.app.plugin.core.functiongraph.mvc.FGController; import ghidra.framework.plugintool.ComponentProviderAdapter; import ghidra.util.HelpLocation; -import resources.ResourceManager; public class FGSatelliteUndockedProvider extends ComponentProviderAdapter { static final String NAME = "Function Graph Satellite"; - private static final Icon ICON = ResourceManager.loadImage("images/network-wireless-16.png"); + private static final Icon ICON = new GIcon("icon.functiongraph.action.provider.satellite"); private FGController controller; private JComponent satelliteComponent; diff --git a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FunctionGraphPlugin.java b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FunctionGraphPlugin.java index d5478cf390..bd0d9c6b73 100644 --- a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FunctionGraphPlugin.java +++ b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FunctionGraphPlugin.java @@ -17,11 +17,12 @@ package ghidra.app.plugin.core.functiongraph; import java.util.*; -import javax.swing.ImageIcon; +import javax.swing.Icon; import org.jdom.Element; import docking.tool.ToolConstants; +import generic.theme.GIcon; import ghidra.GhidraOptions; import ghidra.app.CorePluginPackage; import ghidra.app.events.*; @@ -44,7 +45,6 @@ import ghidra.program.model.listing.Program; import ghidra.program.util.ProgramLocation; import ghidra.program.util.ProgramSelection; import ghidra.util.exception.AssertException; -import resources.ResourceManager; //@formatter:off @PluginInfo( @@ -61,14 +61,7 @@ public class FunctionGraphPlugin extends ProgramPlugin implements OptionsChangeL static final String OPTIONS_NAME_PATH = ToolConstants.GRAPH_OPTIONS + Options.DELIMITER + FUNCTION_GRAPH_NAME; - static final ImageIcon ICON = ResourceManager.loadImage("images/function_graph.png"); - - public static final ImageIcon GROUP_ICON = - ResourceManager.loadImage("images/shape_handles.png"); - public static final ImageIcon GROUP_ADD_ICON = - ResourceManager.loadImage("images/shape_square_add.png"); - public static final ImageIcon UNGROUP_ICON = - ResourceManager.loadImage("images/shape_ungroup.png"); + static final Icon ICON = new GIcon("icon.functiongraph.action.provider"); private static final String USER_DEFINED_FORMAT_CONFIG_NAME = "USER_DEFINED_FORMAT_MANAGER"; diff --git a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/layout/ExperimentalLayoutProvider.java b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/layout/ExperimentalLayoutProvider.java index 09064373bd..3d22deaca1 100644 --- a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/layout/ExperimentalLayoutProvider.java +++ b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/layout/ExperimentalLayoutProvider.java @@ -17,11 +17,11 @@ package ghidra.app.plugin.core.functiongraph.graph.layout; import javax.swing.Icon; -import resources.ResourceManager; +import generic.theme.GIcon; public abstract class ExperimentalLayoutProvider extends FGLayoutProviderExtensionPoint { - private static final Icon ICON = ResourceManager.loadImage("images/package_development.png"); + private static final Icon ICON = new GIcon("icon.functiongraph.layout.experimental"); @Override public Icon getActionIcon() { diff --git a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/GroupedFunctionGraphComponentPanel.java b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/GroupedFunctionGraphComponentPanel.java index d0cf2785e4..c136b9deed 100644 --- a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/GroupedFunctionGraphComponentPanel.java +++ b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/GroupedFunctionGraphComponentPanel.java @@ -28,6 +28,7 @@ import docking.GenericHeader; import docking.action.DockingAction; import docking.action.ToolBarData; import generic.theme.GColor; +import generic.theme.GIcon; import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin; import ghidra.app.plugin.core.functiongraph.graph.FGEdge; import ghidra.app.plugin.core.functiongraph.mvc.FGController; @@ -40,7 +41,6 @@ import ghidra.program.util.ProgramSelection; import ghidra.util.*; import ghidra.util.exception.AssertException; import ghidra.util.layout.VerticalLayout; -import resources.ResourceManager; import util.CollectionUtils; /** @@ -189,7 +189,7 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa } }; groupAction.setDescription("Combine selected vertices into one vertex"); - ImageIcon imageIcon = ResourceManager.loadImage("images/shape_handles.png"); + Icon imageIcon = new GIcon("icon.functiongraph.action.vertex.group"); groupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup)); groupAction.setHelpLocation( new HelpLocation("FunctionGraphPlugin", "Group_Vertex_Action_Group")); @@ -202,7 +202,7 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa } }; regroupAction.setDescription("Restore vertex and siblings back to group form"); - imageIcon = ResourceManager.loadImage("images/edit-redo.png"); + imageIcon = new GIcon("icon.functiongraph.action.vertex.regroup"); regroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup)); regroupAction.setHelpLocation( new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Regroup")); @@ -215,7 +215,7 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa } }; ungroupAction.setDescription("Ungroup selected vertices into individual vertex"); - imageIcon = ResourceManager.loadImage("images/shape_ungroup.png"); + imageIcon = new GIcon("icon.functiongraph.action.vertex.ungroup"); ungroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup)); ungroupAction.setHelpLocation( new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Ungroup")); @@ -243,7 +243,7 @@ public class GroupedFunctionGraphComponentPanel extends AbstractGraphComponentPa } }; addToGroupAction.setDescription("Add the selected vertices to this group"); - imageIcon = ResourceManager.loadImage("images/shape_square_add.png"); + imageIcon = new GIcon("icon.functiongraph.action.vertex.group.add"); addToGroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup)); addToGroupAction.setHelpLocation( new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Group_Add")); diff --git a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/ListingGraphComponentPanel.java b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/ListingGraphComponentPanel.java index 90544978c0..e0dc950859 100644 --- a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/ListingGraphComponentPanel.java +++ b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/ListingGraphComponentPanel.java @@ -38,6 +38,7 @@ import docking.widgets.fieldpanel.field.Field; import docking.widgets.fieldpanel.support.BackgroundColorModel; import docking.widgets.label.GDLabel; import generic.theme.GColor; +import generic.theme.GIcon; import generic.theme.GThemeDefaults.Colors; import ghidra.app.plugin.core.codebrowser.hover.ListingHoverService; import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin; @@ -60,7 +61,6 @@ import ghidra.program.model.symbol.SymbolTable; import ghidra.program.util.ProgramLocation; import ghidra.program.util.ProgramSelection; import ghidra.util.*; -import resources.ResourceManager; public class ListingGraphComponentPanel extends AbstractGraphComponentPanel { @@ -311,7 +311,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel { } }; xrefsAction.setDescription("Jump to a XRef"); - ImageIcon imageIcon = ResourceManager.loadImage("images/brick_link.png"); + Icon imageIcon = new GIcon("icon.functiongraph.action.vertex.xrefs"); xrefsAction.setToolBarData(new ToolBarData(imageIcon, firstGroup)); xrefsAction.setHelpLocation(new HelpLocation("FunctionGraphPlugin", "Vertex_Action_XRefs")); @@ -325,7 +325,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel { } }; maximizeViewModeAction.setDescription("Reverts view from graph to fullscreen"); - imageIcon = ResourceManager.loadImage("images/fullscreen_view.png"); + imageIcon = new GIcon("icon.functiongraph.action.vertex.maximize"); maximizeViewModeAction.setToolBarData(new ToolBarData(imageIcon, firstGroup)); maximizeViewModeAction.setHelpLocation( new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Full_View")); @@ -340,7 +340,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel { } }; minimizeViewModeAction.setDescription("Reverts view from fullscreen to graph"); - imageIcon = ResourceManager.loadImage("images/graph_view.png"); + imageIcon = new GIcon("icon.functiongraph.action.vertex.minimize"); minimizeViewModeAction.setToolBarData(new ToolBarData(imageIcon, firstGroup)); minimizeViewModeAction.setHelpLocation( new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Full_View")); @@ -352,7 +352,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel { } }; groupAction.setDescription("Combine selected vertices into one vertex"); - imageIcon = ResourceManager.loadImage("images/shape_handles.png"); + imageIcon = new GIcon("icon.functiongraph.action.vertex.group"); groupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup)); groupAction.setHelpLocation(new HelpLocation("FunctionGraphPlugin", "Vertex_Action_Group")); @@ -363,7 +363,7 @@ public class ListingGraphComponentPanel extends AbstractGraphComponentPanel { } }; regroupAction.setDescription("Restore vertex and siblings back to group form"); - imageIcon = ResourceManager.loadImage("images/edit-redo.png"); + imageIcon = new GIcon("icon.functiongraph.action.vertex.regroup"); regroupAction.setToolBarData(new ToolBarData(imageIcon, secondGroup)); regroupAction.setHelpLocation( diff --git a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/SetVertexMostRecentColorAction.java b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/SetVertexMostRecentColorAction.java index 934cfbfc86..6d5e10d7f0 100644 --- a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/SetVertexMostRecentColorAction.java +++ b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/graph/vertex/SetVertexMostRecentColorAction.java @@ -26,6 +26,7 @@ import docking.action.*; import docking.menu.MultiActionDockingAction; import docking.menu.MultipleActionDockingToolbarButton; import generic.theme.GColor; +import generic.theme.GIcon; import ghidra.app.plugin.core.functiongraph.FGColorProvider; import ghidra.app.plugin.core.functiongraph.FunctionGraphPlugin; import ghidra.app.plugin.core.functiongraph.mvc.FGController; @@ -58,7 +59,7 @@ public class SetVertexMostRecentColorAction extends MultiActionDockingAction { Icon blankIcon = new EmptyIcon(16, 16); MultiIcon multiIcon = new MultiIcon(blankIcon); - Icon paintBrushImage = ResourceManager.loadImage("images/paintbrush.png"); + Icon paintBrushImage = new GIcon("icon.functiongraph.action.vertex.choose.color"); Icon scaledBrush = ResourceManager.getScaledIcon(paintBrushImage, 16, 16); Point point = getLowerLeftIconOffset(blankIcon, colorIcon); @@ -99,7 +100,7 @@ public class SetVertexMostRecentColorAction extends MultiActionDockingAction { colorProvider.setVertexColor(vertex, newColor); } }; - ImageIcon imageIcon = ResourceManager.loadImage("images/palette.png"); + Icon imageIcon = new GIcon("icon.functiongraph.action.vertex.choose.color.palette"); chooseColorAction.setMenuBarData( new MenuData(new String[] { "Choose New Color" }, imageIcon)); chooseColorAction.setHelpLocation( diff --git a/Ghidra/Features/FunctionGraphDecompilerExtension/certification.manifest b/Ghidra/Features/FunctionGraphDecompilerExtension/certification.manifest index 3629bb9ec9..3550183332 100644 --- a/Ghidra/Features/FunctionGraphDecompilerExtension/certification.manifest +++ b/Ghidra/Features/FunctionGraphDecompilerExtension/certification.manifest @@ -1,3 +1,4 @@ ##VERSION: 2.0 Module.manifest||GHIDRA||||END| +data/functiongraph.extension.decompiler.theme.properties||GHIDRA||||END| src/main/resources/images/function_graph_code_flow.png||GHIDRA||reviewed||END| diff --git a/Ghidra/Features/FunctionGraphDecompilerExtension/data/functiongraph.extension.decompiler.theme.properties b/Ghidra/Features/FunctionGraphDecompilerExtension/data/functiongraph.extension.decompiler.theme.properties new file mode 100644 index 0000000000..7cedab969f --- /dev/null +++ b/Ghidra/Features/FunctionGraphDecompilerExtension/data/functiongraph.extension.decompiler.theme.properties @@ -0,0 +1,7 @@ +[Defaults] + + +icon.functiongraph.layout.nested.code = function_graph_code_flow.png + + +[Dark Defaults] diff --git a/Ghidra/Features/FunctionGraphDecompilerExtension/src/main/java/ghidra/app/plugin/core/functiongraph/graph/layout/DecompilerNestedLayoutProvider.java b/Ghidra/Features/FunctionGraphDecompilerExtension/src/main/java/ghidra/app/plugin/core/functiongraph/graph/layout/DecompilerNestedLayoutProvider.java index 72314e8917..4c1d4d98c1 100644 --- a/Ghidra/Features/FunctionGraphDecompilerExtension/src/main/java/ghidra/app/plugin/core/functiongraph/graph/layout/DecompilerNestedLayoutProvider.java +++ b/Ghidra/Features/FunctionGraphDecompilerExtension/src/main/java/ghidra/app/plugin/core/functiongraph/graph/layout/DecompilerNestedLayoutProvider.java @@ -17,15 +17,14 @@ package ghidra.app.plugin.core.functiongraph.graph.layout; import javax.swing.Icon; +import generic.theme.GIcon; import ghidra.app.plugin.core.functiongraph.graph.FunctionGraph; import ghidra.framework.options.Options; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; public class DecompilerNestedLayoutProvider extends FGLayoutProviderExtensionPoint { - private static final Icon ICON = - ResourceManager.loadImage("images/function_graph_code_flow.png"); + private static final Icon ICON = new GIcon("icon.functiongraph.layout.nested.code"); static final String LAYOUT_NAME = "Nested Code Layout"; @Override diff --git a/Ghidra/Features/GraphFunctionCalls/data/functioncallgraph.theme.properties b/Ghidra/Features/GraphFunctionCalls/data/functioncallgraph.theme.properties index a79eeecb84..ff7fa7a791 100644 --- a/Ghidra/Features/GraphFunctionCalls/data/functioncallgraph.theme.properties +++ b/Ghidra/Features/GraphFunctionCalls/data/functioncallgraph.theme.properties @@ -12,6 +12,8 @@ color.bg.fcg.edge.primary.indirect.selected = rgb(201, 195, 195) color.bg.fcg.edge.satellite.direct = rgba(0,0,0,0.1) // 'washed out black' color.bg.fcg.edge.satellite.indirect = rgba(125, 125, 125, 25) // 'washed out gray' +icon.fcg.layout.bow.tie = color_swatch.png + [Dark Defaults] diff --git a/Ghidra/Features/GraphFunctionCalls/src/main/java/functioncalls/graph/layout/BowTieLayoutProvider.java b/Ghidra/Features/GraphFunctionCalls/src/main/java/functioncalls/graph/layout/BowTieLayoutProvider.java index 3d5985820a..ad87a802e2 100644 --- a/Ghidra/Features/GraphFunctionCalls/src/main/java/functioncalls/graph/layout/BowTieLayoutProvider.java +++ b/Ghidra/Features/GraphFunctionCalls/src/main/java/functioncalls/graph/layout/BowTieLayoutProvider.java @@ -18,11 +18,11 @@ package functioncalls.graph.layout; import javax.swing.Icon; import functioncalls.graph.*; +import generic.theme.GIcon; import ghidra.graph.viewer.layout.AbstractLayoutProvider; import ghidra.graph.viewer.layout.VisualGraphLayout; import ghidra.util.exception.CancelledException; import ghidra.util.task.TaskMonitor; -import resources.ResourceManager; /** * A layout provider for the {@link BowTieLayout} @@ -32,7 +32,7 @@ public class BowTieLayoutProvider public static final String NAME = "Bow Tie Layout"; - private static final Icon DEFAULT_ICON = ResourceManager.loadImage("images/color_swatch.png"); + private static final Icon DEFAULT_ICON = new GIcon("icon.fcg.layout.bow.tie"); @Override public VisualGraphLayout getLayout(FunctionCallGraph graph, diff --git a/Ghidra/Features/GraphFunctionCalls/src/main/java/functioncalls/plugin/FunctionCallGraphPlugin.java b/Ghidra/Features/GraphFunctionCalls/src/main/java/functioncalls/plugin/FunctionCallGraphPlugin.java index b35dea5d95..3e95ee994e 100644 --- a/Ghidra/Features/GraphFunctionCalls/src/main/java/functioncalls/plugin/FunctionCallGraphPlugin.java +++ b/Ghidra/Features/GraphFunctionCalls/src/main/java/functioncalls/plugin/FunctionCallGraphPlugin.java @@ -146,9 +146,6 @@ public class FunctionCallGraphPlugin extends ProgramPlugin implements OptionsCha } }; -// TODO create icon from scratch: bow-tie -// ImageIcon icon = ResourceManager.loadImage("images/applications-development.png"); -// showProviderAction.setToolBarData(new ToolBarData(icon, "View")); tool.addAction(showProviderAction); } diff --git a/Ghidra/Framework/Docking/data/docking.theme.properties b/Ghidra/Framework/Docking/data/docking.theme.properties index 5662c43278..95dbd1ce53 100644 --- a/Ghidra/Framework/Docking/data/docking.theme.properties +++ b/Ghidra/Framework/Docking/data/docking.theme.properties @@ -92,27 +92,38 @@ color.bg.fieldpanel.selection.and.highlight = green // Icons files icon.empty = EmptyIcon16.gif icon.help = help-browser.png +icon.home = go-home.png icon.add = Plus2.png +icon.subtract = list-remove.png +icon.clear = erase16.png +icon.error = error.png +icon.delete = icon.error icon.collapse.all = collapse_all.png icon.expand.all = expand_all.png +icon.toggle.expand = expand.gif +icon.toggle.collapse = collapse.gif icon.configure.filter = exec.png -icon.delete = error.png icon.error = emblem-important.png icon.navigate.in = locationIn.gif icon.navigate.out = locationOut.gif icon.not.allowed = dialog-cancel.png +icon.folder.closed = closedSmallFolder.png icon.folder.open = openSmallFolder.png icon.refresh = reload3.png icon.sort.ascending = sortascending.png icon.sort.descending = sortdescending.png icon.stop = process-stop.png +icon.information = information.png +icon.warning = warning.png icon.warning.strong = software-update-urgent.png +icon.pulldown = menu16.gif icon.left = left.png icon.right = right.png -icon.left.alt = images/left.alternate.png +icon.left.alt = left.alternate.png icon.right.alt = right.alternate.png -icon.saveas = disk.png -icon.makeselection = text_align_justify.png +icon.save = disk.png +icon.save.as = disk_save_as.png +icon.make.selection = text_align_justify.png icon.arrow.down.right = viewmagfit.png[rotate(90)] icon.arrow.up.left = viewmagfit.png[rotate(275)] icon.flag = flag.png @@ -122,13 +133,25 @@ icon.filter.not.accepted = icon.flag{dialog-cancel.png[size(10,10)][move(6,6)]} icon.blocked.match = icon.lock{icon.checkmark.green[size(12,12)][move(4,0)]} icon.undo = undo.png icon.redo = redo.png -icon.warning = warning.png +icon.font = text_lowercase.png +icon.up = up.png +icon.down = down.png +icon.copy = page_white_copy.png +icon.cut = edit_red.png +icon.paste = page_paste.png +icon.rename = textfield_rename.png +icon.check = check.png + icon.theme.import = mail-receive.png icon.theme.export = mail-folder-outbox.png // Fonts + + + + [Dark Defaults] color.bg = #46494B // color used by flatlaf dark theme diff --git a/Ghidra/Framework/Docking/src/main/java/docking/framework/ApplicationInformationDisplayFactory.java b/Ghidra/Framework/Docking/src/main/java/docking/framework/ApplicationInformationDisplayFactory.java index c1b892a09b..fa4239b35e 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/framework/ApplicationInformationDisplayFactory.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/framework/ApplicationInformationDisplayFactory.java @@ -72,7 +72,7 @@ public class ApplicationInformationDisplayFactory { return bestImageSoFar; } - public static ImageIcon getHomeIcon() { + public static Icon getHomeIcon() { ApplicationInformationDisplayFactory factory = PluggableServiceRegistry.getPluggableService( ApplicationInformationDisplayFactory.class); return factory.doGetHomeIcon(); @@ -159,7 +159,7 @@ public class ApplicationInformationDisplayFactory { return null; } - protected ImageIcon doGetHomeIcon() { + protected Icon doGetHomeIcon() { return ResourceManager.loadImage("images/www_16.png"); } diff --git a/Ghidra/Framework/Generic/src/main/java/generic/theme/AbstractThemeReader.java b/Ghidra/Framework/Generic/src/main/java/generic/theme/AbstractThemeReader.java index 9ff0e2f285..a3846f0492 100644 --- a/Ghidra/Framework/Generic/src/main/java/generic/theme/AbstractThemeReader.java +++ b/Ghidra/Framework/Generic/src/main/java/generic/theme/AbstractThemeReader.java @@ -173,9 +173,9 @@ public abstract class AbstractThemeReader { protected void error(int lineNumber, String message) { String msg = - "Error parsing file \"" + source + "\" at line: " + lineNumber + ", " + message; + "Error parsing theme file \"" + source + "\" at line: " + lineNumber + ", " + message; errors.add(msg); - Msg.out(msg); + Msg.error(this, msg); } /** diff --git a/Ghidra/Framework/Generic/src/main/java/generic/theme/GIcon.java b/Ghidra/Framework/Generic/src/main/java/generic/theme/GIcon.java index 85016d3e93..ce5ee16b01 100644 --- a/Ghidra/Framework/Generic/src/main/java/generic/theme/GIcon.java +++ b/Ghidra/Framework/Generic/src/main/java/generic/theme/GIcon.java @@ -162,4 +162,12 @@ public class GIcon implements Icon { return id.equals(other.id); } + @Override + public String toString() { + URL url = getUrl(); + if (url == null) { + return id; + } + return getUrl().toString(); + } } diff --git a/Ghidra/Framework/Generic/src/main/java/generic/util/image/ImageUtils.java b/Ghidra/Framework/Generic/src/main/java/generic/util/image/ImageUtils.java index bf7dc7a8e2..d9067aa6b9 100644 --- a/Ghidra/Framework/Generic/src/main/java/generic/util/image/ImageUtils.java +++ b/Ghidra/Framework/Generic/src/main/java/generic/util/image/ImageUtils.java @@ -243,7 +243,7 @@ public class ImageUtils { * Write the specified image to file in PNG format * @param i the image to save * @param imageFile the file to save the image to - * @throws IOException + * @throws IOException if there is an exception */ public static void writeFile(Image i, File imageFile) throws IOException { ImageIO.write(toRenderedImage(i), "png", imageFile); @@ -253,7 +253,7 @@ public class ImageUtils { * Write the specified image to file in PNG format * @param i the image to save * @param imageFile the file to save the image to - * @throws IOException + * @throws IOException if there is an exception */ public static void writeFile(RenderedImage i, File imageFile) throws IOException { ImageIO.write(i, "png", imageFile); @@ -263,7 +263,7 @@ public class ImageUtils { * Load an image from a file * @param imageFile image source-data file * @return the image, decoded from bytes in specified file - * @throws IOException + * @throws IOException if there is an exception */ public static BufferedImage readFile(File imageFile) throws IOException { return ImageIO.read(imageFile); diff --git a/Ghidra/Framework/Generic/src/main/java/resources/Icons.java b/Ghidra/Framework/Generic/src/main/java/resources/Icons.java index 32edadb29c..f7be54e0f6 100644 --- a/Ghidra/Framework/Generic/src/main/java/resources/Icons.java +++ b/Ghidra/Framework/Generic/src/main/java/resources/Icons.java @@ -38,19 +38,25 @@ public class Icons { public static final Icon HELP_ICON = new GIcon("icon.help"); public static final Icon ADD_ICON = new GIcon("icon.add"); + public static final Icon COPY_ICON = new GIcon("icon.copy"); + public static final Icon CUT_ICON = new GIcon("icon.cut"); + public static final Icon PASTE_ICON = new GIcon("icon.paste"); public static final Icon COLLAPSE_ALL_ICON = new GIcon("icon.collapse.all"); public static final Icon EXPAND_ALL_ICON = new GIcon("icon.expand.all"); public static final Icon CONFIGURE_FILTER_ICON = new GIcon("icon.configure.filter"); + public static final Icon CLEAR_ICON = new GIcon("icon.clear"); public static final Icon DELETE_ICON = new GIcon("icon.delete"); public static final Icon ERROR_ICON = new GIcon("icon.error"); + public static final Icon HOME_ICON = new GIcon("icon.home"); public static final Icon NAVIGATE_ON_INCOMING_EVENT_ICON = new GIcon("icon.navigate.in"); public static final Icon NAVIGATE_ON_OUTGOING_EVENT_ICON = new GIcon("icon.navigate.out"); public static final Icon NOT_ALLOWED_ICON = new GIcon("icon.not.allowed"); public static final Icon OPEN_FOLDER_ICON = new GIcon("icon.folder.open"); + public static final Icon CLOSED_FOLDER_ICON = new GIcon("icon.folder.open"); public static final Icon REFRESH_ICON = new GIcon("icon.refresh"); public static final Icon SORT_ASCENDING_ICON = new GIcon("icon.sort.ascending"); @@ -58,6 +64,8 @@ public class Icons { public static final Icon STOP_ICON = new GIcon("icon.stop"); public static final Icon STRONG_WARNING_ICON = new GIcon("icon.warning.strong"); + public static final Icon WARNING_ICON = new GIcon("icon.warning"); + public static final Icon INFO_ICON = new GIcon("icon.information"); public static final Icon LEFT_ICON = new GIcon("icon.left"); public static final Icon RIGHT_ICON = new GIcon("icon.right"); @@ -68,10 +76,10 @@ public class Icons { /** An version of the RIGHT_ICON with a different color */ public static final Icon RIGHT_ALTERNATE_ICON = new GIcon("icon.right.alt"); - public static final Icon SAVE_AS = - ResourceManager.getImageIcon(new DotDotDotIcon(new GIcon("icon.saveas"))); + public static final Icon SAVE_ICON = new GIcon("icon.save"); + public static final Icon SAVE_AS_ICON = new GIcon("icon.save.as"); - public static final Icon MAKE_SELECTION_ICON = new GIcon("icon.makeselection"); + public static final Icon MAKE_SELECTION_ICON = new GIcon("icon.make.selection"); // Not necessarily re-usable, but this is needed for the help system; these should // probably be moved to the client that uses them, while updating the diff --git a/Ghidra/Framework/Project/certification.manifest b/Ghidra/Framework/Project/certification.manifest index 87a4a528ff..5f90e7b553 100644 --- a/Ghidra/Framework/Project/certification.manifest +++ b/Ghidra/Framework/Project/certification.manifest @@ -8,13 +8,8 @@ ##MODULE IP: Tango Icons - Public Domain Module.manifest||GHIDRA||||END| data/ExtensionPoint.manifest||GHIDRA||||END| +data/project.icons.theme.properties||GHIDRA||||END| data/project.theme.properties||GHIDRA||||END| -src/main/help/help/TOC_Source.xml||GHIDRA||||END| -src/main/help/help/topics/Theming/Theming.htm||GHIDRA||||END| -src/main/help/help/topics/Theming/images/ColorEditor.png||GHIDRA||||END| -src/main/help/help/topics/Theming/images/FontEditor.png||GHIDRA||||END| -src/main/help/help/topics/Theming/images/IconEditor.png||GHIDRA||||END| -src/main/help/help/topics/Theming/images/ThemeDialog.png||GHIDRA||||END| src/main/java/ghidra/framework/cmd/package.html||GHIDRA||reviewed||END| src/main/java/ghidra/framework/data/package.html||GHIDRA||reviewed||END| src/main/java/ghidra/framework/model/package.html||GHIDRA||||END| diff --git a/Ghidra/Framework/Project/data/project.icons.theme.properties b/Ghidra/Framework/Project/data/project.icons.theme.properties new file mode 100644 index 0000000000..5a8f6132d4 --- /dev/null +++ b/Ghidra/Framework/Project/data/project.icons.theme.properties @@ -0,0 +1,16 @@ + +[Defaults] + + +icon.project.data.file.ghidra.unsupported = unknownFile.gif +icon.project.data.file.ghidra.checked.out = icon.check +icon.project.data.file.ghidra.checked.out.exclusive = checkex.png +icon.project.data.file.ghidra.hijacked = small_hijack.gif +icon.project.data.file.ghidra.read.only = user-busy.png [size(10,10)] +icon.project.data.file.ghidra.not.latest = checkNotLatest.gif + + + +[Dark Defaults] + + diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java index 50c2513819..a0b0c7413c 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java @@ -26,6 +26,7 @@ import db.DBHandle; import db.Field; import db.buffers.*; import generic.theme.GColor; +import generic.theme.GIcon; import ghidra.framework.client.ClientUtil; import ghidra.framework.client.NotConnectedException; import ghidra.framework.model.*; @@ -38,25 +39,21 @@ import ghidra.util.exception.*; import ghidra.util.task.TaskMonitor; import ghidra.util.task.TaskMonitorAdapter; import resources.MultiIcon; -import resources.ResourceManager; import resources.icons.TranslateIcon; public class GhidraFileData { - private static boolean alwaysMerge = System.getProperty("ForceMerge") != null; + private static final boolean ALWAYS_MERGE = System.getProperty("ForceMerge") != null; - public static final Icon UNSUPPORTED_FILE_ICON = - ResourceManager.loadImage("images/unknownFile.gif"); - - public static final Icon CHECKED_OUT_ICON = ResourceManager.loadImage("images/check.png"); - public static final Icon CHECKED_OUT_EXCLUSIVE_ICON = - ResourceManager.loadImage("images/checkex.png"); - public static final Icon HIJACKED_ICON = ResourceManager.loadImage("images/small_hijack.gif"); + //@formatter:off + public static final Icon UNSUPPORTED_FILE_ICON = new GIcon("icon.project.data.file.ghidra.unsupported"); + public static final Icon CHECKED_OUT_ICON = new GIcon("icon.project.data.file.ghidra.checked.out"); + public static final Icon CHECKED_OUT_EXCLUSIVE_ICON = new GIcon("icon.project.data.file.ghidra.checked.out.exclusive"); + public static final Icon HIJACKED_ICON = new GIcon("icon.project.data.file.ghidra.hijacked"); public static final Icon VERSION_ICON = new VersionIcon(); - public static final Icon READ_ONLY_ICON = - ResourceManager.loadImage("images/user-busy.png", 10, 10); - public static final Icon NOT_LATEST_CHECKED_OUT_ICON = - ResourceManager.loadImage("images/checkNotLatest.gif"); + public static final Icon READ_ONLY_ICON = new GIcon("icon.project.data.file.ghidra.read.only"); + public static final Icon NOT_LATEST_CHECKED_OUT_ICON = new GIcon("icon.project.data.file.ghidra.not.latest"); + //@formatter:on private ProjectFileManager fileManager; private LocalFileSystem fileSystem; @@ -1028,7 +1025,7 @@ public class GhidraFileData { busy = true; } try { - boolean quickCheckin = alwaysMerge ? false : quickCheckin(checkinHandler, monitor); + boolean quickCheckin = ALWAYS_MERGE ? false : quickCheckin(checkinHandler, monitor); if (!quickCheckin) { diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/UndoActionDialog.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/UndoActionDialog.java index dada79b1f4..30aa8c8098 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/UndoActionDialog.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/main/datatree/UndoActionDialog.java @@ -43,11 +43,7 @@ public class UndoActionDialog extends DialogComponentProvider { private JCheckBox saveCopyCB; private int actionID; - /** - * Constructor - * @param fileList list of DomainFile objects to show in the list - */ - public UndoActionDialog(String title, ImageIcon icon, String helpTag, String actionString, + public UndoActionDialog(String title, Icon icon, String helpTag, String actionString, List fileList) { super(title, true); setHelpLocation(new HelpLocation(GenericHelpTopics.REPOSITORY, helpTag)); @@ -58,28 +54,18 @@ public class UndoActionDialog extends DialogComponentProvider { addCancelButton(); } - /* (non-Javadoc) - * @see ghidra.util.bean.GhidraDialog#cancelCallback() - */ @Override protected void cancelCallback() { actionID = CANCEL; close(); } - /* (non-Javadoc) - * @see ghidra.util.bean.GhidraDialog#okCallback() - */ @Override protected void okCallback() { actionID = OK; close(); } - /** - * Show the dialog; return an ID for the action that the user chose. - * @return OK, or CANCEL - */ public int showDialog(PluginTool tool) { tool.showDialog(this); return actionID; @@ -93,7 +79,7 @@ public class UndoActionDialog extends DialogComponentProvider { return saveCopyCB.isSelected(); } - private JPanel buildMainPanel(String actionString, ImageIcon icon) { + private JPanel buildMainPanel(String actionString, Icon icon) { JPanel innerPanel = new JPanel(); innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.Y_AXIS)); innerPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginTool.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginTool.java index ac51962f6f..07fe6bc906 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginTool.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/plugintool/PluginTool.java @@ -25,8 +25,7 @@ import java.util.*; import java.util.List; import java.util.concurrent.atomic.AtomicReference; -import javax.swing.ImageIcon; -import javax.swing.JComponent; +import javax.swing.*; import org.jdom.Element; @@ -214,7 +213,7 @@ public abstract class PluginTool extends AbstractDockingTool { protected void installHomeButton() { - ImageIcon homeIcon = ApplicationInformationDisplayFactory.getHomeIcon(); + Icon homeIcon = ApplicationInformationDisplayFactory.getHomeIcon(); if (homeIcon == null) { Msg.debug(this, "If you would like a button to show the Front End, then set the home icon"); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkDBManager.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkDBManager.java index e39f2cb999..8a4251698b 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkDBManager.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkDBManager.java @@ -19,7 +19,7 @@ import java.awt.Color; import java.io.IOException; import java.util.*; -import javax.swing.ImageIcon; +import javax.swing.Icon; import org.apache.commons.lang3.StringUtils; @@ -235,7 +235,7 @@ public class BookmarkDBManager implements BookmarkManager, ErrorHandler, Manager } @Override - public BookmarkType defineType(String type, ImageIcon icon, Color color, int priority) { + public BookmarkType defineType(String type, Icon icon, Color color, int priority) { lock.acquire(); try { String validatedType = StringUtils.trim(type); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkTypeDB.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkTypeDB.java index bd6092e0e9..d178fe0894 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkTypeDB.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/bookmark/BookmarkTypeDB.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,16 +15,16 @@ */ package ghidra.program.database.bookmark; -import ghidra.program.model.listing.BookmarkType; - import java.awt.Color; -import javax.swing.ImageIcon; +import javax.swing.Icon; + +import ghidra.program.model.listing.BookmarkType; public class BookmarkTypeDB implements BookmarkType { private int typeId; private String type; - private ImageIcon icon; + private Icon icon; private Color markerColor; private int priority = -1; private boolean hasMarks; // flag to indicate if this type is stored in the program. @@ -38,6 +37,7 @@ public class BookmarkTypeDB implements BookmarkType { /* * @see ghidra.program.model.listing.BookmarkType#getTypeString() */ + @Override public String getTypeString() { return type; } @@ -46,19 +46,22 @@ public class BookmarkTypeDB implements BookmarkType { hasMarks = b; } + @Override public boolean hasBookmarks() { return hasMarks; } + @Override public int getTypeId() { return typeId; } - void setIcon(ImageIcon icon) { + void setIcon(Icon icon) { this.icon = icon; } - public ImageIcon getIcon() { + @Override + public Icon getIcon() { return icon; } @@ -66,6 +69,7 @@ public class BookmarkTypeDB implements BookmarkType { this.markerColor = markerColor; } + @Override public Color getMarkerColor() { return markerColor; } @@ -74,6 +78,7 @@ public class BookmarkTypeDB implements BookmarkType { this.priority = priority; } + @Override public int getMarkerPriority() { return priority; } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/BookmarkManager.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/BookmarkManager.java index 4a40925eda..86b234d1c9 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/BookmarkManager.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/BookmarkManager.java @@ -18,7 +18,7 @@ package ghidra.program.model.listing; import java.awt.Color; import java.util.Iterator; -import javax.swing.ImageIcon; +import javax.swing.Icon; import ghidra.program.model.address.Address; import ghidra.program.model.address.AddressSetView; @@ -64,7 +64,7 @@ public interface BookmarkManager { * @return bookmark type object * @throws IllegalArgumentException if any of the arguments are null or if the type is empty */ - BookmarkType defineType(String type, ImageIcon icon, Color color, int priority); + BookmarkType defineType(String type, Icon icon, Color color, int priority); /** * Returns list of known bookmark types diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/BookmarkType.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/BookmarkType.java index b06c9a6ecf..d37fb30a86 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/BookmarkType.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/listing/BookmarkType.java @@ -17,7 +17,7 @@ package ghidra.program.model.listing; import java.awt.Color; -import javax.swing.ImageIcon; +import javax.swing.Icon; /** * Interface for bookmark types. @@ -41,7 +41,7 @@ public interface BookmarkType { * set by a plugin. * @return the icon. */ - public ImageIcon getIcon(); + public Icon getIcon(); /** * Returns marker color associated with this type or null if one has not been