def main(filepath=None): if not check_dependencies(): sys.exit(1) set_app_user_model_id() from PySide2.QtWidgets import QApplication, QSplashScreen from PySide2.QtGui import QFontDatabase, QPixmap, QIcon from PySide2.QtCore import Qt from .config import FONT_LOCATION, IMG_LOCATION app = QApplication(sys.argv) app.setApplicationDisplayName("angr management") app.setApplicationName("angr management") # Make + display splash screen splashscreen_location = os.path.join(IMG_LOCATION, 'angr-splash.png') splash_pixmap = QPixmap(splashscreen_location) splash = QSplashScreen(splash_pixmap, Qt.WindowStaysOnTopHint) icon_location = os.path.join(IMG_LOCATION, 'angr.png') splash.setWindowIcon(QIcon(icon_location)) splash.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint) splash.setEnabled(False) splash.show() time.sleep(0.05) app.processEvents() from .logic import GlobalInfo from .ui.css import CSS from .ui.main_window import MainWindow # Load fonts QFontDatabase.addApplicationFont( os.path.join(FONT_LOCATION, "SourceCodePro-Regular.ttf")) GlobalInfo.gui_thread = threading.get_ident() # apply the CSS app.setStyleSheet(CSS.global_css()) file_to_open = filepath if filepath else sys.argv[1] if len( sys.argv) > 1 else None main_window = MainWindow() splash.finish(main_window) if file_to_open is not None: main_window.load_file(file_to_open) app.exec_()
file = QFile(file_path) file.open(QIODevice.ReadOnly) ts = QTextStream(file) string = ts.readAll() return string def progress_update(self, progress): self.progressBar.setValue(progress) if __name__ == '__main__': multiprocessing.freeze_support() app = QApplication(sys.argv) pixmap = QPixmap('ui_resources/cascade_splash.png') splash = QSplashScreen(pixmap) splash.setWindowFlags(Qt.WindowStaysOnTopHint) splash.setEnabled(False) splash.setMask(pixmap.mask()) splash.show() time.sleep(0.1) # This seems to fix the splash mask displaying but not the actual image app.processEvents() window = MainWindow() window.show() window.raise_() window.activateWindow() splash.finish(window) sys.exit(app.exec_())
def start_management(filepath=None, use_daemon=False): if sys.platform == "darwin": macos_bigsur_wants_layer() if not check_dependencies(): sys.exit(1) set_app_user_model_id() set_windows_event_loop_policy() from PySide2.QtWidgets import QApplication, QSplashScreen, QMessageBox from PySide2.QtGui import QFontDatabase, QPixmap, QIcon from PySide2.QtCore import Qt from .config import FONT_LOCATION, IMG_LOCATION, Conf app = QApplication(sys.argv) app.setApplicationDisplayName("angr management") app.setApplicationName("angr management") icon_location = os.path.join(IMG_LOCATION, 'angr.png') QApplication.setWindowIcon(QIcon(icon_location)) # URL scheme from .logic.url_scheme import AngrUrlScheme scheme = AngrUrlScheme() registered, _ = scheme.is_url_scheme_registered() supported = scheme.is_url_scheme_supported() if not registered and supported: btn = QMessageBox.question(None, "Setting up angr URL scheme", "angr URL scheme allows \"deep linking\" from browsers and other applications by registering the " "angr:// protocol to the current user. Do you want to register it? You may unregister at any " "time in Preferences.", defaultButton=QMessageBox.Yes) if btn == QMessageBox.Yes: try: AngrUrlScheme().register_url_scheme() except (ValueError, FileNotFoundError) as ex: QMessageBox.warning(None, "Error in registering angr URL scheme", "Failed to register the angr URL scheme.\n" "The following exception occurred:\n" + str(ex)) # Make + display splash screen splashscreen_location = os.path.join(IMG_LOCATION, 'angr-splash.png') splash_pixmap = QPixmap(splashscreen_location) splash = QSplashScreen(splash_pixmap, Qt.WindowStaysOnTopHint) icon_location = os.path.join(IMG_LOCATION, 'angr.png') splash.setWindowIcon(QIcon(icon_location)) splash.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint) splash.setEnabled(False) splash.show() for _ in range(5): time.sleep(0.01) app.processEvents() from .logic import GlobalInfo from .ui.css import CSS from .ui.main_window import MainWindow from .daemon import daemon_exists, run_daemon_process, daemon_conn from .daemon.client import ClientService # Load fonts QFontDatabase.addApplicationFont(os.path.join(FONT_LOCATION, "SourceCodePro-Regular.ttf")) QFontDatabase.addApplicationFont(os.path.join(FONT_LOCATION, "DejaVuSansMono.ttf")) # Initialize font-related configuration Conf.init_font_config() # Set global font app.setFont(Conf.ui_default_font) GlobalInfo.gui_thread = threading.get_ident() # apply the CSS app.setStyleSheet(CSS.global_css()) if use_daemon: # connect to daemon (if there is one) if not daemon_exists(): print("[+] Starting a new daemon.") run_daemon_process() time.sleep(0.2) else: print("[+] Connecting to an existing angr management daemon.") while True: try: GlobalInfo.daemon_conn = daemon_conn(service=ClientService) except ConnectionRefusedError: print("[-] Connection failed... try again.") time.sleep(0.4) continue print("[+] Connected to daemon.") break from rpyc import BgServingThread th = BgServingThread(GlobalInfo.daemon_conn) file_to_open = filepath if filepath else None main_window = MainWindow() splash.finish(main_window) if file_to_open is not None: main_window.load_file(file_to_open) app.exec_()
def start_management(filepath=None, use_daemon=None, profiling=False): if sys.platform == "darwin": macos_bigsur_wants_layer() if not check_dependencies_qt(): # it's likely that other dependencies are also missing. check them here before exiting. check_dependencies() sys.exit(1) set_app_user_model_id() set_windows_event_loop_policy() from PySide2.QtWidgets import QApplication, QSplashScreen, QMessageBox from PySide2.QtGui import QFontDatabase, QPixmap, QIcon from PySide2.QtCore import Qt, QCoreApplication from .config import FONT_LOCATION, IMG_LOCATION, Conf # Enable High-DPI support # https://stackoverflow.com/questions/35714837/how-to-get-sharp-ui-on-high-dpi-with-qt-5-6 if ("QT_DEVICE_PIXEL_RATIO" not in os.environ and "QT_AUTO_SCREEN_SCALE_FACTOR" not in os.environ and "QT_SCALE_FACTOR" not in os.environ and "QT_SCREEN_SCALE_FACTORS" not in os.environ): QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) # No more rounding # https://github.com/pyqtgraph/pyqtgraph/issues/756 # https://lists.qt-project.org/pipermail/development/2019-September/037434.html QApplication.setHighDpiScaleFactorRoundingPolicy( Qt.HighDpiScaleFactorRoundingPolicy.PassThrough) # Use highDPI pixmaps QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps) app = QApplication(sys.argv) app.setApplicationDisplayName("angr management") app.setApplicationName("angr management") icon_location = os.path.join(IMG_LOCATION, 'angr.png') QApplication.setWindowIcon(QIcon(icon_location)) # try to import the initial configuration for the install Conf.attempt_importing_initial_config() # Make + display splash screen splashscreen_location = os.path.join(IMG_LOCATION, 'angr-splash.png') splash_pixmap = QPixmap(splashscreen_location) splash = QSplashScreen(splash_pixmap, Qt.WindowStaysOnTopHint) icon_location = os.path.join(IMG_LOCATION, 'angr.png') splash.setWindowIcon(QIcon(icon_location)) splash.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint) splash.setEnabled(False) splash.show() for _ in range(5): time.sleep(0.01) app.processEvents() if not check_dependencies(): sys.exit(1) from .ui.css import refresh_theme # import .ui after shwing the splash screen since it's going to take time refresh_theme() import angr angr.loggers.profiling_enabled = True if profiling else False from .logic import GlobalInfo from .ui.main_window import MainWindow # Load fonts QFontDatabase.addApplicationFont( os.path.join(FONT_LOCATION, "SourceCodePro-Regular.ttf")) QFontDatabase.addApplicationFont( os.path.join(FONT_LOCATION, "DejaVuSansMono.ttf")) # Initialize font-related configuration Conf.init_font_config() # Set global font app.setFont(Conf.ui_default_font) GlobalInfo.gui_thread = threading.get_ident() file_to_open = filepath if filepath else None main_window = MainWindow(app=app, use_daemon=use_daemon) splash.finish(main_window) if file_to_open is not None: main_window.load_file(file_to_open) app.exec_()