├── .gitignore ├── media └── screenshots │ ├── screencap1.png │ ├── vscodetheme1.png │ └── vscodetheme2.png ├── plugins ├── idaskins │ ├── themes │ │ ├── vscode-dark │ │ │ ├── preview.png │ │ │ ├── icons │ │ │ │ ├── blank.png │ │ │ │ ├── close.png │ │ │ │ ├── drag.png │ │ │ │ ├── expand.png │ │ │ │ ├── float.png │ │ │ │ ├── menu.png │ │ │ │ ├── fullscreen.png │ │ │ │ └── drag-vertical.png │ │ │ ├── manifest.json │ │ │ ├── vscode-dark.clr │ │ │ ├── stylesheet.qss │ │ │ └── stylesheet.less │ │ ├── adwaita-dark │ │ │ ├── preview.png │ │ │ ├── icons │ │ │ │ └── expand.png │ │ │ ├── manifest.json │ │ │ ├── adwaita-dark.clr │ │ │ └── stylesheet.qss │ │ ├── idadark-unis │ │ │ ├── preview.png │ │ │ ├── icons │ │ │ │ ├── expand.png │ │ │ │ ├── spacer.png │ │ │ │ ├── down_arrow.png │ │ │ │ ├── rc │ │ │ │ │ ├── close.png │ │ │ │ │ ├── undock.png │ │ │ │ │ ├── sizegrip.png │ │ │ │ │ ├── up_arrow.png │ │ │ │ │ ├── Hmovetoolbar.png │ │ │ │ │ ├── Vmovetoolbar.png │ │ │ │ │ ├── branch_open.png │ │ │ │ │ ├── close-hover.png │ │ │ │ │ ├── down_arrow.png │ │ │ │ │ ├── left_arrow.png │ │ │ │ │ ├── right_arrow.png │ │ │ │ │ ├── transparent.png │ │ │ │ │ ├── Hsepartoolbar.png │ │ │ │ │ ├── Vsepartoolbar.png │ │ │ │ │ ├── branch_closed.png │ │ │ │ │ ├── branch_open-on.png │ │ │ │ │ ├── close-pressed.png │ │ │ │ │ ├── radio_checked.png │ │ │ │ │ ├── branch_closed-on.png │ │ │ │ │ ├── checkbox_checked.png │ │ │ │ │ ├── radio_unchecked.png │ │ │ │ │ ├── stylesheet-vline.png │ │ │ │ │ ├── up_arrow_disabled.png │ │ │ │ │ ├── checkbox_unchecked.png │ │ │ │ │ ├── down_arrow_disabled.png │ │ │ │ │ ├── left_arrow_disabled.png │ │ │ │ │ ├── radio_checked_focus.png │ │ │ │ │ ├── checkbox_checked_focus.png │ │ │ │ │ ├── checkbox_indeterminate.png │ │ │ │ │ ├── radio_checked_disabled.png │ │ │ │ │ ├── radio_unchecked_focus.png │ │ │ │ │ ├── right_arrow_disabled.png │ │ │ │ │ ├── stylesheet-branch-end.png │ │ │ │ │ ├── stylesheet-branch-more.png │ │ │ │ │ ├── checkbox_unchecked_focus.png │ │ │ │ │ ├── radio_unchecked_disabled.png │ │ │ │ │ ├── checkbox_checked_disabled.png │ │ │ │ │ ├── checkbox_unchecked_disabled.png │ │ │ │ │ ├── checkbox_indeterminate_focus.png │ │ │ │ │ └── checkbox_indeterminate_disabled.png │ │ │ │ ├── sizegrip.png │ │ │ │ ├── up_arrow.png │ │ │ │ ├── Hmovetoolbar.png │ │ │ │ ├── Vmovetoolbar.png │ │ │ │ ├── down_expand.png │ │ │ │ ├── Hsepartoolbar.png │ │ │ │ ├── Vsepartoolbar.png │ │ │ │ ├── radio_checked.png │ │ │ │ ├── radio_unchecked.png │ │ │ │ ├── checkbox_checked.png │ │ │ │ ├── up_arrow_disabled.png │ │ │ │ ├── checkbox_unchecked.png │ │ │ │ ├── down_arrow_disabled.png │ │ │ │ ├── radio_checked_focus.png │ │ │ │ ├── checkbox_checked_focus.png │ │ │ │ ├── checkbox_indeterminate.png │ │ │ │ ├── radio_checked_disabled.png │ │ │ │ ├── radio_unchecked_focus.png │ │ │ │ ├── checkbox_checked_disabled.png │ │ │ │ ├── checkbox_unchecked_focus.png │ │ │ │ ├── radio_unchecked_disabled.png │ │ │ │ ├── checkbox_unchecked_disabled.png │ │ │ │ ├── checkbox_indeterminate_focus.png │ │ │ │ └── checkbox_indeterminate_disabled.png │ │ │ ├── manifest.json │ │ │ ├── myColors.clr │ │ │ └── stylesheet.qss │ │ ├── idaskins-dark │ │ │ ├── preview.png │ │ │ ├── icons │ │ │ │ ├── expand.png │ │ │ │ └── spacer.png │ │ │ ├── manifest.json │ │ │ ├── ida-consonance.clr │ │ │ └── stylesheet.qss │ │ └── ida-default │ │ │ ├── manifest.json │ │ │ ├── stylesheet.qss │ │ │ └── ida-default.clr │ ├── __init__.py │ ├── settings.py │ ├── idafontconfig.py │ ├── thememanifest.py │ ├── ui │ │ ├── ObjectInspector.ui │ │ └── ThemeSelector.ui │ ├── objectinspector.py │ ├── clrapplier.py │ ├── themeselector.py │ └── plugin.py └── idaskins.py ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .vscode 3 | *.pyc -------------------------------------------------------------------------------- /media/screenshots/screencap1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/media/screenshots/screencap1.png -------------------------------------------------------------------------------- /media/screenshots/vscodetheme1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/media/screenshots/vscodetheme1.png -------------------------------------------------------------------------------- /media/screenshots/vscodetheme2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/media/screenshots/vscodetheme2.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/vscode-dark/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/vscode-dark/preview.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/adwaita-dark/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/adwaita-dark/preview.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/preview.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idaskins-dark/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idaskins-dark/preview.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/vscode-dark/icons/blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/vscode-dark/icons/blank.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/vscode-dark/icons/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/vscode-dark/icons/close.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/vscode-dark/icons/drag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/vscode-dark/icons/drag.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/vscode-dark/icons/expand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/vscode-dark/icons/expand.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/vscode-dark/icons/float.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/vscode-dark/icons/float.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/vscode-dark/icons/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/vscode-dark/icons/menu.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/adwaita-dark/icons/expand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/adwaita-dark/icons/expand.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/expand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/expand.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/spacer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/spacer.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idaskins-dark/icons/expand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idaskins-dark/icons/expand.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idaskins-dark/icons/spacer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idaskins-dark/icons/spacer.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/down_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/down_arrow.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/close.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/undock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/undock.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/sizegrip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/sizegrip.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/up_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/up_arrow.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/vscode-dark/icons/fullscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/vscode-dark/icons/fullscreen.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/Hmovetoolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/Hmovetoolbar.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/Vmovetoolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/Vmovetoolbar.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/down_expand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/down_expand.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/sizegrip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/sizegrip.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/up_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/up_arrow.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/vscode-dark/icons/drag-vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/vscode-dark/icons/drag-vertical.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/Hsepartoolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/Hsepartoolbar.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/Vsepartoolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/Vsepartoolbar.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/radio_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/radio_checked.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/radio_unchecked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/radio_unchecked.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/Hmovetoolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/Hmovetoolbar.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/Vmovetoolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/Vmovetoolbar.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/branch_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/branch_open.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/close-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/close-hover.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/down_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/down_arrow.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/left_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/left_arrow.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/right_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/right_arrow.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/transparent.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/checkbox_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/checkbox_checked.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/Hsepartoolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/Hsepartoolbar.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/Vsepartoolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/Vsepartoolbar.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/branch_closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/branch_closed.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/branch_open-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/branch_open-on.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/close-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/close-pressed.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/radio_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/radio_checked.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/up_arrow_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/up_arrow_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/checkbox_unchecked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/checkbox_unchecked.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/down_arrow_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/down_arrow_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/radio_checked_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/radio_checked_focus.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/branch_closed-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/branch_closed-on.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_checked.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/radio_unchecked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/radio_unchecked.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/stylesheet-vline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/stylesheet-vline.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/up_arrow_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/up_arrow_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/checkbox_checked_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/checkbox_checked_focus.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/checkbox_indeterminate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/checkbox_indeterminate.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/radio_checked_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/radio_checked_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/radio_unchecked_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/radio_unchecked_focus.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_unchecked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_unchecked.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/down_arrow_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/down_arrow_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/left_arrow_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/left_arrow_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/radio_checked_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/radio_checked_focus.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/checkbox_checked_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/checkbox_checked_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/checkbox_unchecked_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/checkbox_unchecked_focus.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/radio_unchecked_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/radio_unchecked_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_checked_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_checked_focus.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_indeterminate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_indeterminate.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/radio_checked_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/radio_checked_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/radio_unchecked_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/radio_unchecked_focus.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/right_arrow_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/right_arrow_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/stylesheet-branch-end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/stylesheet-branch-end.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/stylesheet-branch-more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/stylesheet-branch-more.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/checkbox_unchecked_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/checkbox_unchecked_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_unchecked_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_unchecked_focus.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/radio_unchecked_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/radio_unchecked_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/checkbox_indeterminate_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/checkbox_indeterminate_focus.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_checked_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_checked_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_unchecked_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_unchecked_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/checkbox_indeterminate_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/checkbox_indeterminate_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_indeterminate_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_indeterminate_focus.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_indeterminate_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyantific/IDASkins/HEAD/plugins/idaskins/themes/idadark-unis/icons/rc/checkbox_indeterminate_disabled.png -------------------------------------------------------------------------------- /plugins/idaskins/themes/ida-default/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "theme_name": "IDA default", 3 | "author": "Hex-Rays", 4 | "version": "v1.0", 5 | "clr_file": "ida-default.clr", 6 | "qss_file": "stylesheet.qss" 7 | } -------------------------------------------------------------------------------- /plugins/idaskins.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import, division, print_function 2 | 3 | def PLUGIN_ENTRY(*args, **kwargs): 4 | from idaskins.plugin import IdaSkinsPlugin 5 | return IdaSkinsPlugin(*args, **kwargs) 6 | -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "theme_name": "IDA-Dark by UNIS", 3 | "author": "UNIS", 4 | "version": "v1.0", 5 | "preview_image": "preview.png", 6 | "clr_file": "myColors.clr", 7 | "qss_file": "stylesheet.qss" 8 | } -------------------------------------------------------------------------------- /plugins/idaskins/themes/idaskins-dark/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "theme_name": "IDASkins dark", 3 | "author": "athre0z", 4 | "version": "v2.0", 5 | "preview_image": "preview.png", 6 | "clr_file": "ida-consonance.clr", 7 | "qss_file": "stylesheet.qss" 8 | } -------------------------------------------------------------------------------- /plugins/idaskins/themes/adwaita-dark/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "theme_name": "adwaita-dark", 3 | "author": "williballenthin", 4 | "version": "v1.0", 5 | "preview_image": "preview.png", 6 | "clr_file": "adwaita-dark.clr", 7 | "qss_file": "stylesheet.qss" 8 | } -------------------------------------------------------------------------------- /plugins/idaskins/themes/vscode-dark/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "theme_name": "VSCode dark", 3 | "author": "Microsoft (ported by jinmo)", 4 | "version": "v0.1", 5 | "preview_image": "preview.png", 6 | "clr_file": "vscode-dark.clr", 7 | "qss_file": "stylesheet.qss" 8 | } -------------------------------------------------------------------------------- /plugins/idaskins/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import, print_function, division 2 | 3 | import os 4 | 5 | VERSION = 'v2.1.0' 6 | PLUGIN_DIR = os.path.dirname(os.path.realpath(__file__)) 7 | IDA_DIR = os.path.abspath(os.path.join(PLUGIN_DIR, '..', '..')) 8 | UI_DIR = os.path.join(PLUGIN_DIR, 'ui') 9 | THEMES_DIR = os.path.join(PLUGIN_DIR, 'themes') 10 | -------------------------------------------------------------------------------- /plugins/idaskins/themes/ida-default/stylesheet.qss: -------------------------------------------------------------------------------- 1 | CustomIDAMemo { 2 | font-family: ""; 3 | font-size: ; 4 | font-style: ; 5 | font-weight: ; 6 | } 7 | 8 | IDAView { 9 | font-family: ""; 10 | font-size: ; 11 | font-style: ; 12 | font-weight: ; 13 | } 14 | 15 | hexview_t { 16 | font-family: ""; 17 | font-size: ; 18 | font-style: ; 19 | font-weight: ; 20 | } -------------------------------------------------------------------------------- /plugins/idaskins/settings.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import, division, print_function 2 | 3 | from PyQt5.QtCore import QSettings 4 | 5 | SELECTED_THEME_DIR_KEY = 'selectedThemeDir' 6 | FIRST_START_KEY = 'firstStart' 7 | 8 | 9 | class Settings(object): 10 | def __init__(self): 11 | self._settings = QSettings("athre0z", "IDASkins") 12 | 13 | @property 14 | def selected_theme_dir(self): 15 | theme_dir = self._settings.value(SELECTED_THEME_DIR_KEY, None) 16 | return None if theme_dir is None else theme_dir.encode() 17 | 18 | @selected_theme_dir.setter 19 | def selected_theme_dir(self, v): 20 | assert isinstance(v, str) 21 | self._settings.setValue(SELECTED_THEME_DIR_KEY, v) 22 | 23 | @property 24 | def first_start(self): 25 | # PyQt seems to be returning unicode strings instead of QVariant. 26 | return not self._settings.value(FIRST_START_KEY, True) in [u'false', False] 27 | 28 | @first_start.setter 29 | def first_start(self, v): 30 | assert isinstance(v, bool) 31 | self._settings.setValue(FIRST_START_KEY, v) 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 Joel Höner 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /plugins/idaskins/idafontconfig.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import, division, print_function 2 | 3 | import os, sys 4 | 5 | import idaapi 6 | from PyQt5.QtGui import QFontDatabase 7 | 8 | _type_key_table = { 9 | 'disas': 'Font\\Disassembly', 10 | 'hexview': 'Font\\Hex view', 11 | 'debug_regs': 'Font\\Debug registers', 12 | 'text_input': 'Font\\Text input', 13 | 'output_wnd': 'Font\\Output window', 14 | } 15 | 16 | 17 | class IdaFontConfig(object): 18 | """Read access to IDA's (undocumented) font config.""" 19 | def __init__(self, type): 20 | self._key = _type_key_table[type] 21 | 22 | @property 23 | def family(self): 24 | return idaapi.reg_read_string( 25 | 'Name', 26 | self._key, 27 | 'Consolas' 28 | if os.name == 'nt' else 29 | QFontDatabase.systemFont(QFontDatabase.FixedFont).family().encode() 30 | ) 31 | 32 | @property 33 | def size(self): 34 | return idaapi.reg_read_int('Size', 10, self._key) 35 | 36 | @property 37 | def bold(self): 38 | return idaapi.reg_read_bool('Bold', False, self._key) 39 | 40 | @property 41 | def italic(self): 42 | return idaapi.reg_read_bool('Italic', False, self._key) 43 | -------------------------------------------------------------------------------- /plugins/idaskins/thememanifest.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import, division, print_function 2 | 3 | import json 4 | 5 | 6 | class ManifestError(Exception): 7 | """Something is wrong with the manifest format.""" 8 | pass 9 | 10 | 11 | def _make_property(name): 12 | @property 13 | def getter(self): 14 | return self._data.get(name) 15 | return getter 16 | 17 | 18 | _required_keys = {'qss_file', 'theme_name', 'version', 'author'} 19 | 20 | 21 | class ThemeManifest(object): 22 | """Theme manifest. Read access to basic info about themes.""" 23 | def __init__(self, file): 24 | try: 25 | self._data = json.load(file) 26 | except (TypeError, ValueError) as exc: 27 | raise ManifestError('Bad manifest: ' + str(exc)) 28 | 29 | missing_keys = _required_keys - set(self._data.keys()) 30 | if missing_keys: 31 | raise ManifestError( 32 | 'Bad manifest: missing required key(s): {}'.format( 33 | ', '.join(missing_keys) 34 | ) 35 | ) 36 | 37 | 38 | # Required. 39 | theme_name = _make_property('theme_name') 40 | author = _make_property('author') 41 | version = _make_property('version') 42 | qss_file = _make_property('qss_file') 43 | 44 | # Optional. 45 | preview_image = _make_property('preview_image') 46 | notes = _make_property('notes') 47 | clr_file = _make_property('clr_file') 48 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | IDA Skins 2 | ========= 3 | 4 | Plugin providing advanced skinning support for IDA Pro utilizing [Qt 5 | stylesheets](http://qt-project.org/doc/qt-4.7/stylesheet.html), similar to CSS. 6 | 7 | ## Important: This plugin is now deprecated 8 | IDA 7.3 [added theming support](https://www.hex-rays.com/products/ida/7.3/index.shtml) directly into IDA itself and ships with a forked version of the `ISASkins dark` theme. 9 | We will keep maintaining this plugin for a while for users of old IDA verions, but it will be shelved eventually. 10 | New themes should be developed for IDA directly. 11 | 12 | ## Screenshot 13 | 14 | #### `VSCode dark` theme 15 | ![Screenshot 1](https://raw.githubusercontent.com/athre0z/ida-skins/master/media/screenshots/vscodetheme1.png) 16 | ![Screenshot 2](https://raw.githubusercontent.com/athre0z/ida-skins/master/media/screenshots/vscodetheme2.png) 17 | 18 | #### `ISASkins dark` theme 19 | ![Screenshot](https://raw.githubusercontent.com/athre0z/ida-skins/master/media/screenshots/screencap1.png) 20 | 21 | ## Download 22 | [Download the latest version from GitHub](https://github.com/athre0z/ida-skins/releases/latest) 23 | 24 | ## Installation 25 | Copy the contents of the `plugins` directory into the `plugins` directory of 26 | your IDA installation. 27 | 28 | ## Theming 29 | Theming IDA using IDASkins works using [Qt 30 | stylesheets](http://qt-project.org/doc/qt-4.8/stylesheet.html). For information 31 | on the most important IDA-specific UI elements, take a look in the enclosed 32 | default `stylesheet.qss`. **Pull-requests for new themes are very welcome!** 33 | -------------------------------------------------------------------------------- /plugins/idaskins/ui/ObjectInspector.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | ObjectInspector 4 | 5 | 6 | 7 | 0 8 | 0 9 | 501 10 | 326 11 | 12 | 13 | 14 | Object inspector 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Select parent 23 | 24 | 25 | 26 | 27 | 28 | 29 | Press F7 when hovering a widget with the cursor to select it. 30 | 31 | 32 | 33 | 34 | 35 | 36 | Qt::Horizontal 37 | 38 | 39 | 40 | 40 41 | 20 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /plugins/idaskins/objectinspector.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import, division, print_function 2 | 3 | import os 4 | 5 | from idaskins import UI_DIR 6 | from PyQt5 import uic 7 | from PyQt5.Qt import qApp 8 | from PyQt5.QtCore import Qt 9 | from PyQt5.QtGui import QCursor, QFont, QKeySequence 10 | from PyQt5.QtWidgets import QShortcut, QWidget 11 | 12 | Ui_ObjectInspector, ObjectInspectorBase = uic.loadUiType( 13 | os.path.join(UI_DIR, 'ObjectInspector.ui') 14 | ) 15 | 16 | 17 | class ObjectInspector(ObjectInspectorBase): 18 | """ 19 | Rudimentary Qt object inspector. 20 | Allows for easier finding of object names and classes 21 | for usage in QSS stylesheets. 22 | """ 23 | def __init__(self, *args, **kwargs): 24 | super(ObjectInspector, self).__init__(*args, **kwargs) 25 | 26 | self._selected_widget = None 27 | self._ui = Ui_ObjectInspector() 28 | self._ui.setupUi(self) 29 | 30 | # Make everything monospace. 31 | font = QFont('Monospace') 32 | font.setStyleHint(QFont.TypeWriter) 33 | self._ui.teInspectionResults.setFont(font) 34 | 35 | # Register signals. 36 | self._update_key = QShortcut(QKeySequence(Qt.Key_F7), self) 37 | self._ui.btnSelectParent.released.connect(self.select_parent) 38 | self._update_key.activated.connect(self.update_inspection) 39 | 40 | def update_inspection(self): 41 | widget = qApp.widgetAt(QCursor.pos()) 42 | self.update_selected_widget(widget) 43 | 44 | def select_parent(self): 45 | if self._selected_widget: 46 | parent = self._selected_widget.parent() 47 | if parent and parent.inherits('QWidget'): 48 | self.update_selected_widget(parent) 49 | 50 | def update_selected_widget(self, widget): 51 | if self._selected_widget: 52 | self._selected_widget.destroyed.disconnect( 53 | self.on_selected_widget_destroyed 54 | ) 55 | 56 | self._selected_widget = widget 57 | 58 | if widget: 59 | self._ui.btnSelectParent.setEnabled(widget.parent() is not None) 60 | self._ui.teInspectionResults.setText(( 61 | "Type: {}\n" 62 | "Name: {}\n" 63 | "Number of children: {}\n" 64 | "QSS: {}" 65 | ).format( 66 | widget.metaObject().className(), 67 | widget.objectName() or '', 68 | len(widget.children()), 69 | widget.styleSheet() or '', 70 | )) 71 | 72 | self._selected_widget.destroyed.connect( 73 | self.on_selected_widget_destroyed 74 | ) 75 | else: 76 | self._ui.teInspectionResults.setText('') 77 | 78 | def on_selected_widget_destroyed(self, obj): 79 | self._selected_widget = None 80 | -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/myColors.clr: -------------------------------------------------------------------------------- 1 | [DISASM] 2 | 000000 //Instruction 3 | aaaaaa //Directive 4 | f3c5ff //Macro name 5 | 7e6082 //Register name 6 | 666666 //Other keywords 7 | ffffff //Dummy data name 8 | b9ebeb //Dummy code name 9 | b9ebeb //Dummy unexplored name 10 | bbecff //Hidden name 11 | c0c0c0 //Library function name 12 | 00d269 //Local variable name 13 | 00ff00 //Regular data name 14 | 3250d2 //Regular code name 15 | 4646ff //Regular unexplored name 16 | 7faaff //Demangled name 17 | 617c7c //Segment name 18 | 3250d2 //Imported name 19 | 008080 //Suspicious constant 20 | 3734ff //Char in instruction 21 | c0c0c0 //String in instruction 22 | 595959 //Number in instruction 23 | f3c5ff //Char in data 24 | ffaaff //String in data 25 | 00d2ff //Number in data 26 | ffff00 //Code reference 27 | 0080ff //Data reference 28 | 00d2ff //Code reference to tail 29 | 00d69d //Data reference to tail 30 | 7e07df //Automatic comment 31 | 00d269 //Regular comment 32 | 00f379 //Repeatable comment 33 | 3250d2 //Extra line 34 | ababab //Collapsed line 35 | adad73 //Line prefix: library function 36 | fd5aff //Line prefix: regular function 37 | 7fffff //Line prefix: instruction 38 | 00ffaa //Line prefix: data 39 | 00d2ff //Line prefix: unexplored 40 | ffaaff //Line prefix: externs 41 | 00ffff //Line prefix: current item 42 | 000000 //Line prefix: current line 43 | 2d2d2d //Punctuation 44 | c34100 //Opcode bytes 45 | ffff00 //Manual operand 46 | 666666 //Error 47 | 0000aa //Default color 48 | 617c7c //Selected 49 | 009d9d //Library function 50 | ff55ff //Regular function 51 | 000000 //Single instruction 52 | 00aaff //Data bytes 53 | 000000 //Unexplored byte 54 | [NAVBAR] 55 | c28100 //Library function 56 | 007ec2 //Regular function 57 | 0000c2 //Instruction 58 | 99c2c2 //Data item 59 | 007878 //Unexplored 60 | c200c2 //External symbol 61 | 0000ca //Errors 62 | 4a4a4a //Gaps 63 | 00ff80 //Cursor 64 | 005cbe //Address 65 | [DEBUG] 66 | ffd060 //Current IP 67 | ffa0a0 //Current IP (Enabled) 68 | 408020 //Current IP (Disabled) 69 | ffffcc //Current IP (Unavailible) 70 | 000076 //Address 71 | 00ff00 //Address (Enabled) 72 | 004080 //Address (Disabled) 73 | 0080ff //Address (Unavailible) 74 | 000000 //Registers 75 | ff0000 //Registers (Changed) 76 | 800080 //Registers (Edited) 77 | [ARROW] 78 | 34466c //Jump in current function 79 | dede00 //Jump external to function 80 | 00aaff //Jump under the cursor 81 | 008000 //Jump target 82 | ff4040 //Register target 83 | [GRAPH] 84 | b2b2b2 //Top color 85 | b2b2b2 //Bottom color 86 | f5f5f5 //Normal title 87 | 989faa //Selected title 88 | 54585e //Current title 89 | 00ffff //Group frame 90 | 242424 //Node shadow 91 | 003900 //Highlight color 1 92 | 00006d //Highlight color 2 93 | 0000ff //Foreign node 94 | cb4300 //Normal edge 95 | 009100 //Yes edge 96 | 0000bc //No edge 97 | ffaaaa //Highlighted edge 98 | 008ec6 //Current edge 99 | [MISC] 100 | 212121 //Message text 101 | d4d4d4 //Message background 102 | 404080 //Patched bytes 103 | 0080ff //Unsaved changes 104 | 004040 //Highlight color 105 | 262626 //Hint color 106 | -------------------------------------------------------------------------------- /plugins/idaskins/themes/adwaita-dark/adwaita-dark.clr: -------------------------------------------------------------------------------- 1 | [DISASM] 2 | 000000 // 3 | ff0000 //Default color 4 | a46534 //Regular comment 5 | 808080 //Repeatable comment 6 | 808080 //Automatic comment 7 | 36342e //Instruction 8 | 800000 //Dummy Data Name 9 | a46534 //Regular Data Name 10 | a46534 //Demangled Name 11 | 800000 //Punctuation 12 | 069a4e //Char constant in instruction 13 | 00ff00 //String constant in instruction 14 | 069a4e //Numeric constant in instruction 15 | 2929ef //Void operand 16 | 069a4e //Code reference 17 | ff8080 //Data reference 18 | 0000ff //Code reference to tail byte 19 | 008080 //Data reference to tail byte 20 | 010101 //Error or problem 21 | c0c0c0 //Line prefix 22 | a46534 //Binary line prefix bytes 23 | a46534 //Extra line 24 | ff0000 //Alternative operand 25 | 808080 //Hidden name 26 | ff8080 //Library function name 27 | 008000 //Local variable name 28 | 800000 //Dummy code name 29 | a46534 //Assembler directive 30 | 800080 //Macro 31 | 069a4e //String constant in data directive 32 | 008000 //Char constant in data directive 33 | 069a4e //Numeric constant in data directive 34 | 800000 //Keywords 35 | 800000 //Register name 36 | 2929ef //Imported name 37 | 008080 //Segment name 38 | 800000 //Dummy unknown name 39 | cf9f72 //Regular code name 40 | 800000 //Regular unknown name 41 | a46534 //Collapsed line 42 | 000000 //Max color number 43 | cfd7d3 //Line prefix: library function 44 | eceeee //Line prefix: regular function 45 | ffff00 //Line prefix: instruction 46 | 000000 //Line prefix: data 47 | 000080 //Line prefix: unexplored 48 | 808080 //Line prefix: externs 49 | 008080 //Line prefix: current item 50 | 2929ef //Line prefix: current line 51 | 000000 //Punctuation 52 | ff0000 //Opcode bytes 53 | 000000 //Manual operand 54 | [NAVBAR] 55 | ffffaa //Library function 56 | e8a200 //Regular function 57 | 577ab9 //Instruction 58 | c0c0c0 //Data item 59 | 6bb6b6 //Unexplored 60 | ffa6ff //External symbol 61 | 5b5bff //Errors 62 | 000000 //Gaps 63 | 7fffff //Cursor 64 | 00aaff //Address 65 | [DEBUG] 66 | ffd060 //Current IP 67 | ffa0a0 //Current IP (Enabled) 68 | 408020 //Current IP (Disabled) 69 | ffffcc //Current IP (Unavailible) 70 | 0000ff //Address 71 | 00ff00 //Address (Enabled) 72 | 004080 //Address (Disabled) 73 | 0080ff //Address (Unavailible) 74 | 000000 //Registers 75 | ff0000 //Registers (Changed) 76 | 800080 //Registers (Edited) 77 | [ARROW] 78 | c0c0c0 //Jump in current function 79 | 0000ff //Jump external to function 80 | 000000 //Jump under the cursor 81 | 008000 //Jump target 82 | ff4040 //Register target 83 | [GRAPH] 84 | 292723 //Top color 85 | 292723 //Bottom color 86 | 535755 //Normal title 87 | 9c5d21 //Selected title 88 | 9c5d21 //Current title 89 | 00ffff //Group frame 90 | 000000 //Node shadow 91 | ffffcc //Highlight color 1 92 | ccffcc //Highlight color 2 93 | 0000ff //Foreign node 94 | ff0000 //Normal edge 95 | 008000 //Yes edge 96 | 0000ff //No edge 97 | ff00ff //Highlighted edge 98 | ffff00 //Current edge 99 | [MISC] 100 | eceeee //Message text 101 | ffffff //Message background 102 | 404080 //Patched bytes 103 | 0080ff //Unsaved changes 104 | [OTHER] 105 | 4fe9fc //Highlight color 106 | eceeee //Hint color 107 | [SYNTAX] 108 | cf9f72 1 0 //Keyword 1 109 | cf9f72 1 0 //Keyword 2 110 | 0000cc 1 0 //Keyword 3 111 | 2929ef 0 0 //String 112 | 069a4e 1 1 //Comment 113 | cf9f72 1 0 //Preprocessor 114 | 8b8b00 1 0 //Number 115 | -------------------------------------------------------------------------------- /plugins/idaskins/themes/ida-default/ida-default.clr: -------------------------------------------------------------------------------- 1 | [DISASM] 2 | 000000 // 3 | ff0000 //Default color 4 | ff0000 //Regular comment 5 | 808080 //Repeatable comment 6 | 808080 //Automatic comment 7 | 800000 //Instruction 8 | 800000 //Dummy Data Name 9 | ff0000 //Regular Data Name 10 | ff0000 //Demangled Name 11 | 800000 //Punctuation 12 | 008000 //Char constant in instruction 13 | 00ff00 //String constant in instruction 14 | 008000 //Numeric constant in instruction 15 | 0080ff //Void operand 16 | 008000 //Code reference 17 | ff8080 //Data reference 18 | 0000ff //Code reference to tail byte 19 | 008080 //Data reference to tail byte 20 | 010101 //Error or problem 21 | c0c0c0 //Line prefix 22 | ff0000 //Binary line prefix bytes 23 | ff0000 //Extra line 24 | ff0000 //Alternative operand 25 | 808080 //Hidden name 26 | ff8080 //Library function name 27 | 008000 //Local variable name 28 | 800000 //Dummy code name 29 | ff0000 //Assembler directive 30 | 800080 //Macro 31 | 008000 //String constant in data directive 32 | 008000 //Char constant in data directive 33 | 408000 //Numeric constant in data directive 34 | 800000 //Keywords 35 | 800000 //Register name 36 | ff00ff //Imported name 37 | 008080 //Segment name 38 | 800000 //Dummy unknown name 39 | ff0000 //Regular code name 40 | 800000 //Regular unknown name 41 | ff0000 //Collapsed line 42 | 000000 //Max color number 43 | ffffff //Line prefix: library function 44 | afbbc0 //Line prefix: regular function 45 | ffff00 //Line prefix: instruction 46 | 000000 //Line prefix: data 47 | 000080 //Line prefix: unexplored 48 | 808080 //Line prefix: externs 49 | 008080 //Line prefix: current item 50 | ff00ff //Line prefix: current line 51 | 000000 //Punctuation 52 | ff0000 //Opcode bytes 53 | 000000 //Manual operand 54 | [NAVBAR] 55 | ffffaa //Library function 56 | e8a200 //Regular function 57 | 577ab9 //Instruction 58 | c0c0c0 //Data item 59 | 6bb6b6 //Unexplored 60 | ffa6ff //External symbol 61 | 5b5bff //Errors 62 | 000000 //Gaps 63 | 7fffff //Cursor 64 | 00aaff //Address 65 | [DEBUG] 66 | ffd060 //Current IP 67 | ffa0a0 //Current IP (+ enabled breakpoint) 68 | 408020 //Current IP (+ disabled breakpoint) 69 | ffffcc //Default background 70 | 0000ff //Address (+ enabled breakpoint) 71 | 00ff00 //Address (+ disabled breakpoint) 72 | 004080 //Current IP (+ unavailable breakpoint) 73 | 0080ff //Address (+ unavailable breakpoint) 74 | 000000 //Registers 75 | ff0000 //Registers (changed) 76 | 800080 //Registers (edited) 77 | [ARROW] 78 | c0c0c0 //Jump in current function 79 | 0000ff //Jump external to function 80 | 000000 //Jump under the cursor 81 | 008000 //Jump target 82 | ff4040 //Register target 83 | [GRAPH] 84 | ffffff //Top color 85 | fff8e0 //Bottom color 86 | ffffff //Normal title 87 | f9f9b1 //Selected title 88 | cfcfa0 //Current title 89 | 00ffff //Group frame 90 | 000000 //Node shadow 91 | ffffcc //Highlight color 1 92 | ccffcc //Highlight color 2 93 | 0000ff //Foreign node 94 | ff0000 //Normal edge 95 | 008000 //Yes edge 96 | 0000ff //No edge 97 | ff00ff //Highlighted edge 98 | ffff00 //Current edge 99 | [MISC] 100 | 000000 //Message text 101 | ffffff //Message background 102 | 404080 //Patched bytes 103 | 0080ff //Unsaved changes 104 | [OTHER] 105 | 00ffff //Highlight color 106 | e1ffff //Hint color 107 | [SYNTAX] 108 | ff0000 0 0 //Keyword 1 109 | 800080 0 0 //Keyword 2 110 | 0000ff 0 0 //Keyword 3 111 | 00008b 0 0 //String 112 | 006400 0 1 //Comment 113 | ff0000 1 0 //Preprocessor 114 | 8b8b00 1 0 //Number 115 | -------------------------------------------------------------------------------- /plugins/idaskins/themes/idaskins-dark/ida-consonance.clr: -------------------------------------------------------------------------------- 1 | [DISASM] 2 | 000000 // 3 | aaaaaa //Default color 4 | f3c5ff //Regular comment 5 | 7e6082 //Repeatable comment 6 | 666666 //Automatic comment 7 | ffffff //Instruction 8 | b9ebeb //Dummy Data Name 9 | b9ebeb //Regular Data Name 10 | bbecff //Demangled Name 11 | c0c0c0 //Punctuation 12 | 00d269 //Char constant in instruction 13 | 00ff00 //String constant in instruction 14 | 3250d2 //Numeric constant in instruction 15 | 4646ff //Void operand 16 | 7faaff //Code reference 17 | 617c7c //Data reference 18 | 3250d2 //Code reference to tail byte 19 | 008080 //Data reference to tail byte 20 | 3734ff //Error or problem 21 | c0c0c0 //Line prefix 22 | 595959 //Binary line prefix bytes 23 | f3c5ff //Extra line 24 | ffaaff //Alternative operand 25 | 00d2ff //Hidden name 26 | ffff00 //Library function name 27 | 0080ff //Local variable name 28 | 00d2ff //Dummy code name 29 | 00d69d //Assembler directive 30 | 7e07df //Macro 31 | 00d269 //String constant in data directive 32 | 00f379 //Char constant in data directive 33 | 3250d2 //Numeric constant in data directive 34 | ababab //Keywords 35 | adad73 //Register name 36 | fd5aff //Imported name 37 | 7fffff //Segment name 38 | 00ffaa //Dummy unknown name 39 | 00d2ff //Regular code name 40 | ffaaff //Regular unknown name 41 | 00ffff //Collapsed line 42 | 000000 //Max color number 43 | 2d2d2d //Line prefix: library function 44 | 32ade1 //Line prefix: regular function 45 | ffff00 //Line prefix: instruction 46 | 666666 //Line prefix: data 47 | 0000aa //Line prefix: unexplored 48 | 617c7c //Line prefix: externs 49 | 009d9d //Line prefix: current item 50 | ff55ff //Line prefix: current line 51 | 000000 //Punctuation 52 | 00aaff //Opcode bytes 53 | 000000 //Manual operand 54 | [NAVBAR] 55 | ffaa00 //Library function 56 | 00aaff //Regular function 57 | 000080 //Instruction 58 | b9ebeb //Data item 59 | 007878 //Unexplored 60 | ff00ff //External symbol 61 | 0000ca //Errors 62 | 4a4a4a //Gaps 63 | 00ff80 //Cursor 64 | 0080ff //Address 65 | [DEBUG] 66 | ffd060 //Current IP 67 | ffa0a0 //Current IP (+ enabled breakpoint) 68 | 408020 //Current IP (+ disabled breakpoint) 69 | 2d2d2d //Default background 70 | 000076 //Address (+ enabled breakpoint) 71 | 00ff00 //Address (+ disabled breakpoint) 72 | 004080 //Current IP (+ unavailable breakpoint) 73 | 0080ff //Address (+ unavailable breakpoint) 74 | 000000 //Registers 75 | ff0000 //Registers (changed) 76 | 800080 //Registers (edited) 77 | 808080 //Registers (unavailable) 78 | [ARROW] 79 | 34466c //Jump in current function 80 | dede00 //Jump external to function 81 | 00aaff //Jump under the cursor 82 | 008000 //Jump target 83 | ff4040 //Register target 84 | [GRAPH] 85 | b2b2b2 //Top color 86 | b2b2b2 //Bottom color 87 | f5f5f5 //Normal title 88 | 989faa //Selected title 89 | 54585e //Current title 90 | 00ffff //Group frame 91 | 242424 //Node shadow 92 | 003900 //Highlight color 1 93 | 00006d //Highlight color 2 94 | 0000ff //Foreign node 95 | cb4300 //Normal edge 96 | 009100 //Yes edge 97 | 0000bc //No edge 98 | ffaaaa //Highlighted edge 99 | 008ec6 //Current edge 100 | [MISC] 101 | dddddd //Message text 102 | 2d2d2d //Message background 103 | 404080 //Patched bytes 104 | 0080ff //Unsaved changes 105 | [OTHER] 106 | 1f005e //Highlight color 107 | 424242 //Hint color 108 | [SYNTAX] 109 | ff0000 0 0 //Keyword 1 110 | 800080 0 0 //Keyword 2 111 | 0000ff 0 0 //Keyword 3 112 | 00008b 0 0 //String 113 | 006400 0 1 //Comment 114 | ff0000 1 0 //Preprocessor 115 | 8b8b00 1 0 //Number 116 | -------------------------------------------------------------------------------- /plugins/idaskins/themes/vscode-dark/vscode-dark.clr: -------------------------------------------------------------------------------- 1 | [DISASM] 2 | 000000 // 3 | 55996a //Default color 4 | 55996a //Regular comment 5 | 808080 //Repeatable comment 6 | 808080 //Automatic comment 7 | d4d4d4 //Instruction 8 | fedc9c //Dummy Data Name 9 | fedc9c //Regular Data Name 10 | aadcdc //Demangled Name 11 | d4d4d4 //Punctuation 12 | 7dbad7 //Char constant in instruction 13 | 00ff00 //String constant in instruction 14 | 55996a //Numeric constant in instruction 15 | 7dbad7 //Void operand 16 | 55996a //Code reference 17 | d69c56 //Data reference 18 | 0014e5 //Code reference to tail byte 19 | 008080 //Data reference to tail byte 20 | 010101 //Error or problem 21 | c0c0c0 //Line prefix 22 | a8ceb5 //Binary line prefix bytes 23 | aadcdc //Extra line 24 | ff0000 //Alternative operand 25 | d4d4d4 //Hidden name 26 | fedc9c //Library function name 27 | fedc9c //Local variable name 28 | fedc9c //Dummy code name 29 | fedc9c //Assembler directive 30 | c086c5 //Macro 31 | 7891ce //String constant in data directive 32 | 7891ce //Char constant in data directive 33 | 55996a //Numeric constant in data directive 34 | c086c5 //Keywords 35 | fedc9c //Register name 36 | c086c5 //Imported name 37 | d4d4d4 //Segment name 38 | fedc9c //Dummy unknown name 39 | aadcdc //Regular code name 40 | ffff00 //Regular unknown name 41 | 55996a //Collapsed line 42 | 000000 //Max color number 43 | 1e1e1e //Line prefix: library function 44 | 784f26 //Line prefix: regular function 45 | ffff00 //Line prefix: instruction 46 | d69c56 //Line prefix: data 47 | 000080 //Line prefix: unexplored 48 | 858585 //Line prefix: externs 49 | 008080 //Line prefix: current item 50 | ff00ff //Line prefix: current line 51 | 000000 //Punctuation 52 | d4d4d4 //Opcode bytes 53 | 000000 //Manual operand 54 | 32cd32 //Error 55 | [NAVBAR] 56 | ffffaa //Library function 57 | e8a200 //Regular function 58 | 577ab9 //Instruction 59 | c0c0c0 //Data item 60 | 6bb6b6 //Unexplored 61 | c086c5 //External symbol 62 | 5b5bff //Errors 63 | 000000 //Gaps 64 | 7fffff //Cursor 65 | 00aaff //Address 66 | 32cd32 //Lumina function 67 | [DEBUG] 68 | 184b4b //Current IP 69 | ffa0a0 //Current IP (+ enabled breakpoint) 70 | 408020 //Current IP (+ disabled breakpoint) 71 | 1e1e1e //Default background 72 | 0014e5 //Address (+ enabled breakpoint) 73 | 00ff00 //Address (+ disabled breakpoint) 74 | 004080 //Current IP (+ unavailable breakpoint) 75 | 0080ff //Address (+ unavailable breakpoint) 76 | 858585 //Registers 77 | d69c56 //Registers (changed) 78 | 800080 //Registers (edited) 79 | 808080 //Registers (unavailable) 80 | [ARROW] 81 | c0c0c0 //Jump in current function 82 | 0000ff //Jump external to function 83 | 000000 //Jump under the cursor 84 | 008000 //Jump target 85 | ff4040 //Register target 86 | [GRAPH] 87 | 3c3c3c //Top color 88 | 3c3c3c //Bottom color 89 | 4b4b4b //Normal title 90 | f9f9b1 //Selected title 91 | cfcfa0 //Current title 92 | 00ffff //Group frame 93 | 000000 //Node shadow 94 | ffffcc //Highlight color 1 95 | ccffcc //Highlight color 2 96 | 0000ff //Foreign node 97 | ff0000 //Normal edge 98 | 008000 //Yes edge 99 | 0000ff //No edge 100 | ff00ff //Highlighted edge 101 | ffff00 //Current edge 102 | [MISC] 103 | cccccc //Message text 104 | 1e1e1e //Message background 105 | 404080 //Patched bytes 106 | 0080ff //Unsaved changes 107 | [OTHER] 108 | 403a34 //Highlight color 109 | 262525 //Hint color 110 | [SYNTAX] 111 | ff0000 0 0 //Keyword 1 112 | 800080 0 0 //Keyword 2 113 | 0000ff 0 0 //Keyword 3 114 | 00008b 0 0 //String 115 | 006400 0 1 //Comment 116 | ff0000 1 0 //Preprocessor 117 | 8b8b00 1 0 //Number 118 | -------------------------------------------------------------------------------- /plugins/idaskins/clrapplier.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import, division, print_function 2 | 3 | import os 4 | import sys 5 | import ctypes 6 | import traceback 7 | 8 | import idaapi 9 | import idc 10 | 11 | from ctypes import (c_int, c_void_p, create_string_buffer, cast) 12 | from PyQt5.QtCore import Qt, QTimer, QObject 13 | from PyQt5.QtGui import QShowEvent 14 | from PyQt5.QtWidgets import QWidget, QDialog, QDialogButtonBox, QPushButton, qApp 15 | 16 | __all__ = ['load_clr_file'] 17 | 18 | 19 | def _ida_lib(): 20 | ea_name = 'ida64' if idc.__EA64__ else 'ida' 21 | if sys.platform == 'win32': 22 | functype = ctypes.WINFUNCTYPE 23 | lib = ctypes.WinDLL(ea_name) 24 | elif sys.platform == 'darwin': 25 | functype = ctypes.CFUNCTYPE 26 | lib = ctypes.CDLL(idaapi.idadir("lib" + ea_name + ".dylib")) 27 | else: 28 | functype = ctypes.CFUNCTYPE 29 | lib = ctypes.CDLL('lib' + ea_name + '.so') 30 | return functype, lib 31 | 32 | 33 | functype, lib = _ida_lib() 34 | hook_cb_t = functype(c_void_p, c_void_p, c_int, c_void_p) 35 | 36 | hook_to_notification_point = lib.hook_to_notification_point 37 | hook_to_notification_point.argtypes = [c_int, hook_cb_t, c_void_p] 38 | 39 | unhook_from_notification_point = lib.unhook_from_notification_point 40 | unhook_from_notification_point.argtypes = [c_int, hook_cb_t, c_void_p] 41 | 42 | 43 | class TemporaryFilter(QObject): 44 | """ 45 | Temporary event filter installed at qApp to catch events 46 | while executing QDialog::exec. 47 | 48 | The filter automatically clicks &Import button, 49 | and automatically selects file by using native ui hooks. 50 | """ 51 | 52 | def __init__(self, filepath): 53 | super(TemporaryFilter, self).__init__() 54 | filepath = os.path.abspath(filepath) 55 | if not os.path.isfile(filepath): 56 | raise IOError("Assertion Error: os.path.isfile(filepath)") 57 | 58 | self.filepath = filepath 59 | 60 | def eventFilter(self, obj, event): 61 | def is_colors_dialog(): 62 | return isinstance( 63 | obj, QDialog) and 'IDA Colors' in obj.windowTitle() 64 | 65 | if isinstance(event, QShowEvent) and is_colors_dialog(): 66 | qApp.removeEventFilter(self) 67 | 68 | # Hide window and find &Import button 69 | obj.windowHandle().setOpacity(0) 70 | buttons = [widget for widget in obj.children() if isinstance( 71 | widget, QDialogButtonBox)][0] 72 | button = [widget for widget in buttons.buttons() if widget.text() 73 | == '&Import'][0] 74 | 75 | with NativeHook(ask_file=self.ask_file_handler): 76 | button.click() 77 | 78 | QTimer.singleShot(0, lambda: obj.accept()) 79 | return 1 80 | return 0 81 | 82 | def ask_file_handler(self): 83 | return create_string_buffer(self.filepath) 84 | 85 | 86 | class NativeHook: 87 | """ 88 | Installer for non-exposed hooks from UI_Hooks. 89 | This uses hook_to_notification_point with HT_UI. 90 | 91 | with NativeHook(ask_file=lambda: 0): 92 | # do anything 93 | """ 94 | NAMES = { 95 | 'ask_file': 0x1d 96 | } 97 | HT_UI = 1 98 | 99 | def __init__(self, **kwargs): 100 | self.hooks = {NativeHook.NAMES[key]: value for key, value in kwargs.items()} 101 | self._handler = hook_cb_t(self.handler) 102 | 103 | def handler(self, _user_data, code, _va_args): 104 | if code in self.hooks: 105 | try: 106 | res = self.hooks[code]() 107 | return cast(res, c_void_p).value 108 | except: 109 | traceback.print_exc() 110 | return 0 111 | else: 112 | return 0 113 | 114 | def __enter__(self): 115 | hook_to_notification_point(NativeHook.HT_UI, self._handler, None) 116 | 117 | def __exit__(self, *args): 118 | unhook_from_notification_point(NativeHook.HT_UI, self._handler, None) 119 | 120 | 121 | def load_clr_file(filepath): 122 | event_filter = TemporaryFilter(filepath) 123 | qApp.installEventFilter(event_filter) 124 | 125 | return idaapi.process_ui_action('SetColors') 126 | -------------------------------------------------------------------------------- /plugins/idaskins/themeselector.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import, division, print_function 2 | 3 | import json 4 | import os 5 | 6 | import idaapi 7 | from idaskins import THEMES_DIR, UI_DIR 8 | from idaskins.objectinspector import ObjectInspector 9 | from idaskins.thememanifest import ManifestError, ThemeManifest 10 | from PyQt5 import uic 11 | from PyQt5.QtCore import Qt 12 | from PyQt5.Qt import qApp 13 | from PyQt5.QtGui import QPixmap 14 | from PyQt5.QtWidgets import QDialog, QFileSystemModel 15 | 16 | Ui_ThemeSelector, ThemeSelectorBase = uic.loadUiType( 17 | os.path.join(UI_DIR, 'ThemeSelector.ui') 18 | ) 19 | 20 | 21 | class ThemeSelector(ThemeSelectorBase): 22 | """Theme selector dialog. Pick your poison.""" 23 | def __init__(self, *args, **kwargs): 24 | super(ThemeSelector, self).__init__(*args, **kwargs) 25 | self.setModal(False) 26 | 27 | self._theme_list = [] 28 | self._preview_pixmap = None 29 | self._obj_inspector = None 30 | 31 | self._ui = Ui_ThemeSelector() 32 | self._ui.setupUi(self) 33 | self._ui.lwSkinSelection.itemSelectionChanged.connect( 34 | self.theme_selected 35 | ) 36 | self._ui.btnObjectInspector.clicked.connect( 37 | self.open_object_inspector 38 | ) 39 | self._ui.btnCopyClr.clicked.connect( 40 | self.on_copy_clr_clicked 41 | ) 42 | 43 | self.refresh() 44 | 45 | def refresh(self): 46 | # Load manifests for all themes. 47 | try: 48 | self._theme_list = [ 49 | ( 50 | x, 51 | ThemeManifest(open( 52 | os.path.join(THEMES_DIR, x, 'manifest.json') 53 | ), 54 | )) 55 | for x in os.listdir(THEMES_DIR) 56 | if os.path.isdir(os.path.join(THEMES_DIR, x)) 57 | ] 58 | except ManifestError as exc: 59 | print("Bad manifest:", str(exc)) 60 | 61 | # Populate theme list. 62 | self._ui.lwSkinSelection.clear() 63 | for _, manifest in self._theme_list: 64 | self._ui.lwSkinSelection.addItem(manifest.theme_name) 65 | 66 | self._ui.lwSkinSelection.setCurrentIndex( 67 | self._ui.lwSkinSelection.rootIndex() 68 | ) 69 | 70 | def theme_selected(self): 71 | theme_dir, manifest = self._get_selected() 72 | abs_theme_dir = os.path.join(THEMES_DIR, theme_dir) 73 | 74 | self._ui.lblAuthorVal.setText(manifest.author) 75 | self._ui.lblVersionVal.setText(manifest.version) 76 | self._ui.lblNotesVal.setText(manifest.notes) 77 | self._ui.leClrPathVal.setText( 78 | os.path.join(abs_theme_dir, manifest.clr_file) 79 | if manifest.clr_file else 80 | None 81 | ) 82 | 83 | if manifest.preview_image: 84 | abs_path = os.path.join(abs_theme_dir, manifest.preview_image) 85 | self._preview_pixmap = QPixmap(abs_path) 86 | self.update_preview() 87 | else: 88 | self._ui.lblPreview.setText('no preview available') 89 | 90 | def _get_selected(self): 91 | sel_model = self._ui.lwSkinSelection.selectionModel() 92 | sel_indices = sel_model.selectedIndexes() 93 | if sel_indices: 94 | return self._theme_list[sel_indices[0].row()] 95 | else: 96 | return None, None 97 | 98 | def on_copy_clr_clicked(self): 99 | _, manifest = self._get_selected() 100 | if not manifest.clr_file: 101 | return 102 | qApp.clipboard().setText(self._ui.leClrPathVal.text()) 103 | 104 | def update_preview(self): 105 | if not self._preview_pixmap: 106 | return 107 | 108 | scaled = self._preview_pixmap.scaled( 109 | self._ui.lblPreview.width(), 110 | self._ui.lblPreview.height(), 111 | Qt.KeepAspectRatio, 112 | Qt.SmoothTransformation, 113 | ) 114 | self._ui.lblPreview.setPixmap(scaled) 115 | 116 | def open_object_inspector(self): 117 | self._obj_inspector = ObjectInspector() 118 | self._obj_inspector.show() 119 | 120 | def resizeEvent(self, *args, **kwargs): 121 | super(ThemeSelector, self).resizeEvent(*args, **kwargs) 122 | self.update_preview() 123 | 124 | @property 125 | def selected_theme_dir(self): 126 | theme_dir, _ = self._get_selected() 127 | return theme_dir 128 | -------------------------------------------------------------------------------- /plugins/idaskins/themes/idaskins-dark/stylesheet.qss: -------------------------------------------------------------------------------- 1 | QWidget { 2 | background-color: #363636; 3 | color: #ddd; 4 | } 5 | 6 | QCheckBox { 7 | background-color: rgba(0, 0, 0, 0); 8 | } 9 | 10 | QTextEdit { 11 | background-color: #2d2d2d; 12 | border: 1px solid #363636; 13 | border-radius: 2px; 14 | } 15 | 16 | QMenuBar, QMenuBar::item { 17 | background-color: #444444; 18 | color: #ddd; 19 | } 20 | 21 | QMenu::item:selected { 22 | background-color: #2A2A2A; 23 | } 24 | 25 | QLineEdit { 26 | border: 1px solid #474747; 27 | min-height: 20px; 28 | border-radius: 2px; 29 | } 30 | 31 | QLineEdit:hover, QLineEdit:focus { 32 | border: 1px solid #00aaaa; 33 | } 34 | 35 | QTabBar::tab { 36 | background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, 37 | stop: 0 #555555, stop: 1 #444444); 38 | } 39 | 40 | QTabBar::tab:selected { 41 | background-color: #777777; 42 | } 43 | 44 | QTableView { 45 | border: 1px solid #474747; 46 | background-color: #2d2d2d; 47 | } 48 | 49 | QHeaderView::section { 50 | background-color: #444; 51 | border: none; 52 | border-left: 1px solid #666; 53 | border-right: 1px solid #333; 54 | padding-top: 3px; 55 | padding-left: 4px; 56 | min-height: 20px; 57 | } 58 | 59 | QTableCornerButton::section { 60 | background: #222; 61 | border: 2px outset #222; 62 | } 63 | 64 | IDAView, hexview_t, CustomIDAMemo { 65 | border: none; 66 | } 67 | 68 | CustomIDAMemo, EditContainer { 69 | font-family: ""; 70 | font-size: ; 71 | font-style: ; 72 | font-weight: ; 73 | } 74 | 75 | IDAView { 76 | font-family: ""; 77 | font-size: ; 78 | font-style: ; 79 | font-weight: ; 80 | } 81 | 82 | hexview_t { 83 | font-family: ""; 84 | font-size: ; 85 | font-style: ; 86 | font-weight: ; 87 | } 88 | 89 | /* TODO: DEBUG_REGISTERS, OUTPUT_WINDOW */ 90 | 91 | QScrollBar { 92 | background-color: #363636; 93 | width: 20px; 94 | height: 20px; 95 | margin: 0 0 0 0; 96 | } 97 | 98 | QScrollBar::sub-line, QScrollBar::add-line { 99 | width: 0; 100 | height: 0; 101 | } 102 | 103 | QScrollBar::add-page, QScrollBar::sub-page { 104 | background: none; 105 | } 106 | 107 | QScrollBar::handle:vertical { 108 | min-height: 20px; 109 | } 110 | 111 | QScrollBar::handle:horizontal { 112 | min-width: 20px; 113 | } 114 | 115 | QScrollBar::handle { 116 | background-color: #585858; 117 | margin: 3px; 118 | border-radius: 7px; 119 | } 120 | 121 | QToolBar { 122 | border: none; 123 | } 124 | 125 | QPushButton { 126 | border: 1px solid #077; 127 | text-align: center; 128 | min-height: 20px; 129 | min-width: 50px; 130 | padding: 0 6px 0 6px; 131 | border-radius: 2px; 132 | } 133 | 134 | QPushButton:hover, QPushButton:default { 135 | border: 1px solid #0aa; 136 | } 137 | 138 | QPushButton:pressed { 139 | border: 1px solid #0ee; 140 | } 141 | 142 | TNavBand > QPushButton, nav_scroll_button_t, RegJumpButton { 143 | min-height: 0; 144 | min-width: 0; 145 | padding: 0; 146 | border: none; 147 | } 148 | 149 | QPushButton.DockWidgetTitleButton { 150 | border: none; 151 | min-height: 15px; 152 | min-width: 15px; 153 | margin: 5px; 154 | padding: 3px; 155 | } 156 | 157 | DockWidgetTitle { 158 | min-height: 30px; 159 | padding-bottom: 5px; 160 | } 161 | 162 | QComboBox { 163 | border: 1px solid #474747; 164 | border-radius: 2px; 165 | } 166 | 167 | QComboBox > QLineEdit, QComboBox > QLineEdit:hover, QComboBox > QLineEdit:focus { 168 | border: none; 169 | min-height: default; 170 | } 171 | 172 | QComboBox:hover, QComboBox:focus { 173 | border: 1px solid #00aaaa; 174 | } 175 | 176 | QComboBox::drop-down { 177 | subcontrol-origin: padding; 178 | subcontrol-position: top right; 179 | width: 15px; 180 | 181 | border-left-width: 1px; 182 | border-left-color: #666; 183 | border-left-style: solid; 184 | } 185 | 186 | QComboBox::down-arrow { 187 | image: url(/icons/expand.png); 188 | } 189 | 190 | /* Close, maximize and undock button for dock widgets */ 191 | IDADockWidget > QWidget > QAbstractButton { 192 | background-color: #666; 193 | border-radius: 3px; 194 | } 195 | 196 | QRadioButton, QLabel, QCheckBox { 197 | background: transparent; 198 | } 199 | 200 | EditContainer, ChooserContainer, QGroupBox, QListView, QTreeView { 201 | border: 1px solid #606060; 202 | border-radius: 2px; 203 | } 204 | 205 | QGroupBox { 206 | margin-top: 5px; 207 | } 208 | 209 | QGroupBox::title { 210 | subcontrol-origin: margin; 211 | subcontrol-position: top center; 212 | } 213 | 214 | /* Remove border from IDC/Python switch button */ 215 | CLIWidget > QGroupBox > QPushButton, 216 | CLIWidget > QGroupBox > QPushButton:hover, 217 | CLIWidget > QGroupBox > QPushButton:focus { 218 | border: none; 219 | } 220 | 221 | CLIWidget > QGroupBox { 222 | margin-top: 0; 223 | } 224 | 225 | QTreeView::item:selected, QListView::item:selected, QTableView::item:selected { 226 | background-color: #474747; 227 | color: #ddd; 228 | } 229 | 230 | QToolTip, QTipLabel { 231 | border: 1px solid #077; 232 | border-radius: 2px; 233 | background: #111111; 234 | color: #ddd; 235 | margin: 0; 236 | padding: 0; 237 | } 238 | 239 | -------------------------------------------------------------------------------- /plugins/idaskins/themes/adwaita-dark/stylesheet.qss: -------------------------------------------------------------------------------- 1 | /*** 2 | color palatte: 3 | 4 | (darkest) 5 | dark-0, light-7 #1B1F20 6 | dark-1, light-6 #2D3234 7 | dark-2, light-5 #2E3436 8 | dark-3, light-4 #33393B 9 | dark-4, light-3 #919494 10 | dark-5, light-2 #D3D7CF 11 | dark-6, light-1 #EEEEEC 12 | dark-7, light-0 #FFFFFF 13 | (lightest) 14 | 15 | accent #215D9C 16 | */ 17 | 18 | 19 | QWidget { 20 | /* dark-3 */ 21 | background-color: #33393B; 22 | 23 | /* light-1 */ 24 | color: #EEEEEC; 25 | } 26 | 27 | QCheckBox { 28 | /* light-1 */ 29 | background-color: #EEEEEC; 30 | } 31 | 32 | QTextEdit { 33 | border-radius: 2px; 34 | 35 | /* dark-1 */ 36 | background-color: #2D3234; 37 | 38 | /* dark-0 */ 39 | border: 1px solid #1B1F20; 40 | } 41 | 42 | QMenuBar { 43 | /* dark-3 */ 44 | background-color: #33393B; 45 | } 46 | 47 | QMenuBar::item { 48 | /* dark-2 */ 49 | background-color: #2E3436; 50 | } 51 | 52 | 53 | QMenu::item:selected { 54 | /* accent */ 55 | background-color: #215D9C; 56 | } 57 | 58 | QLineEdit { 59 | min-height: 20px; 60 | border-radius: 2px; 61 | 62 | /* dark-0 */ 63 | border: 1px solid #1B1F20; 64 | } 65 | 66 | QLineEdit:focus { 67 | /* accent */ 68 | border: 1px solid #215D9C; 69 | } 70 | 71 | QTabBar::tab { 72 | /* dark-2 */ 73 | background-color: #2E3436; 74 | } 75 | 76 | QTabBar::tab:selected { 77 | /* dark-2 */ 78 | background-color: #2E3436; 79 | 80 | /* accent */ 81 | border-bottom: 2px solid #215D9C; 82 | } 83 | 84 | QHeaderView::section { 85 | /* dark-2 */ 86 | background-color: #2E3436; 87 | 88 | /* dark-1 */ 89 | border-left: 3px solid #2D3234; 90 | } 91 | 92 | QTableView { 93 | /* dark-0 */ 94 | border: 1px solid #1B1F20; 95 | 96 | /* dark-1 */ 97 | background-color: #2D3234; 98 | } 99 | 100 | QTableCornerButton::section { 101 | /* dark-1 */ 102 | background: #2D3234; 103 | 104 | /* dark-0 */ 105 | border: 2px outset #000000; 106 | } 107 | 108 | IDAView, hexview_t, CustomIDAMemo { 109 | border: none; 110 | } 111 | 112 | CustomIDAMemo, EditContainer { 113 | font-family: ""; 114 | font-size: ; 115 | font-style: ; 116 | font-weight: ; 117 | } 118 | 119 | IDAView { 120 | font-family: ""; 121 | font-size: ; 122 | font-style: ; 123 | font-weight: ; 124 | } 125 | 126 | hexview_t { 127 | font-family: ""; 128 | font-size: ; 129 | font-style: ; 130 | font-weight: ; 131 | } 132 | 133 | /* TODO: DEBUG_REGISTERS, OUTPUT_WINDOW */ 134 | 135 | QScrollBar { 136 | width: 10px; 137 | margin: 0 0 0 0; 138 | 139 | /* dark-3 */ 140 | background-color: #33393B; 141 | } 142 | 143 | QScrollBar::sub-line, QScrollBar::add-line { 144 | width: 0; 145 | height: 0; 146 | } 147 | 148 | QScrollBar::add-page, QScrollBar::sub-page { 149 | background: none; 150 | } 151 | 152 | QScrollBar::handle:vertical { 153 | min-height: 20px; 154 | } 155 | 156 | QScrollBar::handle:horizontal { 157 | min-width: 20px; 158 | } 159 | 160 | QScrollBar::handle { 161 | /* light-3 */ 162 | background-color: #919494; 163 | margin: 3px; 164 | border-radius: 3px; 165 | } 166 | 167 | QToolBar { 168 | border: none; 169 | } 170 | 171 | QPushButton { 172 | text-align: center; 173 | min-height: 20px; 174 | min-width: 50px; 175 | padding: 0 6px 0 6px; 176 | border-radius: 2px; 177 | 178 | /* dark-0 */ 179 | border: 1px solid #1B1F20; 180 | } 181 | 182 | QPushButton:hover, QPushButton:default { 183 | /* dark-1 */ 184 | border: 1px solid #2D3234; 185 | } 186 | 187 | QPushButton:pressed { 188 | /* accent */ 189 | border: 1px solid #215D9C; 190 | } 191 | 192 | TNavBand > QPushButton, nav_scroll_button_t, RegJumpButton { 193 | min-height: 0; 194 | min-width: 0; 195 | padding: 0; 196 | border: none; 197 | } 198 | 199 | QPushButton.DockWidgetTitleButton { 200 | border: none; 201 | min-height: 15px; 202 | min-width: 15px; 203 | margin: 5px; 204 | padding: 3px; 205 | } 206 | 207 | DockWidgetTitle { 208 | min-height: 30px; 209 | padding-bottom: 5px; 210 | } 211 | 212 | QComboBox { 213 | border-radius: 2px; 214 | 215 | /* dark-0 */ 216 | border: 1px solid #1B1F20; 217 | } 218 | 219 | QComboBox > QLineEdit, QComboBox > QLineEdit:hover, QComboBox > QLineEdit:focus { 220 | border: none; 221 | min-height: default; 222 | } 223 | 224 | QComboBox:focus { 225 | /* accent */ 226 | border: 1px solid #215D9C; 227 | } 228 | 229 | QComboBox::drop-down { 230 | subcontrol-origin: padding; 231 | subcontrol-position: top right; 232 | width: 15px; 233 | 234 | border-left-width: 1px; 235 | border-left-style: solid; 236 | /* accent? */ 237 | border-left-color: #215D9C; 238 | } 239 | 240 | QComboBox::down-arrow { 241 | image: url(/icons/expand.png); 242 | } 243 | 244 | /* Close, maximize and undock button for dock widgets */ 245 | IDADockWidget > QWidget > QAbstractButton { 246 | /* no border */ 247 | } 248 | 249 | QRadioButton, QLabel, QCheckBox { 250 | background: transparent; 251 | } 252 | 253 | EditContainer, ChooserContainer, QGroupBox, QListView, QTreeView { 254 | border-radius: 2px; 255 | 256 | /* dark-0 */ 257 | border: 1px solid #1B1F20; 258 | } 259 | 260 | QGroupBox { 261 | margin-top: 5px; 262 | } 263 | 264 | QGroupBox::title { 265 | subcontrol-origin: margin; 266 | subcontrol-position: top center; 267 | } 268 | 269 | /* Remove border from IDC/Python switch button */ 270 | CLIWidget > QGroupBox > QPushButton, 271 | CLIWidget > QGroupBox > QPushButton:hover, 272 | CLIWidget > QGroupBox > QPushButton:focus { 273 | border: none; 274 | } 275 | 276 | CLIWidget > QGroupBox { 277 | margin-top: 0; 278 | } 279 | 280 | QTreeView::item:selected, QListView::item:selected, QTableView::item:selected { 281 | /* accent */ 282 | background-color: #215D9C; 283 | } 284 | -------------------------------------------------------------------------------- /plugins/idaskins/plugin.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import, division, print_function 2 | 3 | import os 4 | 5 | import idaapi 6 | from idaskins import IDA_DIR, THEMES_DIR, VERSION 7 | from idaskins.idafontconfig import IdaFontConfig 8 | from idaskins.objectinspector import ObjectInspector 9 | from idaskins.settings import Settings 10 | from idaskins.thememanifest import ThemeManifest, ManifestError 11 | from idaskins.themeselector import ThemeSelector 12 | from idaskins.clrapplier import load_clr_file 13 | from PyQt5.Qt import qApp 14 | from PyQt5.QtCore import QObject, QDir 15 | from PyQt5.QtWidgets import QMessageBox 16 | 17 | 18 | class UiHooks(idaapi.UI_Hooks): 19 | """ 20 | UI hooks. Currently only used to display a warning when 21 | switching font settings in IDA. 22 | """ 23 | def __init__(self): 24 | super(UiHooks, self).__init__() 25 | self._last_event = None 26 | 27 | def preprocess_action(self, name): 28 | self._last_event = name 29 | return super(UiHooks, self).preprocess_action(name) 30 | 31 | def postprocess_action(self): 32 | if self._last_event == 'SetFont': 33 | QMessageBox.warning( 34 | qApp.activeWindow(), 35 | "IDASkins", 36 | "Please note that altering the font settings when IDASkins " 37 | "is loaded may cause strange effects on font rendering. It is " 38 | "recommended to restart IDA after making font-related changes " 39 | "in the settings to avoid instability." 40 | ) 41 | 42 | return super(UiHooks, self).postprocess_action() 43 | 44 | 45 | class IdaSkinsPlugin(QObject, idaapi.plugin_t): 46 | """Plugin entry point. Does most of the skinning magic.""" 47 | flags = idaapi.PLUGIN_FIX 48 | comment = "Advanced IDA skinning" 49 | 50 | help = "This is help" 51 | wanted_name = "IDASkins: Settings" 52 | wanted_hotkey = "Ctrl-Shift-S" 53 | 54 | def __init__(self, *args, **kwargs): 55 | print("[IDASkins] {} by athre0z (zyantific.com) loaded!".format( 56 | VERSION 57 | )) 58 | 59 | QObject.__init__(self, *args, **kwargs) 60 | idaapi.plugin_t.__init__(self) 61 | 62 | # First start dialog. 63 | self._settings = Settings() 64 | if self._settings.first_start: 65 | selection = QMessageBox.information( 66 | qApp.activeWindow(), 67 | "IDASkins: First start", 68 | "IDASkins has detected that this is the first time you've started IDA with " 69 | "the plugin installed. Select a theme now?", 70 | QMessageBox.Yes | QMessageBox.No, 71 | ) 72 | 73 | if selection == QMessageBox.Yes: 74 | self.open_theme_selector() 75 | 76 | self._settings.first_start = False 77 | else: 78 | # v2.0.0 used absolute pathes due to a bug. 79 | # Fix settings from this particular version here. 80 | theme_dir = self._settings.selected_theme_dir 81 | if theme_dir and os.path.isabs(theme_dir): 82 | print('[IDASkins] Updating buggy v2.0.0 theme path') 83 | self._settings.selected_theme_dir = os.path.split(theme_dir)[-1] 84 | 85 | self._theme_selector = None 86 | self.apply_stylesheet_from_settings() 87 | 88 | # Subscribe UI notifications. 89 | self._ui_hooks = UiHooks() 90 | self._ui_hooks.hook() 91 | 92 | def preprocess_stylesheet(self, qss, abs_theme_dir): 93 | qss = qss.replace('', QDir.fromNativeSeparators(IDA_DIR)) 94 | qss = qss.replace('', QDir.fromNativeSeparators(abs_theme_dir)) 95 | 96 | def replace_keyword(x, keyword, kind): 97 | cfg = IdaFontConfig(kind) 98 | prefix = '<{}_FONT_'.format(keyword) 99 | 100 | x = x.replace(prefix + 'FAMILY>', cfg.family) 101 | x = x.replace(prefix + 'STYLE>', ' italic' if cfg.italic else '') 102 | x = x.replace(prefix + 'WEIGHT>', ' bold' if cfg.bold else '') 103 | x = x.replace(prefix + 'SIZE>', '{} pt'.format(cfg.size)) 104 | 105 | return x 106 | 107 | qss = replace_keyword(qss, 'DISASSEMBLY', 'disas') 108 | qss = replace_keyword(qss, 'HEXVIEW', 'hexview') 109 | qss = replace_keyword(qss, 'DEBUG_REGISTERS', 'debug_regs') 110 | qss = replace_keyword(qss, 'TEXT_INPUT', 'text_input') 111 | qss = replace_keyword(qss, 'OUTPUT_WINDOW', 'output_wnd') 112 | 113 | return qss 114 | 115 | def apply_stylesheet(self, abs_theme_dir, manifest): 116 | try: 117 | with open(os.path.join(abs_theme_dir, manifest.qss_file)) as f: 118 | qss = f.read() 119 | except IOError as exc: 120 | print('[IDASkins] Unable to load stylesheet.') 121 | return 122 | 123 | qss = self.preprocess_stylesheet(qss, abs_theme_dir) 124 | qApp.setStyleSheet(qss) 125 | #idaapi.request_refresh(idaapi.IWID_ALL) 126 | 127 | def apply_clr_file(self, abs_theme_dir, manifest): 128 | try: 129 | load_clr_file(os.path.join(abs_theme_dir, manifest.clr_file)) 130 | except IOError as exc: 131 | print('[IDASkins] Unable to load clr file.') 132 | return 133 | 134 | def apply_stylesheet_from_settings(self): 135 | theme_dir = self._settings.selected_theme_dir 136 | if theme_dir: 137 | abs_theme_dir = os.path.join(THEMES_DIR, theme_dir) 138 | try: 139 | manifest = ThemeManifest(open(os.path.join( 140 | abs_theme_dir, 'manifest.json' 141 | ))) 142 | except ManifestError as exc: 143 | print('[IDASkins]', str(exc)) 144 | return 145 | 146 | self.apply_stylesheet(abs_theme_dir, manifest) 147 | self.apply_clr_file(abs_theme_dir, manifest) 148 | print('[IDASkins] Skin file successfully applied!') 149 | 150 | def open_theme_selector(self): 151 | self._theme_selector = ThemeSelector(qApp.activeWindow()) 152 | self._theme_selector.accepted.connect(self.on_theme_selection_accepted) 153 | self._theme_selector.show() 154 | 155 | def on_theme_selection_accepted(self): 156 | theme_dir = self.sender().selected_theme_dir 157 | if theme_dir: 158 | self._settings.selected_theme_dir = theme_dir 159 | self.apply_stylesheet_from_settings() 160 | 161 | def init(self): 162 | return idaapi.PLUGIN_KEEP 163 | 164 | def run(self, arg): 165 | self.open_theme_selector() 166 | 167 | def term(self): 168 | print("term() called!") 169 | -------------------------------------------------------------------------------- /plugins/idaskins/ui/ThemeSelector.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | ThemeSelector 4 | 5 | 6 | 7 | 0 8 | 0 9 | 790 10 | 491 11 | 12 | 13 | 14 | Theme selection 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 0 24 | 0 25 | 26 | 27 | 28 | 29 | 0 30 | 0 31 | 32 | 33 | 34 | 35 | 150 36 | 16777215 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 1 48 | 1 49 | 50 | 51 | 52 | 53 | 1 54 | 1 55 | 56 | 57 | 58 | no preview available 59 | 60 | 61 | false 62 | 63 | 64 | Qt::AlignCenter 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 0 75 | 0 76 | 77 | 78 | 79 | 80 | 81 | 82 | Qt::RichText 83 | 84 | 85 | 86 | 87 | 88 | 89 | Author: 90 | 91 | 92 | 93 | 94 | 95 | 96 | Notes: 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 0 105 | 0 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 0 118 | 0 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | Version: 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | true 139 | 140 | 141 | 142 | 143 | 144 | 145 | Copy 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | CLR File: 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | Object inspector 170 | 171 | 172 | 173 | 174 | 175 | 176 | Qt::Horizontal 177 | 178 | 179 | QDialogButtonBox::Cancel|QDialogButtonBox::Ok 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | buttonBox 191 | accepted() 192 | ThemeSelector 193 | accept() 194 | 195 | 196 | 248 197 | 254 198 | 199 | 200 | 157 201 | 274 202 | 203 | 204 | 205 | 206 | buttonBox 207 | rejected() 208 | ThemeSelector 209 | reject() 210 | 211 | 212 | 316 213 | 260 214 | 215 | 216 | 286 217 | 274 218 | 219 | 220 | 221 | 222 | 223 | -------------------------------------------------------------------------------- /plugins/idaskins/themes/vscode-dark/stylesheet.qss: -------------------------------------------------------------------------------- 1 | .disasm-font { 2 | font-family: ""; 3 | font-size: ; 4 | font-style: ; 5 | font-weight: ; 6 | } 7 | .hexview-font { 8 | font-family: ""; 9 | font-size: ; 10 | font-style: ; 11 | font-weight: ; 12 | } 13 | .text-input-font { 14 | font-family: ""; 15 | font-size: ; 16 | font-style: ; 17 | font-weight: ; 18 | } 19 | /* Common properties */ 20 | QWidget { 21 | background-color: #1E1E1E; 22 | color: #D4D4D4; 23 | } 24 | IDAView { 25 | border: none; 26 | border-bottom: 1px solid #414141; 27 | font-family: ""; 28 | font-size: ; 29 | font-style: ; 30 | font-weight: ; 31 | } 32 | hexview_t { 33 | border: none; 34 | font-family: ""; 35 | font-size: ; 36 | font-style: ; 37 | font-weight: ; 38 | } 39 | CustomIDAMemo { 40 | border: none; 41 | font-family: ""; 42 | font-size: ; 43 | font-style: ; 44 | font-weight: ; 45 | } 46 | QToolBar { 47 | /* Toolbar */ 48 | background-color: #333; 49 | border: none; 50 | padding: 8px; 51 | spacing: 8px; 52 | } 53 | QToolBar:active { 54 | background-color: #3C3C3C; 55 | } 56 | QToolBar QWidget { 57 | background: transparent; 58 | } 59 | QToolBar:handle:horizontal { 60 | image: url(/icons/drag.png); 61 | padding-right: 10px; 62 | padding-left: 0; 63 | width: 10px; 64 | } 65 | QToolBar:handle:vertical { 66 | image: url(/icons/drag-vertical.png); 67 | padding-bottom: 10px; 68 | padding-left: 0; 69 | height: 10px; 70 | } 71 | IDAMainWindow > QStatusBar { 72 | min-height: 0; 73 | height: 27px; 74 | padding-left: 7px; 75 | background: #007acc; 76 | } 77 | IDAMainWindow > QStatusBar:item { 78 | border: none; 79 | } 80 | IDAMainWindow > QStatusBar QWidget { 81 | font-family: 'Consolas', 'Menlo'; 82 | color: #fff; 83 | padding-left: 17px; 84 | } 85 | QPushButton { 86 | /* Buttons */ 87 | font-family: 'Segoe UI', 'Helvetica Neue'; 88 | text-align: center; 89 | min-height: 20px; 90 | min-width: 50px; 91 | border: none; 92 | background: #0e639c; 93 | padding: 2px 14px; 94 | } 95 | QPushButton:hover { 96 | background: #17b; 97 | border: 1px solid #2D3234; 98 | } 99 | QPushButton:default { 100 | border: 1px solid #2D3234; 101 | } 102 | QPushButton:pressed { 103 | border: 1px solid #215D9C; 104 | } 105 | QTreeView { 106 | font-family: 'Segoe UI', 'Helvetica Neue'; 107 | border: 1px solid #1B1F20; 108 | } 109 | QTreeView:item { 110 | font-family: 'Segoe UI', 'Helvetica Neue'; 111 | font-size: 14px; 112 | height: 27.5px; 113 | } 114 | QTreeView:item:selected { 115 | background-color: #094771; 116 | } 117 | QLineEdit { 118 | /* Single line edit */ 119 | font-family: 'Segoe UI', 'Helvetica Neue'; 120 | border: 1px solid transparent; 121 | background: #272727; 122 | color: #ccc; 123 | padding: 4px; 124 | } 125 | QLineEdit:focus { 126 | border: 1px solid #135785; 127 | } 128 | /* Dock widget without tabs */ 129 | QTabBar { 130 | font-family: 'Segoe UI', 'Helvetica Neue'; 131 | background-color: #252526; 132 | } 133 | QTabBar:tab { 134 | border-right: 1px solid #252526; 135 | background-color: #2D2D2D; 136 | height: 43px; 137 | text-transform: uppercase; 138 | font-size: 14px; 139 | padding-left: 16px; 140 | padding-right: 16px; 141 | } 142 | QTabBar:tab:selected { 143 | background-color: #1E1E1E; 144 | } 145 | QTabBar:close-button { 146 | /* For toolbar */ 147 | image: url(/icons/close.png); 148 | icon-size: 20px; 149 | padding: 0px; 150 | } 151 | QTabBar:close-button:hover { 152 | background: rgba(255, 255, 255, 0.1); 153 | } 154 | QTabBar:close-button:pressed { 155 | icon-size: 24px; 156 | padding: 1px -1px -1px 1px; 157 | } 158 | QMenuBar { 159 | /* Menu bar & items */ 160 | font-family: 'Segoe UI', 'Helvetica Neue'; 161 | background-color: #333; 162 | padding-left: 2px; 163 | } 164 | QMenuBar:active { 165 | background-color: #3C3C3C; 166 | } 167 | QMenuBar:item { 168 | background: transparent; 169 | color: #ccc; 170 | padding: 8px 9px; 171 | } 172 | QMenuBar:item:selected { 173 | background-color: #505050; 174 | } 175 | QTableView { 176 | /* Table and headers */ 177 | font-family: 'Segoe UI', 'Helvetica Neue'; 178 | border: 1px solid #1B1F20; 179 | background-color: #252526; 180 | } 181 | QTableView:item { 182 | font-family: 'Segoe UI', 'Helvetica Neue'; 183 | font-size: 14px; 184 | height: 27.5px; 185 | } 186 | QTableView:item:selected { 187 | border: none !important; 188 | background-color: #094771; 189 | } 190 | QTableView:section:item { 191 | background: #1e1e1e !important; 192 | } 193 | QTableView QHeaderView:section { 194 | background-color: #2D2D2D; 195 | border: none; 196 | } 197 | QTableView QHeaderView:section:horizontal { 198 | padding: 5px; 199 | border-left: 1px solid #2D3234; 200 | } 201 | QTableView QHeaderView:section:vertical { 202 | padding: 0; 203 | background: transparent; 204 | } 205 | QTableView QTableCornerButton:section { 206 | background: #2D3234; 207 | border: 0px outset #000; 208 | } 209 | QListView { 210 | border: 1px solid #1B1F20; 211 | } 212 | QListView:item { 213 | font-family: 'Segoe UI', 'Helvetica Neue'; 214 | font-size: 14px; 215 | height: 27.5px; 216 | } 217 | QListView:item:selected { 218 | background-color: #094771; 219 | } 220 | QCheckBox { 221 | background-color: #D4D4D4; 222 | } 223 | QCheckBox, 224 | QLabel, 225 | QRadioButton { 226 | background: transparent; 227 | } 228 | QMenu { 229 | background-color: #252526; 230 | padding-bottom: 8px; 231 | } 232 | QMenu:item { 233 | font-weight: 400; 234 | padding: 6px 40px 3px 40px; 235 | } 236 | QMenu:item:selected { 237 | background-color: #094771; 238 | } 239 | QMenu:right-arrow { 240 | image: url(/icons/menu.png); 241 | margin: 5px 15px 5px 5px; 242 | } 243 | QMenu:icon { 244 | padding-left: 20px; 245 | } 246 | QMenu:separator { 247 | height: 1px; 248 | background: #616162; 249 | width: 1px; 250 | margin: 6px; 251 | } 252 | QComboBox { 253 | /* Combobox which is editable or not editable */ 254 | background: #3c3c3c; 255 | border: 1px solid #1B1F20; 256 | padding: 4px; 257 | } 258 | QComboBox:focus, 259 | QComboBox:on { 260 | border: 1px solid #135785; 261 | border: 1px solid transparent; 262 | } 263 | QComboBox:editable { 264 | border: 1px solid transparent; 265 | } 266 | QComboBox QLineEdit { 267 | background: transparent; 268 | border: 0; 269 | padding: 0; 270 | } 271 | QComboBox:drop-down { 272 | subcontrol-origin: padding; 273 | subcontrol-position: top right; 274 | border: none; 275 | width: 20px; 276 | } 277 | QComboBox:drop-down:editable { 278 | subcontrol-origin: padding; 279 | subcontrol-position: top right; 280 | border: none; 281 | width: 20px; 282 | } 283 | QComboBox:down-arrow { 284 | image: url(/icons/expand.png); 285 | margin: 0; 286 | } 287 | QComboBox > QLineEdit { 288 | border: none; 289 | min-height: default; 290 | } 291 | QComboBox > QLineEdit:hover { 292 | border: none; 293 | min-height: default; 294 | } 295 | QComboBox > QLineEdit:focus { 296 | border: none; 297 | min-height: default; 298 | } 299 | QComboBox QAbstractItemView { 300 | background: #3c3c3c; 301 | outline: none; 302 | selection-background-color: #062f4a; 303 | } 304 | QComboBox:focus { 305 | border: 1px solid #215D9C; 306 | } 307 | QComboBox QLineEdit:focus { 308 | border-right: none; 309 | } 310 | QTextEdit { 311 | /* Multiple line edit */ 312 | background-color: #2D3234; 313 | border: 1px solid #1B1F20; 314 | } 315 | TNavBand > QPushButton, 316 | nav_scroll_button_t { 317 | border: none; 318 | background: transparent; 319 | min-height: default; 320 | min-width: default; 321 | padding: default; 322 | border-radius: default; 323 | } 324 | RegJumpButton { 325 | min-height: 0; 326 | min-width: 0; 327 | border: none; 328 | padding: 0; 329 | } 330 | /* Dock widget which has tabs */ 331 | DockWidgetTitle { 332 | font: 14px 'Segoe UI', 'Helvetica Neue'; 333 | background: #252526; 334 | text-transform: uppercase; 335 | min-height: 0px; 336 | height: 43px; 337 | padding: 0px 5px 0px 5px; 338 | border: none; 339 | } 340 | DockWidgetTitle DockWidgetTitleButton { 341 | color: #fff; 342 | background: transparent; 343 | border: none; 344 | min-height: 0; 345 | min-width: 0; 346 | margin: 0; 347 | padding: 0; 348 | } 349 | DockWidgetTitle DockWidgetTitleButton:hover { 350 | background: rgba(255, 255, 255, 0.1); 351 | } 352 | DockWidgetTitle DockWidgetTitleButton[toolTip="Close"] { 353 | qproperty-icon: url(/icons/close.png); 354 | icon-size: 20px; 355 | } 356 | DockWidgetTitle DockWidgetTitleButton[toolTip="Fullscreen"] { 357 | qproperty-icon: url(/icons/fullscreen.png); 358 | icon-size: 20px; 359 | } 360 | DockWidgetTitle DockWidgetTitleButton[toolTip="Float"] { 361 | qproperty-icon: url(/icons/float.png); 362 | icon-size: 20px; 363 | } 364 | EditContainer { 365 | border: 1px solid #1B1F20; 366 | font-family: ""; 367 | font-size: ; 368 | font-style: ; 369 | font-weight: ; 370 | } 371 | QScrollBar { 372 | /* Scrollbar */ 373 | background-color: #1E1E1E; 374 | border: 0px solid #383838; 375 | margin: 0; 376 | padding: 0; 377 | } 378 | QScrollBar:horizontal { 379 | border-top-width: 1px; 380 | height: 12px; 381 | } 382 | QScrollBar:vertical { 383 | border-left-width: 1px; 384 | width: 12px; 385 | } 386 | QScrollBar:sub-line { 387 | width: 0; 388 | height: 0; 389 | } 390 | QScrollBar:add-line { 391 | width: 0; 392 | height: 0; 393 | } 394 | QScrollBar:add-page { 395 | background: none; 396 | width: 0; 397 | height: 0; 398 | } 399 | QScrollBar:sub-page { 400 | background: none; 401 | width: 0; 402 | height: 0; 403 | } 404 | QScrollBar:handle { 405 | background-color: rgba(121, 121, 121, 0.4); 406 | } 407 | QScrollBar:handle:vertical { 408 | min-height: 20px; 409 | } 410 | QScrollBar:handle:horizontal { 411 | min-width: 20px; 412 | } 413 | QScrollBar:handle:hover { 414 | background-color: rgba(100, 100, 100, 0.7); 415 | } 416 | ChooserContainer { 417 | border: 1px solid #1B1F20; 418 | } 419 | QGroupBox { 420 | border: 1px solid #1B1F20; 421 | margin-top: 5px; 422 | } 423 | QGroupBox:title { 424 | subcontrol-origin: margin; 425 | subcontrol-position: top center; 426 | } 427 | TextArrows { 428 | border-bottom: 1px solid #414141; 429 | } 430 | IDADockWidget[objectName="Output window"] { 431 | /* Output window */ 432 | qproperty-windowIcon: url(/icons/blank.png); 433 | } 434 | IDADockWidget[objectName="Output window"] DockWidgetTitle { 435 | background: #1e1e1e; 436 | color: #e7e7e7; 437 | margin: 0; 438 | } 439 | IDADockWidget[objectName="Output window"] QTextEdit:focus { 440 | border: 1px solid #215D9C; 441 | } 442 | IDADockWidget[objectName="Output window"] QLineEdit { 443 | padding-bottom: 2px; 444 | } 445 | IDADockWidget[objectName="Output window"] QGroupBox { 446 | margin: 0; 447 | padding: 0; 448 | border: none; 449 | } 450 | IDADockWidget[objectName="Output window"] QGroupBox QPushButton { 451 | border: none; 452 | text-transform: uppercase; 453 | min-width: 70px; 454 | } 455 | IDADockWidget[objectName="Output window"] QGroupBox QPushButton:hover { 456 | border: none; 457 | } 458 | IDADockWidget[objectName="Output window"] QGroupBox QPushButton:focus { 459 | border: none; 460 | } 461 | -------------------------------------------------------------------------------- /plugins/idaskins/themes/vscode-dark/stylesheet.less: -------------------------------------------------------------------------------- 1 | @text : #D4D4D4; 2 | @border : #ccc; 3 | @text_lighter : #fff; 4 | @text_light : #e7e7e7; 5 | @sans_serif : 'Segoe UI', 6 | 'Helvetica Neue'; 7 | @monospace : 'Consolas', 8 | 'Menlo'; 9 | 10 | @tab_font_size: 14px; 11 | @ui_font_size : 14px; 12 | 13 | @background_primary : #1E1E1E; 14 | @background_menu : #252526; 15 | @background_color_4 : #3C3C3C; 16 | @background_color_5 : #333; 17 | @background_color_6 : #505050; 18 | @background_color_7 : #2D3234; 19 | @background_color_9 : #2D2D2D; 20 | @background_color_11: rgba(121, 121, 121, 0.4); 21 | @background_color_12: rgba(100, 100, 100, 0.7); 22 | @background_color_13: #094771; 23 | 24 | .disasm-font { 25 | font-family: ""; 26 | font-size : ; 27 | font-style : ; 28 | font-weight: ; 29 | } 30 | 31 | .hexview-font { 32 | font-family: ""; 33 | font-size : ; 34 | font-style : ; 35 | font-weight: ; 36 | } 37 | 38 | .text-input-font { 39 | font-family: ""; 40 | font-size : ; 41 | font-style : ; 42 | font-weight: ; 43 | } 44 | 45 | /* Common properties */ 46 | QWidget { 47 | background-color: @background_primary; 48 | color : @text; 49 | } 50 | 51 | IDAView { 52 | border : none; 53 | border-bottom: 1px solid #414141; 54 | .disasm-font; 55 | } 56 | 57 | hexview_t { 58 | border: none; 59 | .hexview-font; 60 | } 61 | 62 | CustomIDAMemo { 63 | border: none; 64 | .text-input-font; 65 | } 66 | 67 | QToolBar { 68 | /* Toolbar */ 69 | background-color: @background_color_5; 70 | border : none; 71 | padding : 8px; 72 | spacing : 8px; 73 | 74 | &:active { 75 | background-color: @background_color_4; 76 | } 77 | 78 | QWidget { 79 | background: transparent; 80 | } 81 | 82 | &:handle:horizontal { 83 | image : url(/icons/drag.png); 84 | padding-right: 10px; 85 | padding-left : 0; 86 | width : 10px; 87 | } 88 | 89 | &:handle:vertical { 90 | image : url(/icons/drag-vertical.png); 91 | padding-bottom: 10px; 92 | padding-left : 0; 93 | height : 10px; 94 | } 95 | } 96 | 97 | IDAMainWindow { 98 | >QStatusBar { 99 | &:item { 100 | border: none; 101 | } 102 | 103 | QWidget { 104 | font-family : @monospace; 105 | color : @text_lighter; 106 | padding-left: 17px; 107 | } 108 | 109 | min-height : 0; 110 | height : 27px; 111 | padding-left: 7px; 112 | background : #007acc; 113 | } 114 | } 115 | 116 | QPushButton { 117 | /* Buttons */ 118 | font-family: @sans_serif; 119 | text-align : center; 120 | min-height : 20px; 121 | min-width : 50px; 122 | border : none; 123 | background : #0e639c; 124 | padding : 2px 14px; 125 | 126 | &:hover { 127 | background: #17b; 128 | border : 1px solid #2D3234; 129 | } 130 | 131 | &:default { 132 | border: 1px solid #2D3234; 133 | } 134 | 135 | &:pressed { 136 | border: 1px solid #215D9C; 137 | } 138 | } 139 | 140 | QTreeView { 141 | font-family: @sans_serif; 142 | border : 1px solid #1B1F20; 143 | 144 | &:item { 145 | font-family: @sans_serif; 146 | font-size : @ui_font_size; 147 | height : 27.5px; 148 | 149 | &:selected { 150 | background-color: @background_color_13; 151 | } 152 | } 153 | } 154 | 155 | QLineEdit { 156 | /* Single line edit */ 157 | font-family: @sans_serif; 158 | border : 1px solid transparent; 159 | background : #272727; 160 | color : @border; 161 | padding : 4px; 162 | 163 | &:focus { 164 | border: 1px solid #135785; 165 | } 166 | } 167 | 168 | /* Dock widget without tabs */ 169 | QTabBar { 170 | font-family : @sans_serif; 171 | background-color: @background_menu; 172 | 173 | &:tab { 174 | border-right : 1px solid #252526; 175 | background-color: @background_color_9; 176 | height : 43px; 177 | text-transform : uppercase; 178 | font-size : @tab_font_size; 179 | padding-left : 16px; 180 | padding-right : 16px; 181 | 182 | &:selected { 183 | background-color: @background_primary; 184 | } 185 | } 186 | 187 | &:close-button { 188 | &:hover { 189 | background: rgba(255, 255, 255, 0.1); 190 | } 191 | 192 | &:pressed { 193 | icon-size: 24px; 194 | padding : 1px -1px -1px 1px; 195 | } 196 | 197 | /* For toolbar */ 198 | image : url(/icons/close.png); 199 | icon-size: 20px; 200 | padding : 0px; 201 | } 202 | } 203 | 204 | QMenuBar { 205 | /* Menu bar & items */ 206 | font-family : @sans_serif; 207 | background-color: @background_color_5; 208 | padding-left : 2px; 209 | 210 | &:active { 211 | background-color: @background_color_4; 212 | } 213 | 214 | &:item { 215 | background: transparent; 216 | color : @border; 217 | padding : 8px 9px; 218 | 219 | &:selected { 220 | background-color: @background_color_6; 221 | } 222 | } 223 | } 224 | 225 | QTableView { 226 | /* Table and headers */ 227 | font-family : @sans_serif; 228 | border : 1px solid #1B1F20; 229 | background-color: @background_menu; 230 | 231 | &:item { 232 | font-family: @sans_serif; 233 | font-size : @ui_font_size; 234 | height : 27.5px; 235 | 236 | &:selected { 237 | border : none !important; 238 | background-color: @background_color_13; 239 | } 240 | } 241 | 242 | &:section { 243 | &:item { 244 | background: #1e1e1e !important; 245 | } 246 | } 247 | 248 | QHeaderView { 249 | &:section { 250 | background-color: @background_color_9; 251 | border : none; 252 | 253 | &:horizontal { 254 | padding : 5px; 255 | border-left: 1px solid #2D3234; 256 | } 257 | 258 | &:vertical { 259 | padding : 0; 260 | background: transparent; 261 | } 262 | } 263 | } 264 | 265 | QTableCornerButton { 266 | &:section { 267 | background: #2D3234; 268 | border : 0px outset #000; 269 | } 270 | } 271 | } 272 | 273 | QListView { 274 | &:item { 275 | font-family: @sans_serif; 276 | font-size : @ui_font_size; 277 | height : 27.5px; 278 | 279 | &:selected { 280 | background-color: @background_color_13; 281 | } 282 | } 283 | 284 | border: 1px solid #1B1F20; 285 | } 286 | 287 | QCheckBox { 288 | background-color: @text; 289 | } 290 | 291 | QCheckBox, 292 | QLabel, 293 | QRadioButton { 294 | background: transparent; 295 | } 296 | 297 | QMenu { 298 | background-color: @background_menu; 299 | padding-bottom : 8px; 300 | 301 | &:item { 302 | font-weight: 400; 303 | padding : 6px 40px 3px 40px; 304 | 305 | &:selected { 306 | background-color: @background_color_13; 307 | } 308 | } 309 | 310 | &:right-arrow { 311 | image : url(/icons/menu.png); 312 | margin: 5px 15px 5px 5px; 313 | } 314 | 315 | &:icon { 316 | padding-left: 20px; 317 | } 318 | 319 | &:separator { 320 | height : 1px; 321 | background: #616162; 322 | width : 1px; 323 | margin : 6px; 324 | } 325 | } 326 | 327 | QComboBox { 328 | /* Combobox which is editable or not editable */ 329 | background: #3c3c3c; 330 | border : 1px solid #1B1F20; 331 | padding : 4px; 332 | 333 | &:focus, 334 | &:on { 335 | border: 1px solid #135785; 336 | border: 1px solid transparent; 337 | } 338 | 339 | &:editable { 340 | border: 1px solid transparent; 341 | } 342 | 343 | QLineEdit { 344 | background: transparent; 345 | border : 0; 346 | padding : 0; 347 | } 348 | 349 | &:drop-down { 350 | subcontrol-origin : padding; 351 | subcontrol-position: top right; 352 | border : none; 353 | width : 20px; 354 | 355 | &:editable { 356 | subcontrol-origin : padding; 357 | subcontrol-position: top right; 358 | border : none; 359 | width : 20px; 360 | } 361 | } 362 | 363 | &:down-arrow { 364 | image : url(/icons/expand.png); 365 | margin: 0; 366 | } 367 | 368 | >QLineEdit { 369 | border : none; 370 | min-height: default; 371 | 372 | &:hover { 373 | border : none; 374 | min-height: default; 375 | } 376 | 377 | &:focus { 378 | border : none; 379 | min-height: default; 380 | } 381 | } 382 | 383 | QAbstractItemView { 384 | background : rgb(60, 60, 60); 385 | outline : none; 386 | selection-background-color: rgb(6, 47, 74); 387 | } 388 | 389 | &:focus { 390 | border: 1px solid #215D9C; 391 | } 392 | 393 | QLineEdit { 394 | &:focus { 395 | border-right: none; 396 | } 397 | } 398 | } 399 | 400 | QTextEdit { 401 | /* Multiple line edit */ 402 | background-color: @background_color_7; 403 | border : 1px solid #1B1F20; 404 | } 405 | 406 | TNavBand>QPushButton, 407 | nav_scroll_button_t { 408 | border : none; 409 | background : transparent; 410 | min-height : default; 411 | min-width : default; 412 | padding : default; 413 | border-radius: default; 414 | } 415 | 416 | RegJumpButton { 417 | min-height: 0; 418 | min-width : 0; 419 | border : none; 420 | padding : 0; 421 | } 422 | 423 | /* Dock widget which has tabs */ 424 | DockWidgetTitle { 425 | font : @ui_font_size @sans_serif; 426 | background : #252526; 427 | text-transform: uppercase; 428 | min-height : 0px; 429 | height : 43px; 430 | padding : 0px 5px 0px 5px; 431 | border : none; 432 | 433 | DockWidgetTitleButton { 434 | &:hover { 435 | background: rgba(255, 255, 255, 0.1); 436 | } 437 | 438 | color : @text_lighter; 439 | background: transparent; 440 | border : none; 441 | min-height: 0; 442 | min-width : 0; 443 | margin : 0; 444 | padding : 0; 445 | 446 | &[toolTip="Close"] { 447 | qproperty-icon: url(/icons/close.png); 448 | icon-size : 20px; 449 | } 450 | 451 | &[toolTip="Fullscreen"] { 452 | qproperty-icon: url(/icons/fullscreen.png); 453 | icon-size : 20px; 454 | } 455 | 456 | &[toolTip="Float"] { 457 | qproperty-icon: url(/icons/float.png); 458 | icon-size : 20px; 459 | } 460 | 461 | } 462 | 463 | } 464 | 465 | EditContainer { 466 | border: 1px solid #1B1F20; 467 | .text-input-font; 468 | } 469 | 470 | QScrollBar { 471 | /* Scrollbar */ 472 | background-color: @background_primary; 473 | border : 0px solid #383838; 474 | margin : 0; 475 | padding : 0; 476 | 477 | &:horizontal { 478 | border-top-width: 1px; 479 | height : 12px; 480 | } 481 | 482 | &:vertical { 483 | border-left-width: 1px; 484 | width : 12px; 485 | } 486 | 487 | &:sub-line { 488 | width : 0; 489 | height: 0; 490 | } 491 | 492 | &:add-line { 493 | width : 0; 494 | height: 0; 495 | } 496 | 497 | &:add-page { 498 | background: none; 499 | width : 0; 500 | height : 0; 501 | } 502 | 503 | &:sub-page { 504 | background: none; 505 | width : 0; 506 | height : 0; 507 | } 508 | 509 | &:handle { 510 | &:vertical { 511 | min-height: 20px; 512 | } 513 | 514 | &:horizontal { 515 | min-width: 20px; 516 | } 517 | 518 | background-color: @background_color_11; 519 | 520 | &:hover { 521 | background-color: @background_color_12; 522 | } 523 | } 524 | } 525 | 526 | ChooserContainer { 527 | border: 1px solid #1B1F20; 528 | } 529 | 530 | QGroupBox { 531 | border : 1px solid #1B1F20; 532 | margin-top: 5px; 533 | 534 | &:title { 535 | subcontrol-origin : margin; 536 | subcontrol-position: top center; 537 | } 538 | } 539 | 540 | TextArrows { 541 | border-bottom: 1px solid #414141; 542 | } 543 | 544 | IDADockWidget[objectName="Output window"] { 545 | /* Output window */ 546 | qproperty-windowIcon: url(/icons/blank.png); 547 | 548 | DockWidgetTitle { 549 | background: #1e1e1e; 550 | color : @text_light; 551 | margin : 0; 552 | } 553 | 554 | QTextEdit { 555 | &:focus { 556 | border: 1px solid #215D9C; 557 | } 558 | } 559 | 560 | QLineEdit { 561 | padding-bottom: 2px; 562 | } 563 | 564 | QGroupBox { 565 | QPushButton { 566 | border : none; 567 | text-transform: uppercase; 568 | min-width : 70px; 569 | 570 | &:hover { 571 | border: none; 572 | } 573 | 574 | &:focus { 575 | border: none; 576 | } 577 | } 578 | 579 | margin : 0; 580 | padding : 0; 581 | border : none; 582 | } 583 | 584 | } -------------------------------------------------------------------------------- /plugins/idaskins/themes/idadark-unis/stylesheet.qss: -------------------------------------------------------------------------------- 1 | QWidget, QScrollArea, QAbstractView { 2 | background-color: #363636; 3 | color: #ddd; 4 | outline: none; 5 | } 6 | 7 | QAbstractItemView { 8 | alternate-background-color: #363636; 9 | color: #ddd; 10 | /* border: 1px solid 3A3939; 11 | border-radius: 2px; */ 12 | } 13 | 14 | QAbstractScrollArea { 15 | border-radius: 2px; 16 | border: 1px solid #363636; 17 | background-color: transparent; 18 | } 19 | 20 | QStackedWidget { 21 | border: 1px solid transparent; 22 | } 23 | 24 | /* 25 | QWidget { 26 | color: #ddd; 27 | background-color: #363636; 28 | selection-background-color:#181818; 29 | selection-color: #ffffff; 30 | background-clip: border; 31 | border-image: none; 32 | border: 0px solid transparent; 33 | outline: 0; 34 | } 35 | QWidget:focus { 36 | border: 1px solid #3daee9; 37 | } 38 | QWidget:item:hover { 39 | border: 1px solid #ff0000; 40 | background-color: #181818; 41 | color: #eff0f1; 42 | } 43 | QWidget:item:selected { 44 | background-color: #181818; 45 | } 46 | 47 | QDockWidget { 48 | background: #363636; 49 | border: 1px solid #474747; 50 | } 51 | QDockWidget::close-button, QDockWidget::float-button { 52 | border: 1px solid transparent; 53 | border-radius: 2px; 54 | background: transparent; 55 | } 56 | QDockWidget::close-button:hover, QDockWidget::float-button:hover { 57 | background: rgba(255, 255, 255, 10); 58 | } 59 | QDockWidget::close-button:pressed, QDockWidget::float-button:pressed { 60 | padding: 1px -1px -1px 1px; 61 | background: rgba(255, 255, 255, 10); 62 | } 63 | */ 64 | 65 | QApplication, QFrame, QDialog, QFileDialog, QMessageBox, 66 | QListWidget, QTableWidget, QTextBrowser { 67 | background-color: #363636; 68 | color: #ddd; 69 | } 70 | 71 | QMainWindow::separator { 72 | background: transparent; 73 | border: 1px dashed #777777; 74 | } 75 | QMainWindow::separator:hover { 76 | background: #777777; 77 | } 78 | 79 | QSizeGrip { 80 | image: url(/icons/sizegrip.png); 81 | width: 12px; 82 | height: 12px; 83 | } 84 | 85 | QSlider:focus { 86 | border: none; 87 | } 88 | 89 | /* CheckBox and GroupBox */ 90 | 91 | QGroupBox { 92 | border: 1px solid #606060; 93 | border-radius: 2px; 94 | margin-top: 6px; 95 | } 96 | QGroupBox::title { 97 | subcontrol-origin: margin; 98 | subcontrol-position: top center; 99 | padding: 0 2px; 100 | } 101 | 102 | QCheckBox { 103 | spacing: 5px; 104 | outline: none; 105 | color: #ddd; 106 | margin-bottom: 2px; 107 | border: none; 108 | } 109 | QCheckBox:focus { 110 | background: #2f2f2f; 111 | color: #ffffff; 112 | } 113 | QCheckBox:disabled { 114 | color: #666; 115 | } 116 | QCheckBox::indicator, 117 | QGroupBox::indicator { 118 | width: 18px; 119 | height: 18px; 120 | } 121 | QGroupBox::indicator { 122 | margin-left: 2px; 123 | border: none; 124 | } 125 | QCheckBox::indicator:unchecked:focus, 126 | QGroupBox::indicator:unchecked:focus, 127 | QCheckBox::indicator:unchecked { 128 | image: url(/icons/checkbox_unchecked.png); 129 | } 130 | QCheckBox::indicator:unchecked:hover, 131 | QCheckBox::indicator:unchecked:pressed, 132 | QGroupBox::indicator:unchecked:hover, 133 | QGroupBox::indicator:unchecked:pressed { 134 | image: url(/icons/checkbox_unchecked_focus.png); 135 | } 136 | QCheckBox::indicator:checked:focus, 137 | QGroupBox::indicator:checked:focus, 138 | QCheckBox::indicator:checked { 139 | image: url(/icons/checkbox_checked.png); 140 | } 141 | QCheckBox::indicator:checked:hover, 142 | QCheckBox::indicator:checked:pressed, 143 | QGroupBox::indicator:checked:hover, 144 | QGroupBox::indicator:checked:pressed { 145 | image: url(/icons/checkbox_checked_focus.png); 146 | } 147 | QCheckBox::indicator:indeterminate:focus, 148 | QCheckBox::indicator:indeterminate { 149 | image: url(/icons/checkbox_indeterminate.png); 150 | } 151 | QCheckBox::indicator:indeterminate:hover, 152 | QCheckBox::indicator:indeterminate:pressed { 153 | image: url(/icons/checkbox_indeterminate_focus.png); 154 | } 155 | QCheckBox::indicator:checked:disabled, 156 | QGroupBox::indicator:checked:disabled { 157 | image: url(/icons/checkbox_checked_disabled.png); 158 | } 159 | QCheckBox::indicator:unchecked:disabled, 160 | QGroupBox::indicator:unchecked:disabled { 161 | image: url(/icons/checkbox_unchecked_disabled.png); 162 | } 163 | 164 | /* RadioButton */ 165 | 166 | QRadioButton, QLabel { 167 | border: 0px solid black; 168 | } 169 | 170 | QRadioButton { 171 | /*background: transparent;*/ 172 | spacing: 5px; 173 | outline: none; 174 | color: #eff0f1; 175 | margin-bottom: 2px; 176 | border: none; 177 | } 178 | QRadioButton:focus { 179 | background: #2f2f2f; 180 | color: #ffffff; 181 | border: none; 182 | } 183 | QRadioButton:disabled { 184 | color: #666; 185 | } 186 | QRadioButton::indicator { 187 | width: 22px; 188 | height: 22px; 189 | } 190 | QRadioButton::indicator:unchecked:focus, 191 | QRadioButton::indicator:unchecked { 192 | image: url(/icons/radio_unchecked.png); 193 | } 194 | QRadioButton::indicator:unchecked:hover, 195 | QRadioButton::indicator:unchecked:pressed { 196 | image: url(/icons/radio_unchecked_focus.png); 197 | } 198 | QRadioButton::indicator:checked:focus, 199 | QRadioButton::indicator:checked { 200 | image: url(/icons/radio_checked.png); 201 | } 202 | QRadioButton::indicator:checked:hover, 203 | QRadioButton::indicator:checked:pressed { 204 | image: url(/icons/radio_checked_focus.png); 205 | } 206 | QRadioButton::indicator:checked:disabled { 207 | image: url(/icons/radio_checked_disabled.png); 208 | } 209 | QRadioButton::indicator:unchecked:disabled { 210 | image: url(/icons/radio_unchecked_disabled.png); 211 | } 212 | 213 | /* AbstractSpinBox */ 214 | 215 | QAbstractSpinBox { 216 | background-color: #2d2d2d; 217 | color: #ddd; 218 | border: 1px solid #363636; 219 | border-radius: 2px; 220 | min-width: 75px; 221 | outline: none; 222 | } 223 | QAbstractSpinBox:focus { 224 | border: 1px solid #077; 225 | } 226 | QAbstractSpinBox:hover { 227 | border: 1px solid #0aa; 228 | } 229 | QAbstractSpinBox:up-button { 230 | background-color: transparent; 231 | subcontrol-origin: border; 232 | subcontrol-position: center right; 233 | } 234 | QAbstractSpinBox:down-button { 235 | background-color: transparent; 236 | subcontrol-origin: border; 237 | subcontrol-position: center left; 238 | } 239 | QAbstractSpinBox::up-arrow,QAbstractSpinBox::up-arrow:disabled,QAbstractSpinBox::up-arrow:off { 240 | image: url(/icons/up_arrow_disabled.png); 241 | width: 10px; 242 | height: 10px; 243 | } 244 | QAbstractSpinBox::up-arrow:hover { 245 | image: url(/icons/up_arrow.png); 246 | } 247 | QAbstractSpinBox::down-arrow,QAbstractSpinBox::down-arrow:disabled,QAbstractSpinBox::down-arrow:off { 248 | image: url(/icons/down_arrow_disabled.png); 249 | width: 10px; 250 | height: 10px; 251 | } 252 | QAbstractSpinBox::down-arrow:hover { 253 | image: url(/icons/down_arrow.png); 254 | } 255 | 256 | /* TextEdit and PlainTextEdit */ 257 | 258 | QTextEdit, QPlainTextEdit { 259 | background-color: #2d2d2d; 260 | color: #ddd; 261 | border: 1px solid #363636; 262 | border-radius: 2px; 263 | } 264 | QTextEdit:focus, QPlainTextEdit:focus { 265 | border: 1px solid #077; 266 | } 267 | QTextEdit:hover, QPlainTextEdit:hover { 268 | border: 1px solid #0aa; 269 | } 270 | 271 | /* Menu and MenuBar */ 272 | 273 | QMenuBar { 274 | background-color: #2d2d2d; /*qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #666666, stop: 0.3 #444444, stop: 0.5 #2a2a2a, stop: 1.0 #444444);*/ 275 | color: #ddd; 276 | border-bottom: 0px solid #181818; 277 | } 278 | QMenuBar::item { 279 | background: transparent; 280 | } 281 | QMenuBar::item:selected { 282 | background-color: #111111; 283 | border: 1px solid #666666; 284 | color: #ffffff; 285 | } 286 | QMenuBar::item:pressed { 287 | border: 1px solid #666666; 288 | background-color: #111111; /* #3087B2 */ 289 | color: #ffffff; 290 | margin-bottom:-1px; 291 | padding-bottom:1px; 292 | } 293 | 294 | QMenu { 295 | background-color: #363636; 296 | color: #ddd; 297 | margin: 1px; 298 | border: 1px solid #686868; 299 | } 300 | QMenu::icon { 301 | border: 0px solid transparent; 302 | background-color: transparent; 303 | padding-left: 10px; 304 | } 305 | QMenu::item { 306 | padding: 3px 30px 3px 30px; 307 | border: 1px solid transparent; /* reserve space for selection border */ 308 | } 309 | QMenu::item:selected { 310 | background-color: #111111; 311 | border: 1px solid #555555; 312 | color: #ffffff; 313 | } 314 | QMenu::separator { 315 | height: 2px; 316 | background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop:0 #000000, stop:1 #999999); 317 | margin: 2px 5px 2px 5px; 318 | } 319 | QMenu::item:disabled { 320 | color: #666; 321 | } 322 | 323 | /* LineEdit */ 324 | 325 | QLineEdit { 326 | background-color: #2a2a2a; 327 | border: 1px solid #474747; 328 | min-height: 18px; 329 | border-radius: 2px; 330 | color: #ddd; 331 | padding: 1px; 332 | } 333 | QLineEdit:disabled { 334 | color: #666; 335 | } 336 | QLineEdit:focus { 337 | border: 1px solid #077; 338 | } 339 | QLineEdit:hover { 340 | border: 1px solid #0aa; 341 | } 342 | 343 | /* TabWidget and TabBar */ 344 | 345 | QTabWidget { 346 | border: 1px solid transparent; 347 | } 348 | QTabWidget:focus { 349 | border: none; 350 | } 351 | QTabWidget::pane { 352 | background-color: #363636; 353 | border: 1px solid #606060; 354 | border-radius: 2px; 355 | margin: 1px; 356 | padding: 2px; 357 | } 358 | QTabWidget::pane:top { 359 | top: -1px; 360 | } 361 | QTabWidget::pane:right { 362 | right: -1px; 363 | } 364 | QTabWidget::pane:bottom { 365 | bottom: -1px; 366 | } 367 | QTabWidget::pane:left { 368 | left: -1px; 369 | } 370 | 371 | QTabBar { 372 | qproperty-drawBase: 0; 373 | left: 5px; /* move to the right by 5px */ 374 | border-radius: 3px; 375 | color: #ddd; 376 | } 377 | QTabBar::tab { 378 | border: 1px solid #181818; 379 | background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #666666, stop: 0.4 #555555, stop: 0.5 #343434, stop: 1.0 #383838); 380 | padding: 2px 6px 2px 6px; 381 | } 382 | QTabBar::tab:top { 383 | border-top-left-radius: 6px; 384 | border-top-right-radius: 6px; 385 | } 386 | QTabBar::tab:right { 387 | border-top-right-radius: 6px; 388 | border-bottom-right-radius: 6px; 389 | } 390 | QTabBar::tab:bottom { 391 | border-bottom-left-radius: 6px; 392 | border-bottom-right-radius: 6px; 393 | } 394 | QTabBar::tab:left { 395 | border-top-left-radius: 6px; 396 | border-bottom-left-radius: 6px; 397 | } 398 | QTabBar::tab:selected { 399 | background-color: #2d2d2d; /* qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #666666, stop: 1 #777777); */ 400 | border: 1px solid #606060; 401 | color: #ffffff; 402 | } 403 | QTabBar::tab:top:selected { 404 | border-bottom-color: #00aaff; 405 | } 406 | QTabBar::tab:right:selected { 407 | border-left-color: #00aaff; 408 | } 409 | QTabBar::tab:bottom:selected { 410 | border-top-color: #00aaff; 411 | } 412 | QTabBar::tab:left:selected { 413 | border-right-color: #00aaff; 414 | } 415 | QTabBar::tab:top:!selected { 416 | margin-top: 2px; 417 | } 418 | QTabBar::tab:right:!selected { 419 | margin-right: 2px; 420 | } 421 | QTabBar::tab:bottom:!selected { 422 | margin-bottom: 2px; 423 | } 424 | QTabBar::tab:left:!selected { 425 | margin-left: 2px; 426 | } 427 | QTabBar::tab:hover { 428 | background-color: #111111; 429 | border: 1px solid #666666; 430 | color: #ffffff; 431 | } 432 | 433 | /* Table */ 434 | 435 | QHeaderView { 436 | /* background-color: #2d2d2d; 437 | background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #666666, stop: 0.4 #555555, stop: 0.5 #444444, stop: 1.0 #3a3a3a); */ 438 | background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #666666, stop: 0.4 #4c4c4c, stop: 0.5 #343434, stop: 1.0 #383838); 439 | border: 1px solid #181818; 440 | text-align: center; 441 | color: #ddd; 442 | min-height: 22px; 443 | } 444 | QHeaderView::section { 445 | background-color: transparent; /*qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #666666, stop: 0.4 #4c4c4c, stop: 0.5 #343434, stop: 1.0 #383838);*/ 446 | color: #ddd; 447 | 448 | padding-top: 3px; 449 | padding-left: 4px; 450 | 451 | border: 1px solid #666666; 452 | border-top-width: 0; 453 | border-left-color: #777777; 454 | border-right-color: #181818; 455 | } 456 | QHeaderView::section:hover { 457 | /* background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop:0 #64686b, stop:1 #494c4e); */ 458 | background-color: #111111; 459 | color: #ffffff; 460 | border-bottom-color: #666; 461 | } 462 | QHeaderView::section:first { 463 | /* border-left-width: 0px; */ 464 | } 465 | QHeaderView::section:last { 466 | border-right-width: 2px; 467 | border-right-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop:0.5 #181818, stop:0.6 #777777); 468 | } 469 | 470 | QTableView { 471 | border: 1px solid transparent; /*474747*/ 472 | background-color: #2d2d2d; 473 | } 474 | 475 | QTableCornerButton::section { 476 | background: #363636; /* #222 */ 477 | /*background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #666666, stop: 0.4 #555555, stop: 0.5 #444444, stop: 1.0 #3a3a3a);*/ 478 | border: 1px solid transparent; 479 | } 480 | 481 | /* Splitter */ 482 | 483 | QSplitter::handle, QSplitterHandle { 484 | border: 1px dashed #777777; 485 | } 486 | QSplitter::handle:hover, QSplitterHandle:hover { 487 | background-color: #181818; 488 | border: 1px dashed #777777; /* #3daee9 */ 489 | } 490 | QSplitter::handle:horizontal, QSplitterHandle:horizontal { 491 | width: 2px; 492 | } 493 | QSplitter::handle:vertical, QSplitterHandle:vertical { 494 | height: 2px; 495 | } 496 | QSplitter::handle:pressed, QSplitterHandle:pressed { 497 | background-color: #181818; 498 | border: 1px solid #181818; 499 | } 500 | 501 | /* StatusBar */ 502 | 503 | QStatusBar { 504 | background: transparent; 505 | /* border: 1px solid #181818; */ 506 | border-top: 2px solid qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop:0.5 #181818, stop:0.6 #555555); 507 | border-right: 2px solid qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop:0.5 #555555, stop:0.6 #181818); 508 | border-bottom: 2px solid qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop:0.5 #555555, stop:0.6 #181818); 509 | border-left: 2px solid qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop:0.5 #181818, stop:0.6 #555555); 510 | } 511 | QStatusBar::item { 512 | margin: 1px 0px 2px 0px; 513 | border-right: 2px solid qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop:0.5 #181818, stop:0.6 #777777); 514 | } 515 | QStatusBar QLabel { 516 | padding: 1px 4px 1px 4px; 517 | } /* */ 518 | 519 | /* ToolBox */ 520 | 521 | /* QToolBox { 522 | padding: 2px; 523 | border: 0px solid transparent; 524 | } 525 | QToolBox::tab { 526 | color: #eff0f1; 527 | background-color: #31363b; 528 | border: 1px solid #76797C; 529 | border-bottom: 1px transparent #31363b; 530 | border-top-left-radius: 5px; 531 | border-top-right-radius: 5px; 532 | } 533 | QToolBox::tab:selected { 534 | font: italic; 535 | background-color: #31363b; 536 | border-color: #3daee9; 537 | } */ 538 | 539 | /* ProgressBar */ 540 | 541 | /* QProgressBar { 542 | border: 1px solid #76797C; 543 | border-radius: 5px; 544 | text-align: center; 545 | } 546 | QProgressBar::chunk { 547 | background-color: #05B8CC; 548 | } */ 549 | 550 | /* IDA Related */ 551 | 552 | IDAView, hexview_t, CustomIDAMemo { 553 | border: none; 554 | } 555 | 556 | CustomIDAMemo, EditContainer { 557 | font-family: ""; 558 | font-size: ; 559 | font-style: ; 560 | font-weight: ; 561 | } 562 | 563 | IDAView { 564 | font-family: ""; 565 | font-size: ; 566 | font-style: ; 567 | font-weight: ; 568 | } 569 | 570 | hexview_t { 571 | font-family: ""; 572 | font-size: ; 573 | font-style: ; 574 | font-weight: ; 575 | } 576 | 577 | /* TODO: DEBUG_REGISTERS, OUTPUT_WINDOW */ 578 | 579 | /* Scroll bar */ 580 | 581 | QScrollBar { 582 | background-color: #363636; /* transparent */ 583 | border: none; 584 | } 585 | QScrollBar::handle { 586 | background-color: #585858; 587 | border: 1px solid #181818; 588 | border-radius: 5px; 589 | } 590 | 591 | QScrollBar:horizontal { 592 | height: 12px; 593 | margin: 0px 10px 0px 10px; 594 | } 595 | QScrollBar::handle:horizontal { 596 | /* background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop:0 #5c5c5c, stop:1 #515151); */ 597 | min-width: 20px; 598 | margin: 1px 0px; 599 | } 600 | QScrollBar::handle:horizontal:hover { 601 | background-color: #181818; 602 | border: 1px solid #0aa; 603 | } 604 | QScrollBar::add-line:horizontal { 605 | background-color: #585858; 606 | border: 1px solid #181818; 607 | border-radius: 4px; 608 | 609 | width: 8px; 610 | height: 8px; 611 | subcontrol-position: right; 612 | subcontrol-origin: margin; 613 | } 614 | QScrollBar::sub-line:horizontal { 615 | background-color: #585858; 616 | border: 1px solid #181818; 617 | border-radius: 4px; 618 | 619 | width: 8px; 620 | height: 8px; 621 | subcontrol-position: left; 622 | subcontrol-origin: margin; 623 | } 624 | QScrollBar::add-line:horizontal:hover, QScrollBar::sub-line:horizontal:hover { 625 | background-color: #181818; 626 | border: 1px solid #0aa; 627 | } 628 | QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal { 629 | background: none; 630 | } 631 | QScrollBar:left-arrow:horizontal, QScrollBar::right-arrow:horizontal { 632 | width: 0px; 633 | height: 0px; 634 | /* border: 2px solid grey; 635 | width: 3px; 636 | height: 3px; 637 | background: white; */ 638 | } 639 | 640 | QScrollBar:vertical { 641 | width: 12px; 642 | margin: 10px 0 10px 0; 643 | } 644 | QScrollBar::handle:vertical { 645 | /* background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop:0 #5c5c5c, stop:1 #515151); */ 646 | min-height: 40px; 647 | margin: 0px 1px; 648 | } 649 | QScrollBar::handle:vertical:hover { 650 | background-color: #181818; 651 | border: 1px solid #0aa; 652 | } 653 | QScrollBar::add-line:vertical { 654 | background-color: #585858; 655 | border: 1px solid #181818; 656 | border-radius: 4px; 657 | 658 | width: 8px; 659 | height: 8px; 660 | subcontrol-position: bottom; 661 | subcontrol-origin: margin; 662 | } 663 | QScrollBar::sub-line:vertical { 664 | background-color: #585858; 665 | border: 1px solid #181818; 666 | border-radius: 4px; 667 | 668 | width: 8px; 669 | height: 8px; 670 | subcontrol-position: top; 671 | subcontrol-origin: margin; 672 | } 673 | QScrollBar::add-line:vertical:hover, QScrollBar::sub-line:vertical:hover { 674 | background-color: #181818; 675 | border: 1px solid #0aa; 676 | } 677 | QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { 678 | background: none; 679 | } 680 | 681 | /* Tool bar */ 682 | 683 | QToolBar { 684 | border: 1px solid #181818; 685 | border-left-color: #777777; 686 | background-color: #363636; /*qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #666666, stop: 0.4 #555555, stop: 0.5 #3c3c3c, stop: 1.0 #3a3a3a);*/ 687 | font-weight: bold; 688 | } 689 | /* QToolBar::handle:horizontal { 690 | image: url(/icons/Hmovetoolbar.png); 691 | } 692 | QToolBar::handle:vertical { 693 | image: url(/icons/Vmovetoolbar.png); 694 | } */ 695 | QToolBar::separator:top, 696 | QToolBar::separator:bottom, 697 | QToolBar::separator:horizontal { 698 | /*image: url(/icons/Hsepartoolbar.png);*/ 699 | width: 2px; 700 | margin: 2px 4px; 701 | background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop:0.5 #181818, stop:0.6 #777777); 702 | } 703 | QToolBar::separator:left, 704 | QToolBar::separator:right, 705 | QToolBar::separator:vertical { 706 | /* image: url(/icons/Vsepartoolbar.png); */ 707 | height: 2px; 708 | margin: 4px 2px; 709 | background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop:0.5 #181818, stop:0.6 #777777); 710 | } 711 | 712 | QToolButton { 713 | background: none; 714 | } 715 | QToolButton::menu-indicator { 716 | image: url(/icons/down_arrow.png); 717 | top: -7px; left: -2px; /* shift it a bit */ 718 | } 719 | QToolButton::menu-arrow { 720 | image: url(/icons/down_arrow.png); 721 | } 722 | 723 | /* PushButton */ 724 | 725 | QPushButton { 726 | background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #555555, stop: 0.4 #444444, stop: 0.5 #333333, stop: 1.0 #2d2d2d); 727 | border: 1px solid #181818; 728 | text-align: center; 729 | min-height: 20px; 730 | min-width: 50px; 731 | padding: 1px 8px 1px 8px; 732 | border-radius: 2px; 733 | outline: none; 734 | } 735 | QPushButton:default { 736 | border: 2px solid #181818; 737 | border-radius: 3px; 738 | color: #ffffff; 739 | padding: -1px; 740 | } 741 | QPushButton:focus { 742 | border: 1px solid #077; 743 | color: #ffffff; 744 | } 745 | QPushButton:hover { 746 | border: 1px solid #0aa; 747 | background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #666666, stop: 0.4 #555555, stop: 0.5 #444444, stop: 1.0 #2d2d2d); 748 | color: #ffffff; 749 | } 750 | QPushButton:pressed { 751 | border: 1px solid #0ee; 752 | background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #444444, stop: 0.5 #2d2d2d, stop: 0.6 #555555, stop: 1.0 #777777); 753 | color: #ffffff; 754 | } 755 | QPushButton::menu-indicator { 756 | subcontrol-origin: padding; 757 | subcontrol-position: bottom right; 758 | left: 8px; 759 | } 760 | QPushButton:disabled { 761 | background-color: #2d2d2d; 762 | border: 1px solid #181818; 763 | color: #666; 764 | } 765 | 766 | TNavBand > QPushButton, nav_scroll_button_t, RegJumpButton { 767 | min-height: 0; 768 | min-width: 0; 769 | padding: 0; 770 | border: none; 771 | } 772 | 773 | QPushButton.DockWidgetTitleButton { 774 | border: none; 775 | min-height: 15px; 776 | min-width: 15px; 777 | margin: 5px; 778 | padding: 3px; 779 | } 780 | 781 | DockWidgetTitle { 782 | min-height: 30px; 783 | padding-bottom: 5px; 784 | } 785 | 786 | /* ComboBox */ 787 | 788 | QComboBox { 789 | background-color: #2a2a2a; 790 | selection-background-color: #3daee9; 791 | border: 1px solid #474747; 792 | border-radius: 2px; 793 | padding: 1px 18px 1px 3px; 794 | margin: 1px; 795 | min-width: 6em; 796 | } 797 | QComboBox > QLineEdit { 798 | border: none; 799 | min-height: default; 800 | min-width: 6em; 801 | } 802 | QComboBox > QLineEdit:hover, QComboBox > QLineEdit:focus { 803 | border: none; 804 | min-width: 6em; 805 | } 806 | QComboBox::drop-down { 807 | subcontrol-origin: padding; 808 | subcontrol-position: top right; 809 | width: 15px; 810 | 811 | border-left-width: 1px; 812 | border-left-color: #666; 813 | border-left-style: solid; 814 | border-top-right-radius: 2px; 815 | border-bottom-right-radius: 2px; 816 | } 817 | QComboBox::drop-down:hover { 818 | border-left-color: #0aa; 819 | background-color: #111111; 820 | } 821 | QComboBox::drop-down:open { 822 | background-color: #111111; 823 | } 824 | QComboBox:focus { 825 | border: 1px solid #777777; 826 | color: #ffffff; 827 | /* background-color: #181818; */ 828 | } 829 | QComboBox:hover { 830 | border: 1px solid #0aa; 831 | } 832 | QComboBox::down-arrow { 833 | image: url(/icons/expand.png); 834 | } 835 | QComboBox::down-arrow:on { 836 | image: url(/icons/down_expand.png); 837 | } 838 | QComboBox:on { 839 | /*padding-top: 3px; 840 | padding-left: 4px;*/ 841 | } 842 | QComboBox QAbstractItemView { 843 | border: 1px solid #686868; 844 | background-color: #363636; 845 | selection-background-color: #000; 846 | selection-color: #ffffff; 847 | color: #ddd; 848 | padding: 4px 1px 12px 4px; 849 | outline: none; 850 | } 851 | QComboBox QAbstractItemView::item { 852 | border: 1px solid #555555; 853 | color: #ffffff; 854 | } 855 | QComboBox QAbstractItemView::item:selected { 856 | background-color: #111111; 857 | border: 1px solid #555555; 858 | color: #ffffff; 859 | } 860 | 861 | /* Close, maximize and undock button for dock widgets */ 862 | 863 | IDADockWidget > QWidget > QAbstractButton { 864 | background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #777777, stop: 0.4 #666666, stop: 0.5 #444444, stop: 1.0 #4c4c4c); 865 | border: 1px solid #181818; 866 | border-radius: 2px; 867 | } 868 | IDADockWidget > QWidget > QAbstractButton:hover, 869 | IDADockWidget > QWidget > QAbstractButton:default { 870 | background-color: #777; 871 | border: 1px solid #0aa; 872 | } 873 | IDADockWidget > QWidget > QAbstractButton:pressed { 874 | background-color: #888; 875 | border: 1px solid #0ee; 876 | } 877 | 878 | EditContainer, ChooserContainer, QListView, QTreeView { 879 | border: 1px solid #666; 880 | border-radius: 2px; 881 | outline: none; 882 | } 883 | 884 | /* Remove border from IDC/Python switch button */ 885 | /* CLIWidget > QGroupBox > QPushButton, 886 | CLIWidget > QGroupBox > QPushButton:hover, 887 | CLIWidget > QGroupBox > QPushButton:focus { 888 | border: none; 889 | } */ 890 | 891 | CLIWidget > QGroupBox { 892 | margin-top: 0; 893 | } 894 | 895 | QTreeView::item, QListView::item, QTableView::item { 896 | border: 1px solid transparent; 897 | color: #ddd; 898 | outline: 0; 899 | } 900 | QTreeView::item:hover, QListView::item:hover, QTableView::item:hover { 901 | border: 1px solid #555555; 902 | background-color: #4c4c4c; /*474747*/ 903 | } 904 | QTreeView::item:selected, QListView::item:selected, QTableView::item:selected { 905 | border: 1px solid #555555; 906 | background-color: #181818; /*474747*/ 907 | color: #ffffff; 908 | } 909 | 910 | QAbstractView:hover { 911 | border: 1px solid #0aa; 912 | } 913 | 914 | QToolTip, QTipLabel { 915 | border: 1px solid #AA5500; 916 | border-radius: 3px; 917 | background: #111111; 918 | color: #ddd; 919 | margin: 0; 920 | padding: 1px; 921 | } 922 | --------------------------------------------------------------------------------