Coverage report: 73%

Files Functions Classes

coverage.py v7.14.1, created at 2026-06-20 12:55 +0000

File function   statements missing excluded   coverage
pyPhotoAlbum/__init__.py (no function)   3 0 0   100%
pyPhotoAlbum/alignment.py ElementMaximizer.__init__   5 0 0   100%
pyPhotoAlbum/alignment.py ElementMaximizer._record_initial_states   2 0 0   100%
pyPhotoAlbum/alignment.py ElementMaximizer.check_collision   19 0 0   100%
pyPhotoAlbum/alignment.py ElementMaximizer.find_max_scale   13 0 0   100%
pyPhotoAlbum/alignment.py ElementMaximizer.grow_iteration   15 0 0   100%
pyPhotoAlbum/alignment.py ElementMaximizer.check_element_collision   10 0 0   100%
pyPhotoAlbum/alignment.py ElementMaximizer.center_element_horizontally   11 0 0   100%
pyPhotoAlbum/alignment.py ElementMaximizer.center_element_vertically   11 0 0   100%
pyPhotoAlbum/alignment.py ElementMaximizer.center_elements   3 0 0   100%
pyPhotoAlbum/alignment.py ElementMaximizer.maximize   6 0 0   100%
pyPhotoAlbum/alignment.py AlignmentManager.get_bounds   7 0 0   100%
pyPhotoAlbum/alignment.py AlignmentManager.align_left   9 0 0   100%
pyPhotoAlbum/alignment.py AlignmentManager.align_right   10 1 0   90%
pyPhotoAlbum/alignment.py AlignmentManager.align_top   9 1 0   89%
pyPhotoAlbum/alignment.py AlignmentManager.align_bottom   10 1 0   90%
pyPhotoAlbum/alignment.py AlignmentManager.align_horizontal_center   11 1 0   91%
pyPhotoAlbum/alignment.py AlignmentManager.align_vertical_center   11 1 0   91%
pyPhotoAlbum/alignment.py AlignmentManager.make_same_size   10 0 0   100%
pyPhotoAlbum/alignment.py AlignmentManager.make_same_width   10 1 0   90%
pyPhotoAlbum/alignment.py AlignmentManager.make_same_height   10 1 0   90%
pyPhotoAlbum/alignment.py AlignmentManager.distribute_horizontally   14 0 0   100%
pyPhotoAlbum/alignment.py AlignmentManager.distribute_vertically   14 1 0   93%
pyPhotoAlbum/alignment.py AlignmentManager.space_horizontally   16 0 0   100%
pyPhotoAlbum/alignment.py AlignmentManager.space_vertically   16 1 0   94%
pyPhotoAlbum/alignment.py AlignmentManager.fit_to_page_width   7 7 0   0%
pyPhotoAlbum/alignment.py AlignmentManager.fit_to_page_height   7 7 0   0%
pyPhotoAlbum/alignment.py AlignmentManager.fit_to_page   11 11 0   0%
pyPhotoAlbum/alignment.py AlignmentManager.maximize_pattern   4 0 0   100%
pyPhotoAlbum/alignment.py AlignmentManager.expand_to_bounds   55 0 0   100%
pyPhotoAlbum/alignment.py (no function)   52 0 0   100%
pyPhotoAlbum/asset_heal_dialog.py AssetHealDialog.__init__   8 0 0   100%
pyPhotoAlbum/asset_heal_dialog.py AssetHealDialog._init_ui   30 0 0   100%
pyPhotoAlbum/asset_heal_dialog.py AssetHealDialog._scan_missing_assets   27 0 0   100%
pyPhotoAlbum/asset_heal_dialog.py AssetHealDialog._add_search_path   5 0 0   100%
pyPhotoAlbum/asset_heal_dialog.py AssetHealDialog._remove_search_path   4 0 0   100%
pyPhotoAlbum/asset_heal_dialog.py AssetHealDialog._attempt_healing   68 0 0   100%
pyPhotoAlbum/asset_heal_dialog.py (no function)   12 0 0   100%
pyPhotoAlbum/asset_manager.py compute_file_md5   11 3 0   73%
pyPhotoAlbum/asset_manager.py AssetManager.__init__   5 0 0   100%
pyPhotoAlbum/asset_manager.py AssetManager.import_asset   16 1 0   94%
pyPhotoAlbum/asset_manager.py AssetManager.acquire_reference   10 10 0   0%
pyPhotoAlbum/asset_manager.py AssetManager.release_reference   16 16 0   0%
pyPhotoAlbum/asset_manager.py AssetManager.get_absolute_path   1 0 0   100%
pyPhotoAlbum/asset_manager.py AssetManager.get_reference_count   1 0 0   100%
pyPhotoAlbum/asset_manager.py AssetManager.serialize   1 0 0   100%
pyPhotoAlbum/asset_manager.py AssetManager.deserialize   3 0 0   100%
pyPhotoAlbum/asset_manager.py AssetManager.compute_asset_hash   5 0 0   100%
pyPhotoAlbum/asset_manager.py AssetManager.compute_all_hashes   12 1 0   92%
pyPhotoAlbum/asset_manager.py AssetManager.find_duplicates   12 0 0   100%
pyPhotoAlbum/asset_manager.py AssetManager.deduplicate_assets   35 7 0   80%
pyPhotoAlbum/asset_manager.py AssetManager.get_duplicate_stats   14 2 0   86%
pyPhotoAlbum/asset_manager.py AssetManager.find_unused_assets   13 1 0   92%
pyPhotoAlbum/asset_manager.py AssetManager.get_unused_stats   11 2 0   82%
pyPhotoAlbum/asset_manager.py AssetManager.remove_unused_assets   26 4 0   85%
pyPhotoAlbum/asset_manager.py (no function)   23 0 0   100%
pyPhotoAlbum/async_backend.py get_image_dimensions   11 0 0   100%
pyPhotoAlbum/async_backend.py ImageCache.__init__   5 0 0   100%
pyPhotoAlbum/async_backend.py ImageCache._estimate_image_size   3 0 0   100%
pyPhotoAlbum/async_backend.py ImageCache._make_key   3 0 0   100%
pyPhotoAlbum/async_backend.py ImageCache.get   9 0 0   100%
pyPhotoAlbum/async_backend.py ImageCache.put   13 0 0   100%
pyPhotoAlbum/async_backend.py ImageCache.clear   4 0 0   100%
pyPhotoAlbum/async_backend.py ImageCache.get_stats   2 0 0   100%
pyPhotoAlbum/async_backend.py AsyncImageLoader.__init__   13 0 0   100%
pyPhotoAlbum/async_backend.py AsyncImageLoader.start   7 0 0   100%
pyPhotoAlbum/async_backend.py AsyncImageLoader.stop   15 3 0   80%
pyPhotoAlbum/async_backend.py AsyncImageLoader._run_event_loop   6 0 0   100%
pyPhotoAlbum/async_backend.py AsyncImageLoader._process_queue   13 2 0   85%
pyPhotoAlbum/async_backend.py AsyncImageLoader._cancel_all_tasks   7 2 0   71%
pyPhotoAlbum/async_backend.py AsyncImageLoader._load_image   27 27 0   0%
pyPhotoAlbum/async_backend.py AsyncImageLoader._load_and_process_image   9 0 0   100%
pyPhotoAlbum/async_backend.py AsyncImageLoader._emit_loaded   6 3 0   50%
pyPhotoAlbum/async_backend.py AsyncImageLoader._emit_failed   6 3 0   50%
pyPhotoAlbum/async_backend.py AsyncImageLoader.request_load   15 0 0   100%
pyPhotoAlbum/async_backend.py AsyncImageLoader.cancel_load   12 4 0   67%
pyPhotoAlbum/async_backend.py AsyncImageLoader.get_stats   2 0 0   100%
pyPhotoAlbum/async_backend.py AsyncPDFGenerator.__init__   11 0 0   100%
pyPhotoAlbum/async_backend.py AsyncPDFGenerator.start   7 0 0   100%
pyPhotoAlbum/async_backend.py AsyncPDFGenerator.stop   12 1 0   92%
pyPhotoAlbum/async_backend.py AsyncPDFGenerator._run_event_loop   4 0 0   100%
pyPhotoAlbum/async_backend.py AsyncPDFGenerator.export_pdf   11 4 0   64%
pyPhotoAlbum/async_backend.py AsyncPDFGenerator.cancel_export   5 0 0   100%
pyPhotoAlbum/async_backend.py AsyncPDFGenerator._export_pdf_async   29 29 0   0%
pyPhotoAlbum/async_backend.py AsyncPDFGenerator._export_pdf_async.progress_callback   8 8 0   0%
pyPhotoAlbum/async_backend.py AsyncPDFGenerator._export_with_cache   6 0 0   100%
pyPhotoAlbum/async_backend.py AsyncPDFGenerator._export_with_cache.cached_open   12 12 0   0%
pyPhotoAlbum/async_backend.py AsyncPDFGenerator.is_exporting   2 0 0   100%
pyPhotoAlbum/async_backend.py AsyncPDFGenerator.get_stats   2 0 0   100%
pyPhotoAlbum/async_backend.py (no function)   66 0 0   100%
pyPhotoAlbum/async_project_loader.py AsyncProjectLoader.__init__   4 4 0   0%
pyPhotoAlbum/async_project_loader.py AsyncProjectLoader.cancel   1 1 0   0%
pyPhotoAlbum/async_project_loader.py AsyncProjectLoader.run   75 75 0   0%
pyPhotoAlbum/async_project_loader.py AsyncProjectLoader._normalize_asset_paths   23 23 0   0%
pyPhotoAlbum/async_project_loader.py load_from_zip_async   9 9 0   0%
pyPhotoAlbum/async_project_loader.py (no function)   19 0 0   100%
pyPhotoAlbum/autosave_manager.py AutosaveManager.__init__   1 0 0   100%
pyPhotoAlbum/autosave_manager.py AutosaveManager._ensure_checkpoint_directory   1 0 0   100%
pyPhotoAlbum/autosave_manager.py AutosaveManager._get_checkpoint_path   6 0 0   100%
pyPhotoAlbum/autosave_manager.py AutosaveManager.create_checkpoint   9 0 0   100%
pyPhotoAlbum/autosave_manager.py AutosaveManager._save_checkpoint_metadata   4 0 0   100%
pyPhotoAlbum/autosave_manager.py AutosaveManager.list_checkpoints   14 2 0   86%
pyPhotoAlbum/autosave_manager.py AutosaveManager.load_checkpoint   5 0 0   100%
pyPhotoAlbum/autosave_manager.py AutosaveManager.delete_checkpoint   10 3 0   70%
pyPhotoAlbum/autosave_manager.py AutosaveManager.delete_all_checkpoints   3 0 0   100%
pyPhotoAlbum/autosave_manager.py AutosaveManager.cleanup_old_checkpoints   22 2 0   91%
pyPhotoAlbum/autosave_manager.py AutosaveManager.has_checkpoints   1 0 0   100%
pyPhotoAlbum/autosave_manager.py AutosaveManager.get_latest_checkpoint   4 0 0   100%
pyPhotoAlbum/autosave_manager.py (no function)   23 0 0   100%
pyPhotoAlbum/commands.py _normalize_asset_path   5 0 0   100%
pyPhotoAlbum/commands.py _deserialize_element   10 2 0   80%
pyPhotoAlbum/commands.py Command.execute   0 0 2   100%
pyPhotoAlbum/commands.py Command.undo   0 0 2   100%
pyPhotoAlbum/commands.py Command.redo   0 0 2   100%
pyPhotoAlbum/commands.py Command.serialize   0 0 2   100%
pyPhotoAlbum/commands.py Command.deserialize   0 0 2   100%
pyPhotoAlbum/commands.py AddElementCommand.__init__   7 0 0   100%
pyPhotoAlbum/commands.py AddElementCommand.execute   3 0 0   100%
pyPhotoAlbum/commands.py AddElementCommand.undo   3 0 0   100%
pyPhotoAlbum/commands.py AddElementCommand.redo   1 0 0   100%
pyPhotoAlbum/commands.py AddElementCommand.serialize   1 0 0   100%
pyPhotoAlbum/commands.py AddElementCommand.deserialize   4 0 0   100%
pyPhotoAlbum/commands.py DeleteElementCommand.__init__   7 1 0   86%
pyPhotoAlbum/commands.py DeleteElementCommand.execute   3 0 0   100%
pyPhotoAlbum/commands.py DeleteElementCommand.undo   3 0 0   100%
pyPhotoAlbum/commands.py DeleteElementCommand.redo   1 1 0   0%
pyPhotoAlbum/commands.py DeleteElementCommand.serialize   1 0 0   100%
pyPhotoAlbum/commands.py DeleteElementCommand.deserialize   4 0 0   100%
pyPhotoAlbum/commands.py MoveElementCommand.__init__   3 0 0   100%
pyPhotoAlbum/commands.py MoveElementCommand.execute   1 0 0   100%
pyPhotoAlbum/commands.py MoveElementCommand.undo   1 0 0   100%
pyPhotoAlbum/commands.py MoveElementCommand.redo   1 0 0   100%
pyPhotoAlbum/commands.py MoveElementCommand.serialize   1 0 0   100%
pyPhotoAlbum/commands.py MoveElementCommand.deserialize   2 0 0   100%
pyPhotoAlbum/commands.py ResizeElementCommand.__init__   5 0 0   100%
pyPhotoAlbum/commands.py ResizeElementCommand.execute   2 0 0   100%
pyPhotoAlbum/commands.py ResizeElementCommand.undo   2 0 0   100%
pyPhotoAlbum/commands.py ResizeElementCommand.redo   1 1 0   0%
pyPhotoAlbum/commands.py ResizeElementCommand.serialize   1 0 0   100%
pyPhotoAlbum/commands.py ResizeElementCommand.deserialize   2 0 0   100%
pyPhotoAlbum/commands.py RotateElementCommand.__init__   8 0 0   100%
pyPhotoAlbum/commands.py RotateElementCommand.execute   30 11 0   63%
pyPhotoAlbum/commands.py RotateElementCommand.undo   9 2 0   78%
pyPhotoAlbum/commands.py RotateElementCommand.redo   1 0 0   100%
pyPhotoAlbum/commands.py RotateElementCommand.serialize   1 0 0   100%
pyPhotoAlbum/commands.py RotateElementCommand.deserialize   2 0 0   100%
pyPhotoAlbum/commands.py AdjustImageCropCommand.__init__   3 0 0   100%
pyPhotoAlbum/commands.py AdjustImageCropCommand.execute   1 0 0   100%
pyPhotoAlbum/commands.py AdjustImageCropCommand.undo   1 0 0   100%
pyPhotoAlbum/commands.py AdjustImageCropCommand.redo   1 1 0   0%
pyPhotoAlbum/commands.py AdjustImageCropCommand.serialize   1 0 0   100%
pyPhotoAlbum/commands.py AdjustImageCropCommand.deserialize   4 0 0   100%
pyPhotoAlbum/commands.py AlignElementsCommand.__init__   1 0 0   100%
pyPhotoAlbum/commands.py AlignElementsCommand.execute   1 0 0   100%
pyPhotoAlbum/commands.py AlignElementsCommand.undo   2 0 0   100%
pyPhotoAlbum/commands.py AlignElementsCommand.redo   5 0 0   100%
pyPhotoAlbum/commands.py AlignElementsCommand.serialize   1 0 0   100%
pyPhotoAlbum/commands.py AlignElementsCommand.deserialize   9 2 0   78%
pyPhotoAlbum/commands.py ResizeElementsCommand.__init__   2 0 0   100%
pyPhotoAlbum/commands.py ResizeElementsCommand.execute   1 0 0   100%
pyPhotoAlbum/commands.py ResizeElementsCommand.undo   3 0 0   100%
pyPhotoAlbum/commands.py ResizeElementsCommand.redo   3 3 0   0%
pyPhotoAlbum/commands.py ResizeElementsCommand.serialize   1 0 0   100%
pyPhotoAlbum/commands.py ResizeElementsCommand.deserialize   10 2 0   80%
pyPhotoAlbum/commands.py ChangeZOrderCommand.__init__   4 0 0   100%
pyPhotoAlbum/commands.py ChangeZOrderCommand.execute   4 0 0   100%
pyPhotoAlbum/commands.py ChangeZOrderCommand.undo   4 0 0   100%
pyPhotoAlbum/commands.py ChangeZOrderCommand.redo   1 0 0   100%
pyPhotoAlbum/commands.py ChangeZOrderCommand.serialize   1 0 0   100%
pyPhotoAlbum/commands.py ChangeZOrderCommand.deserialize   2 0 0   100%
pyPhotoAlbum/commands.py StateChangeCommand.__init__   4 0 0   100%
pyPhotoAlbum/commands.py StateChangeCommand.execute   1 0 0   100%
pyPhotoAlbum/commands.py StateChangeCommand.undo   1 0 0   100%
pyPhotoAlbum/commands.py StateChangeCommand.redo   1 0 0   100%
pyPhotoAlbum/commands.py StateChangeCommand.serialize   1 0 0   100%
pyPhotoAlbum/commands.py StateChangeCommand.deserialize   0 0 1   100%
pyPhotoAlbum/commands.py CommandHistory.__init__   5 0 0   100%
pyPhotoAlbum/commands.py CommandHistory.execute   10 1 0   90%
pyPhotoAlbum/commands.py CommandHistory._release_command_assets   8 6 0   25%
pyPhotoAlbum/commands.py CommandHistory.undo   8 1 0   88%
pyPhotoAlbum/commands.py CommandHistory.redo   8 1 0   88%
pyPhotoAlbum/commands.py CommandHistory.can_undo   1 0 0   100%
pyPhotoAlbum/commands.py CommandHistory.can_redo   1 0 0   100%
pyPhotoAlbum/commands.py CommandHistory.clear   6 1 0   83%
pyPhotoAlbum/commands.py CommandHistory.serialize   1 0 0   100%
pyPhotoAlbum/commands.py CommandHistory.deserialize   13 0 0   100%
pyPhotoAlbum/commands.py CommandHistory._fixup_page_layout   10 2 0   80%
pyPhotoAlbum/commands.py CommandHistory._deserialize_command   12 1 0   92%
pyPhotoAlbum/commands.py (no function)   101 0 11   100%
pyPhotoAlbum/decorators.py RibbonAction.__init__   9 0 0   100%
pyPhotoAlbum/decorators.py RibbonAction.__call__   4 0 0   100%
pyPhotoAlbum/decorators.py RibbonAction.__call__.wrapper   1 0 0   100%
pyPhotoAlbum/decorators.py ribbon_action   1 0 0   100%
pyPhotoAlbum/decorators.py NumericalInput.__init__   1 0 0   100%
pyPhotoAlbum/decorators.py NumericalInput.__call__   4 0 0   100%
pyPhotoAlbum/decorators.py NumericalInput.__call__.wrapper   1 0 0   100%
pyPhotoAlbum/decorators.py numerical_input   1 0 0   100%
pyPhotoAlbum/decorators.py UndoableOperation.__init__   2 0 0   100%
pyPhotoAlbum/decorators.py UndoableOperation.__call__   3 0 0   100%
pyPhotoAlbum/decorators.py UndoableOperation.__call__.wrapper   11 0 0   100%
pyPhotoAlbum/decorators.py UndoableOperation.__call__.wrapper.restore_state   3 3 0   0%
pyPhotoAlbum/decorators.py UndoableOperation._capture_state   6 1 0   83%
pyPhotoAlbum/decorators.py UndoableOperation._restore_state   16 16 0   0%
pyPhotoAlbum/decorators.py undoable_operation   1 0 0   100%
pyPhotoAlbum/decorators.py DialogAction.__init__   2 0 0   100%
pyPhotoAlbum/decorators.py DialogAction.__call__   3 0 0   100%
pyPhotoAlbum/decorators.py DialogAction.__call__.wrapper   14 2 0   86%
pyPhotoAlbum/decorators.py dialog_action   1 0 0   100%
pyPhotoAlbum/decorators.py (no function)   21 0 0   100%
pyPhotoAlbum/dialogs/__init__.py (no function)   3 0 0   100%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePreviewWidget.__init__   6 6 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePreviewWidget.paintEvent   29 29 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePreviewWidget.mousePressEvent   1 1 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePreviewWidget.set_selected   2 2 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePickerDialog.__init__   8 8 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePickerDialog._setup_ui   65 65 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePickerDialog._create_category_tab   29 29 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePickerDialog._on_frame_clicked   7 7 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePickerDialog._clear_selection   5 5 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePickerDialog._update_selection_display   6 6 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePickerDialog._update_corners   1 1 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePickerDialog._update_corners_visibility   6 6 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePickerDialog._select_all_corners   5 5 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePickerDialog._select_no_corners   5 5 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePickerDialog._select_diagonal_corners   5 5 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py FramePickerDialog.get_values   1 1 0   0%
pyPhotoAlbum/dialogs/frame_picker_dialog.py (no function)   24 24 0   0%
pyPhotoAlbum/dialogs/page_setup_dialog.py PageSetupDialog.__init__   6 0 0   100%
pyPhotoAlbum/dialogs/page_setup_dialog.py PageSetupDialog._setup_ui   14 0 0   100%
pyPhotoAlbum/dialogs/page_setup_dialog.py PageSetupDialog._create_page_selection_group   16 0 0   100%
pyPhotoAlbum/dialogs/page_setup_dialog.py PageSetupDialog._create_cover_settings_group   31 0 0   100%
pyPhotoAlbum/dialogs/page_setup_dialog.py PageSetupDialog._create_page_size_group   31 0 0   100%
pyPhotoAlbum/dialogs/page_setup_dialog.py PageSetupDialog._create_dpi_settings_group   18 0 0   100%
pyPhotoAlbum/dialogs/page_setup_dialog.py PageSetupDialog._create_button_layout   10 0 0   100%
pyPhotoAlbum/dialogs/page_setup_dialog.py PageSetupDialog._connect_signals   4 0 0   100%
pyPhotoAlbum/dialogs/page_setup_dialog.py PageSetupDialog._initialize_values   3 0 0   100%
pyPhotoAlbum/dialogs/page_setup_dialog.py PageSetupDialog._on_page_changed   22 0 0   100%
pyPhotoAlbum/dialogs/page_setup_dialog.py PageSetupDialog._update_spine_info   8 0 0   100%
pyPhotoAlbum/dialogs/page_setup_dialog.py PageSetupDialog.get_values   3 0 0   100%
pyPhotoAlbum/dialogs/page_setup_dialog.py (no function)   17 0 0   100%
pyPhotoAlbum/dialogs/print_settings_dialog.py PrintSettingsDialog.__init__   3 3 0   0%
pyPhotoAlbum/dialogs/print_settings_dialog.py PrintSettingsDialog._setup_ui   40 40 0   0%
pyPhotoAlbum/dialogs/print_settings_dialog.py PrintSettingsDialog.get_values   1 1 0   0%
pyPhotoAlbum/dialogs/print_settings_dialog.py (no function)   7 0 0   100%
pyPhotoAlbum/dialogs/style_dialogs.py CornerRadiusDialog.__init__   31 31 0   0%
pyPhotoAlbum/dialogs/style_dialogs.py CornerRadiusDialog._on_slider_changed   1 1 0   0%
pyPhotoAlbum/dialogs/style_dialogs.py CornerRadiusDialog.get_value   1 1 0   0%
pyPhotoAlbum/dialogs/style_dialogs.py ColorButton.__init__   5 5 0   0%
pyPhotoAlbum/dialogs/style_dialogs.py ColorButton._update_style   2 2 0   0%
pyPhotoAlbum/dialogs/style_dialogs.py ColorButton._pick_color   6 6 0   0%
pyPhotoAlbum/dialogs/style_dialogs.py ColorButton.get_color   1 1 0   0%
pyPhotoAlbum/dialogs/style_dialogs.py BorderDialog.__init__   35 35 0   0%
pyPhotoAlbum/dialogs/style_dialogs.py BorderDialog._apply_preset   3 3 0   0%
pyPhotoAlbum/dialogs/style_dialogs.py BorderDialog.get_values   1 1 0   0%
pyPhotoAlbum/dialogs/style_dialogs.py ShadowDialog.__init__   63 63 0   0%
pyPhotoAlbum/dialogs/style_dialogs.py ShadowDialog._update_controls   1 1 0   0%
pyPhotoAlbum/dialogs/style_dialogs.py ShadowDialog._apply_preset   7 7 0   0%
pyPhotoAlbum/dialogs/style_dialogs.py ShadowDialog.get_values   3 3 0   0%
pyPhotoAlbum/dialogs/style_dialogs.py (no function)   22 22 0   0%
pyPhotoAlbum/frame_manager.py FrameManager.__init__   3 0 0   100%
pyPhotoAlbum/frame_manager.py FrameManager._get_frames_directory   2 0 0   100%
pyPhotoAlbum/frame_manager.py FrameManager._load_bundled_frames   16 0 0   100%
pyPhotoAlbum/frame_manager.py FrameManager._register_frame   1 0 0   100%
pyPhotoAlbum/frame_manager.py FrameManager.get_frame   1 0 0   100%
pyPhotoAlbum/frame_manager.py FrameManager.get_frames_by_category   1 0 0   100%
pyPhotoAlbum/frame_manager.py FrameManager.get_all_frames   1 0 0   100%
pyPhotoAlbum/frame_manager.py FrameManager.get_frame_names   1 0 0   100%
pyPhotoAlbum/frame_manager.py FrameManager._load_svg_as_image   31 31 0   0%
pyPhotoAlbum/frame_manager.py FrameManager._recolor_svg   8 8 0   0%
pyPhotoAlbum/frame_manager.py FrameManager._get_corner_image   16 16 0   0%
pyPhotoAlbum/frame_manager.py FrameManager.render_frame_opengl   22 22 0   0%
pyPhotoAlbum/frame_manager.py FrameManager._render_svg_corners_gl   38 38 0   0%
pyPhotoAlbum/frame_manager.py FrameManager._render_svg_corners_gl.draw_corner_quad   12 12 0   0%
pyPhotoAlbum/frame_manager.py FrameManager._render_svg_corners_gl.get_flips   5 5 0   0%
pyPhotoAlbum/frame_manager.py FrameManager._render_corner_frame_gl   31 31 0   0%
pyPhotoAlbum/frame_manager.py FrameManager._render_decorative_swirls_gl   16 16 0   0%
pyPhotoAlbum/frame_manager.py FrameManager._render_full_frame_gl   15 15 0   0%
pyPhotoAlbum/frame_manager.py FrameManager.render_frame_pdf   21 21 0   0%
pyPhotoAlbum/frame_manager.py FrameManager._render_svg_corners_pdf   27 27 0   0%
pyPhotoAlbum/frame_manager.py FrameManager._render_svg_corners_pdf.get_flipped_image   11 11 0   0%
pyPhotoAlbum/frame_manager.py FrameManager._render_corner_frame_pdf   20 20 0   0%
pyPhotoAlbum/frame_manager.py FrameManager._render_full_frame_pdf   2 2 0   0%
pyPhotoAlbum/frame_manager.py get_frame_manager   3 0 0   100%
pyPhotoAlbum/frame_manager.py (no function)   53 0 0   100%
pyPhotoAlbum/gl_imports.py (no function)   26 23 0   12%
pyPhotoAlbum/gl_widget.py GLWidget.__init__   15 0 0   100%
pyPhotoAlbum/gl_widget.py GLWidget.window   1 0 0   100%
pyPhotoAlbum/gl_widget.py GLWidget.update   2 2 0   0%
pyPhotoAlbum/gl_widget.py GLWidget.closeEvent   2 2 0   0%
pyPhotoAlbum/gl_widget.py GLWidget._get_project_folder   4 4 0   0%
pyPhotoAlbum/gl_widget.py GLWidget.keyPressEvent   33 14 0   58%
pyPhotoAlbum/gl_widget.py GLWidget.event   39 33 0   15%
pyPhotoAlbum/gl_widget.py GLWidget._handle_pinch_gesture   36 36 0   0%
pyPhotoAlbum/gl_widget.py GLWidget._apply_zoom_at_point   21 21 0   0%
pyPhotoAlbum/gl_widget.py (no function)   25 0 0   100%
pyPhotoAlbum/image_utils.py apply_pil_rotation   10 2 0   80%
pyPhotoAlbum/image_utils.py convert_to_rgba   3 1 0   67%
pyPhotoAlbum/image_utils.py calculate_center_crop_coords   23 6 0   74%
pyPhotoAlbum/image_utils.py crop_image_to_coords   7 7 0   0%
pyPhotoAlbum/image_utils.py resize_to_fit   6 1 0   83%
pyPhotoAlbum/image_utils.py apply_rounded_corners   31 4 0   87%
pyPhotoAlbum/image_utils.py apply_drop_shadow   31 0 0   100%
pyPhotoAlbum/image_utils.py create_border_image   13 0 0   100%
pyPhotoAlbum/image_utils.py apply_style_to_image   15 15 0   0%
pyPhotoAlbum/image_utils.py (no function)   11 0 0   100%
pyPhotoAlbum/loading_widget.py LoadingWidget.__init__   27 0 0   100%
pyPhotoAlbum/loading_widget.py LoadingWidget.opacity   1 0 0   100%
pyPhotoAlbum/loading_widget.py LoadingWidget.opacity   2 0 0   100%
pyPhotoAlbum/loading_widget.py LoadingWidget.show_loading   8 0 0   100%
pyPhotoAlbum/loading_widget.py LoadingWidget.hide_loading   5 0 0   100%
pyPhotoAlbum/loading_widget.py LoadingWidget.set_status   1 0 0   100%
pyPhotoAlbum/loading_widget.py LoadingWidget.set_progress   2 0 0   100%
pyPhotoAlbum/loading_widget.py LoadingWidget.set_indeterminate   5 0 0   100%
pyPhotoAlbum/loading_widget.py LoadingWidget._reposition   6 0 0   100%
pyPhotoAlbum/loading_widget.py LoadingWidget.showEvent   2 0 0   100%
pyPhotoAlbum/loading_widget.py LoadingWidget.resizeParent   2 0 0   100%
pyPhotoAlbum/loading_widget.py (no function)   17 0 0   100%
pyPhotoAlbum/main.py MainWindow.__init__   8 8 0   0%
pyPhotoAlbum/main.py MainWindow._init_state   4 4 0   0%
pyPhotoAlbum/main.py MainWindow._init_ui   49 49 0   0%
pyPhotoAlbum/main.py MainWindow._on_vertical_scroll   3 3 0   0%
pyPhotoAlbum/main.py MainWindow._on_horizontal_scroll   3 3 0   0%
pyPhotoAlbum/main.py MainWindow.update_scrollbars   23 23 0   0%
pyPhotoAlbum/main.py MainWindow._register_shortcuts   13 13 0   0%
pyPhotoAlbum/main.py MainWindow.resizeEvent   3 3 0   0%
pyPhotoAlbum/main.py MainWindow._add_sample_page   16 16 0   0%
pyPhotoAlbum/main.py MainWindow._perform_autosave   5 5 0   0%
pyPhotoAlbum/main.py MainWindow._check_checkpoint_recovery   27 27 0   0%
pyPhotoAlbum/main.py MainWindow.closeEvent   19 19 0   0%
pyPhotoAlbum/main.py main   19 19 0   0%
pyPhotoAlbum/main.py (no function)   30 30 2   0%
pyPhotoAlbum/merge_dialog.py PagePreviewWidget.__init__   4 0 0   100%
pyPhotoAlbum/merge_dialog.py PagePreviewWidget.paintEvent   32 32 0   0%
pyPhotoAlbum/merge_dialog.py ConflictItemWidget.__init__   4 0 0   100%
pyPhotoAlbum/merge_dialog.py ConflictItemWidget._init_ui   44 0 0   100%
pyPhotoAlbum/merge_dialog.py ConflictItemWidget._create_element_details   19 0 0   100%
pyPhotoAlbum/merge_dialog.py ConflictItemWidget._create_settings_details   11 0 0   100%
pyPhotoAlbum/merge_dialog.py ConflictItemWidget._on_resolution_changed   1 0 0   100%
pyPhotoAlbum/merge_dialog.py ConflictItemWidget.get_resolution   6 1 0   83%
pyPhotoAlbum/merge_dialog.py MergeDialog.__init__   11 0 0   100%
pyPhotoAlbum/merge_dialog.py MergeDialog._init_ui   43 0 0   100%
pyPhotoAlbum/merge_dialog.py MergeDialog._on_resolution_changed   1 0 0   100%
pyPhotoAlbum/merge_dialog.py MergeDialog._auto_resolve   10 0 0   100%
pyPhotoAlbum/merge_dialog.py MergeDialog.get_merged_project_data   1 0 0   100%
pyPhotoAlbum/merge_dialog.py (no function)   23 0 0   100%
pyPhotoAlbum/merge_manager.py MergeManager.__init__   1 0 0   100%
pyPhotoAlbum/merge_manager.py MergeManager.should_merge_projects   6 2 0   67%
pyPhotoAlbum/merge_manager.py MergeManager.detect_conflicts   4 0 0   100%
pyPhotoAlbum/merge_manager.py MergeManager._detect_project_settings_conflicts   8 0 0   100%
pyPhotoAlbum/merge_manager.py MergeManager._detect_page_conflicts   12 3 0   75%
pyPhotoAlbum/merge_manager.py MergeManager._detect_page_modification_conflicts   16 6 0   62%
pyPhotoAlbum/merge_manager.py MergeManager._detect_element_conflicts   11 3 0   73%
pyPhotoAlbum/merge_manager.py MergeManager._detect_element_modification_conflicts   20 5 0   75%
pyPhotoAlbum/merge_manager.py MergeManager.auto_resolve_conflicts   13 10 0   23%
pyPhotoAlbum/merge_manager.py MergeManager._get_timestamp   3 3 0   0%
pyPhotoAlbum/merge_manager.py MergeManager.apply_resolutions   9 5 0   44%
pyPhotoAlbum/merge_manager.py MergeManager._apply_their_version   18 18 0   0%
pyPhotoAlbum/merge_manager.py MergeManager._merge_non_conflicting_changes   2 0 0   100%
pyPhotoAlbum/merge_manager.py MergeManager._add_missing_pages   4 0 0   100%
pyPhotoAlbum/merge_manager.py MergeManager._merge_page_elements   8 1 0   88%
pyPhotoAlbum/merge_manager.py MergeManager._merge_element   7 0 0   100%
pyPhotoAlbum/merge_manager.py MergeManager._is_element_in_conflict   1 0 0   100%
pyPhotoAlbum/merge_manager.py MergeManager._merge_by_timestamp   8 0 0   100%
pyPhotoAlbum/merge_manager.py concatenate_projects   6 0 0   100%
pyPhotoAlbum/merge_manager.py (no function)   45 0 0   100%
pyPhotoAlbum/mixins/__init__.py (no function)   3 0 0   100%
pyPhotoAlbum/mixins/asset_drop.py AssetDropMixin.dragEnterEvent   8 0 0   100%
pyPhotoAlbum/mixins/asset_drop.py AssetDropMixin.dragMoveEvent   3 0 0   100%
pyPhotoAlbum/mixins/asset_drop.py AssetDropMixin.dropEvent   11 0 0   100%
pyPhotoAlbum/mixins/asset_drop.py AssetDropMixin._extract_image_path   7 0 0   100%
pyPhotoAlbum/mixins/asset_drop.py AssetDropMixin._handle_drop_on_element   11 1 0   91%
pyPhotoAlbum/mixins/asset_drop.py AssetDropMixin._replace_placeholder_with_image   8 0 0   100%
pyPhotoAlbum/mixins/asset_drop.py AssetDropMixin._handle_drop_on_empty_space   14 2 0   86%
pyPhotoAlbum/mixins/asset_drop.py AssetDropMixin._calculate_image_dimensions   5 1 0   80%
pyPhotoAlbum/mixins/asset_drop.py AssetDropMixin._add_new_image_to_page   7 0 0   100%
pyPhotoAlbum/mixins/asset_drop.py (no function)   13 0 0   100%
pyPhotoAlbum/mixins/asset_path.py AssetPathMixin.resolve_asset_path   12 0 0   100%
pyPhotoAlbum/mixins/asset_path.py AssetPathMixin.get_asset_full_path   4 0 0   100%
pyPhotoAlbum/mixins/asset_path.py AssetPathMixin._get_project_folder   3 0 0   100%
pyPhotoAlbum/mixins/asset_path.py (no function)   6 0 0   100%
pyPhotoAlbum/mixins/async_loading.py AsyncLoadingMixin.update   1 1 0   0%
pyPhotoAlbum/mixins/async_loading.py AsyncLoadingMixin.window   1 1 0   0%
pyPhotoAlbum/mixins/async_loading.py AsyncLoadingMixin._init_async_loading   12 0 0   100%
pyPhotoAlbum/mixins/async_loading.py AsyncLoadingMixin._cleanup_async_loading   8 0 0   100%
pyPhotoAlbum/mixins/async_loading.py AsyncLoadingMixin._on_image_loaded   4 0 0   100%
pyPhotoAlbum/mixins/async_loading.py AsyncLoadingMixin._on_image_load_failed   3 0 0   100%
pyPhotoAlbum/mixins/async_loading.py AsyncLoadingMixin._on_pdf_progress   5 0 0   100%
pyPhotoAlbum/mixins/async_loading.py AsyncLoadingMixin._on_pdf_complete   11 0 0   100%
pyPhotoAlbum/mixins/async_loading.py AsyncLoadingMixin._on_pdf_failed   7 0 0   100%
pyPhotoAlbum/mixins/async_loading.py AsyncLoadingMixin.request_image_load   14 0 0   100%
pyPhotoAlbum/mixins/async_loading.py AsyncLoadingMixin.export_pdf_async   13 0 0   100%
pyPhotoAlbum/mixins/async_loading.py AsyncLoadingMixin._on_pdf_cancel   3 0 0   100%
pyPhotoAlbum/mixins/async_loading.py AsyncLoadingMixin.get_async_stats   6 0 0   100%
pyPhotoAlbum/mixins/async_loading.py (no function)   24 0 2   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin.project   3 0 0   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin.project   1 0 0   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin.gl_widget   3 0 0   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin.status_bar   3 0 0   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin.template_manager   3 0 0   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin._get_most_visible_page_index   18 0 0   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin.get_current_page   6 0 0   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin.get_current_page_index   3 0 0   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin.show_status   2 0 0   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin.show_error   1 0 0   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin.show_warning   1 0 0   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin.show_info   1 0 0   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin.require_page   6 0 0   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin.require_selection   8 0 0   100%
pyPhotoAlbum/mixins/base.py ApplicationStateMixin.update_view   4 1 0   75%
pyPhotoAlbum/mixins/base.py (no function)   23 0 0   100%
pyPhotoAlbum/mixins/dialog_mixin.py DialogMixin.create_dialog   8 0 0   100%
pyPhotoAlbum/mixins/dialog_mixin.py DialogMixin.show_dialog   5 0 0   100%
pyPhotoAlbum/mixins/dialog_mixin.py (no function)   5 0 0   100%
pyPhotoAlbum/mixins/element_manipulation.py ElementManipulationMixin.window   1 0 0   100%
pyPhotoAlbum/mixins/element_manipulation.py ElementManipulationMixin.__init__   8 0 0   100%
pyPhotoAlbum/mixins/element_manipulation.py ElementManipulationMixin._resize_element   23 2 0   91%
pyPhotoAlbum/mixins/element_manipulation.py ElementManipulationMixin._resize_element_no_snap   24 1 0   96%
pyPhotoAlbum/mixins/element_manipulation.py ElementManipulationMixin._transfer_element_to_page   14 0 0   100%
pyPhotoAlbum/mixins/element_manipulation.py (no function)   10 0 3   100%
pyPhotoAlbum/mixins/element_selection.py ElementSelectionMixin.window   1 1 0   0%
pyPhotoAlbum/mixins/element_selection.py ElementSelectionMixin.__init__   2 0 0   100%
pyPhotoAlbum/mixins/element_selection.py ElementSelectionMixin.selected_element   1 0 0   100%
pyPhotoAlbum/mixins/element_selection.py ElementSelectionMixin.selected_element   3 0 0   100%
pyPhotoAlbum/mixins/element_selection.py ElementSelectionMixin._get_element_at   12 0 0   100%
pyPhotoAlbum/mixins/element_selection.py ElementSelectionMixin._get_resize_handle_at   19 0 0   100%
pyPhotoAlbum/mixins/element_selection.py (no function)   13 0 2   100%
pyPhotoAlbum/mixins/image_pan.py ImagePanMixin.__init__   3 0 0   100%
pyPhotoAlbum/mixins/image_pan.py ImagePanMixin._handle_image_pan_move   31 2 0   94%
pyPhotoAlbum/mixins/image_pan.py (no function)   8 0 0   100%
pyPhotoAlbum/mixins/interaction_command_builders.py CommandBuilder.__init__   1 0 0   100%
pyPhotoAlbum/mixins/interaction_command_builders.py CommandBuilder.can_build   0 0 12   100%
pyPhotoAlbum/mixins/interaction_command_builders.py CommandBuilder.build   0 0 12   100%
pyPhotoAlbum/mixins/interaction_command_builders.py CommandBuilder.log_command   1 0 0   100%
pyPhotoAlbum/mixins/interaction_command_builders.py MoveCommandBuilder.can_build   5 0 0   100%
pyPhotoAlbum/mixins/interaction_command_builders.py MoveCommandBuilder.build   11 1 0   91%
pyPhotoAlbum/mixins/interaction_command_builders.py ResizeCommandBuilder.can_build   9 1 0   89%
pyPhotoAlbum/mixins/interaction_command_builders.py ResizeCommandBuilder.build   12 2 0   83%
pyPhotoAlbum/mixins/interaction_command_builders.py RotateCommandBuilder.can_build   5 1 0   80%
pyPhotoAlbum/mixins/interaction_command_builders.py RotateCommandBuilder.build   11 2 0   82%
pyPhotoAlbum/mixins/interaction_command_builders.py ImagePanCommandBuilder.can_build   9 1 0   89%
pyPhotoAlbum/mixins/interaction_command_builders.py ImagePanCommandBuilder.build   15 3 0   80%
pyPhotoAlbum/mixins/interaction_command_builders.py (no function)   19 0 4   100%
pyPhotoAlbum/mixins/interaction_command_factory.py InteractionCommandFactory.__init__   2 0 0   100%
pyPhotoAlbum/mixins/interaction_command_factory.py InteractionCommandFactory._register_default_builders   4 0 0   100%
pyPhotoAlbum/mixins/interaction_command_factory.py InteractionCommandFactory.register_builder   1 0 0   100%
pyPhotoAlbum/mixins/interaction_command_factory.py InteractionCommandFactory.create_command   7 0 0   100%
pyPhotoAlbum/mixins/interaction_command_factory.py InteractionCommandFactory.has_builder   1 0 0   100%
pyPhotoAlbum/mixins/interaction_command_factory.py InteractionCommandFactory.get_supported_types   1 0 0   100%
pyPhotoAlbum/mixins/interaction_command_factory.py InteractionState.__init__   6 0 0   100%
pyPhotoAlbum/mixins/interaction_command_factory.py InteractionState.to_dict   10 0 0   100%
pyPhotoAlbum/mixins/interaction_command_factory.py InteractionState.is_valid   1 0 0   100%
pyPhotoAlbum/mixins/interaction_command_factory.py InteractionState.clear   6 0 0   100%
pyPhotoAlbum/mixins/interaction_command_factory.py (no function)   15 0 0   100%
pyPhotoAlbum/mixins/interaction_undo.py UndoableInteractionMixin.__init__   3 0 0   100%
pyPhotoAlbum/mixins/interaction_undo.py UndoableInteractionMixin._begin_move   3 0 0   100%
pyPhotoAlbum/mixins/interaction_undo.py UndoableInteractionMixin._begin_resize   4 0 0   100%
pyPhotoAlbum/mixins/interaction_undo.py UndoableInteractionMixin._begin_rotate   3 0 0   100%
pyPhotoAlbum/mixins/interaction_undo.py UndoableInteractionMixin._begin_image_pan   6 0 0   100%
pyPhotoAlbum/mixins/interaction_undo.py UndoableInteractionMixin._end_interaction   11 0 0   100%
pyPhotoAlbum/mixins/interaction_undo.py UndoableInteractionMixin._clear_interaction_state   1 0 0   100%
pyPhotoAlbum/mixins/interaction_undo.py UndoableInteractionMixin._cancel_interaction   1 0 0   100%
pyPhotoAlbum/mixins/interaction_undo.py (no function)   12 0 0   100%
pyPhotoAlbum/mixins/interaction_validators.py significant_change   3 3 0   0%
pyPhotoAlbum/mixins/interaction_validators.py significant_change.decorator   2 2 0   0%
pyPhotoAlbum/mixins/interaction_validators.py significant_change.decorator.wrapper   4 4 0   0%
pyPhotoAlbum/mixins/interaction_validators.py ChangeValidator.position_changed   5 0 0   100%
pyPhotoAlbum/mixins/interaction_validators.py ChangeValidator.size_changed   5 1 0   80%
pyPhotoAlbum/mixins/interaction_validators.py ChangeValidator.rotation_changed   3 1 0   67%
pyPhotoAlbum/mixins/interaction_validators.py ChangeValidator.crop_changed   5 1 0   80%
pyPhotoAlbum/mixins/interaction_validators.py InteractionChangeDetector.__init__   2 0 0   100%
pyPhotoAlbum/mixins/interaction_validators.py InteractionChangeDetector.detect_position_change   3 0 0   100%
pyPhotoAlbum/mixins/interaction_validators.py InteractionChangeDetector.detect_size_change   3 0 0   100%
pyPhotoAlbum/mixins/interaction_validators.py InteractionChangeDetector.detect_rotation_change   3 0 0   100%
pyPhotoAlbum/mixins/interaction_validators.py InteractionChangeDetector.detect_crop_change   3 0 0   100%
pyPhotoAlbum/mixins/interaction_validators.py (no function)   18 0 0   100%
pyPhotoAlbum/mixins/keyboard_navigation.py KeyboardNavigationMixin._navigate_to_next_page   10 0 0   100%
pyPhotoAlbum/mixins/keyboard_navigation.py KeyboardNavigationMixin._navigate_to_previous_page   10 0 0   100%
pyPhotoAlbum/mixins/keyboard_navigation.py KeyboardNavigationMixin._scroll_to_page   24 0 0   100%
pyPhotoAlbum/mixins/keyboard_navigation.py KeyboardNavigationMixin._move_viewport_with_arrow_keys   15 0 0   100%
pyPhotoAlbum/mixins/keyboard_navigation.py KeyboardNavigationMixin._move_selected_elements_with_arrow_keys   30 0 0   100%
pyPhotoAlbum/mixins/keyboard_navigation.py (no function)   7 0 0   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin.window   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin.update   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin.setCursor   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin.setFocus   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._begin_rotate   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._begin_resize   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._begin_image_pan   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._begin_move   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._end_interaction   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._resize_element   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._get_page_at   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._get_element_at   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._get_resize_handle_at   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._check_ghost_page_click   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._transfer_element_to_page   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._handle_image_pan_move   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._update_page_status   0 0 1   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin.__init__   5 0 0   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._handle_rotation_start   5 0 0   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._handle_resize_start   7 0 0   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._handle_image_pan_start   7 0 0   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._handle_multi_select   3 0 0   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._handle_element_drag_start   6 0 0   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin.mousePressEvent   7 0 0   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._handle_left_click   26 1 0   96%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._handle_canvas_pan   11 1 0   91%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._handle_rotation_move   17 1 0   94%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._handle_resize_move   5 0 0   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._handle_element_move   12 1 0   92%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._move_element_within_page   11 0 0   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin.mouseMoveEvent   17 1 0   94%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin.mouseReleaseEvent   15 0 0   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin.mouseDoubleClickEvent   8 0 0   100%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin.wheelEvent   46 3 0   93%
pyPhotoAlbum/mixins/mouse_interaction.py MouseInteractionMixin._edit_text_element   9 0 0   100%
pyPhotoAlbum/mixins/mouse_interaction.py (no function)   36 0 3   100%
pyPhotoAlbum/mixins/operations/__init__.py (no function)   13 0 0   100%
pyPhotoAlbum/mixins/operations/alignment_ops.py AlignmentOperationsMixin._get_selected_elements_list   1 0 0   100%
pyPhotoAlbum/mixins/operations/alignment_ops.py AlignmentOperationsMixin._execute_alignment   9 0 0   100%
pyPhotoAlbum/mixins/operations/alignment_ops.py AlignmentOperationsMixin.align_left   1 0 0   100%
pyPhotoAlbum/mixins/operations/alignment_ops.py AlignmentOperationsMixin.align_right   1 0 0   100%
pyPhotoAlbum/mixins/operations/alignment_ops.py AlignmentOperationsMixin.align_top   1 0 0   100%
pyPhotoAlbum/mixins/operations/alignment_ops.py AlignmentOperationsMixin.align_bottom   1 0 0   100%
pyPhotoAlbum/mixins/operations/alignment_ops.py AlignmentOperationsMixin.align_horizontal_center   1 0 0   100%
pyPhotoAlbum/mixins/operations/alignment_ops.py AlignmentOperationsMixin.align_vertical_center   1 0 0   100%
pyPhotoAlbum/mixins/operations/alignment_ops.py AlignmentOperationsMixin.maximize_pattern   14 14 0   0%
pyPhotoAlbum/mixins/operations/alignment_ops.py (no function)   20 0 0   100%
pyPhotoAlbum/mixins/operations/distribution_ops.py DistributionOperationsMixin._get_selected_elements_list   1 0 0   100%
pyPhotoAlbum/mixins/operations/distribution_ops.py DistributionOperationsMixin._execute_distribution   9 0 0   100%
pyPhotoAlbum/mixins/operations/distribution_ops.py DistributionOperationsMixin.distribute_horizontally   1 0 0   100%
pyPhotoAlbum/mixins/operations/distribution_ops.py DistributionOperationsMixin.distribute_vertically   1 0 0   100%
pyPhotoAlbum/mixins/operations/distribution_ops.py DistributionOperationsMixin.space_horizontally   1 0 0   100%
pyPhotoAlbum/mixins/operations/distribution_ops.py DistributionOperationsMixin.space_vertically   1 0 0   100%
pyPhotoAlbum/mixins/operations/distribution_ops.py (no function)   14 0 0   100%
pyPhotoAlbum/mixins/operations/edit_ops.py EditOperationsMixin.undo   6 0 0   100%
pyPhotoAlbum/mixins/operations/edit_ops.py EditOperationsMixin.redo   6 0 0   100%
pyPhotoAlbum/mixins/operations/edit_ops.py EditOperationsMixin.delete_selected_element   16 5 0   69%
pyPhotoAlbum/mixins/operations/edit_ops.py EditOperationsMixin.rotate_left   10 0 0   100%
pyPhotoAlbum/mixins/operations/edit_ops.py EditOperationsMixin.rotate_right   10 1 0   90%
pyPhotoAlbum/mixins/operations/edit_ops.py EditOperationsMixin.reset_rotation   12 0 0   100%
pyPhotoAlbum/mixins/operations/edit_ops.py (no function)   15 0 0   100%
pyPhotoAlbum/mixins/operations/element_ops.py ElementOperationsMixin.add_image   28 4 0   86%
pyPhotoAlbum/mixins/operations/element_ops.py ElementOperationsMixin.add_text   15 1 0   93%
pyPhotoAlbum/mixins/operations/element_ops.py ElementOperationsMixin.add_placeholder   15 1 0   93%
pyPhotoAlbum/mixins/operations/element_ops.py (no function)   12 0 0   100%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.show_status   1 1 0   0%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.show_error   1 1 0   0%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.resolve_asset_path   1 1 0   0%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.new_project   96 0 0   100%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.new_project.set_preset   2 2 0   0%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.open_project   12 0 0   100%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin._on_load_progress   3 0 0   100%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin._on_load_complete   17 0 0   100%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin._on_load_failed   6 0 0   100%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.save_project   21 2 0   90%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.save_project._on_progress   6 6 0   0%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.save_project._on_finished   19 4 0   79%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.heal_assets   3 0 0   100%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin._check_missing_assets   12 0 0   100%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin._show_missing_assets_warning   18 0 0   100%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.project_settings   111 37 0   67%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin._apply_page_size_to_project   20 1 0   95%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin._scale_page_elements   5 0 0   100%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin._reposition_page_elements   7 0 0   100%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.export_pdf   12 0 0   100%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.clean_assets   72 72 0   0%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.clean_assets.format_bytes   5 5 0   0%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.clean_assets.update_image_references   7 7 0   0%
pyPhotoAlbum/mixins/operations/file_ops.py FileOperationsMixin.show_about   20 0 0   100%
pyPhotoAlbum/mixins/operations/file_ops.py (no function)   44 0 0   100%
pyPhotoAlbum/mixins/operations/merge_ops.py MergeOperationsMixin.merge_projects   26 1 0   96%
pyPhotoAlbum/mixins/operations/merge_ops.py MergeOperationsMixin._perform_merge_with_conflicts   14 0 0   100%
pyPhotoAlbum/mixins/operations/merge_ops.py MergeOperationsMixin._perform_concatenation   6 0 0   100%
pyPhotoAlbum/mixins/operations/merge_ops.py MergeOperationsMixin._apply_merged_data   10 0 0   100%
pyPhotoAlbum/mixins/operations/merge_ops.py (no function)   15 0 0   100%
pyPhotoAlbum/mixins/operations/page_ops.py PageOperationsMixin.add_page   24 1 0   96%
pyPhotoAlbum/mixins/operations/page_ops.py PageOperationsMixin.page_setup   58 2 0   97%
pyPhotoAlbum/mixins/operations/page_ops.py PageOperationsMixin.toggle_double_spread   23 1 0   96%
pyPhotoAlbum/mixins/operations/page_ops.py PageOperationsMixin.remove_page   16 1 0   94%
pyPhotoAlbum/mixins/operations/page_ops.py (no function)   14 0 0   100%
pyPhotoAlbum/mixins/operations/size_ops.py SizeOperationsMixin._get_selected_elements_list   1 0 0   100%
pyPhotoAlbum/mixins/operations/size_ops.py SizeOperationsMixin._execute_resize   9 0 0   100%
pyPhotoAlbum/mixins/operations/size_ops.py SizeOperationsMixin._execute_fit_to_page   13 1 0   92%
pyPhotoAlbum/mixins/operations/size_ops.py SizeOperationsMixin.make_same_size   1 0 0   100%
pyPhotoAlbum/mixins/operations/size_ops.py SizeOperationsMixin.make_same_width   1 0 0   100%
pyPhotoAlbum/mixins/operations/size_ops.py SizeOperationsMixin.make_same_height   1 0 0   100%
pyPhotoAlbum/mixins/operations/size_ops.py SizeOperationsMixin.fit_to_width   1 0 0   100%
pyPhotoAlbum/mixins/operations/size_ops.py SizeOperationsMixin.fit_to_height   1 0 0   100%
pyPhotoAlbum/mixins/operations/size_ops.py SizeOperationsMixin.fit_to_page   1 0 0   100%
pyPhotoAlbum/mixins/operations/size_ops.py SizeOperationsMixin.expand_image   16 0 0   100%
pyPhotoAlbum/mixins/operations/size_ops.py (no function)   21 0 0   100%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin._get_selected_images   3 3 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin._apply_style_change   19 19 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin._apply_style_change.StyleChangeCommand.__init__   3 3 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin._apply_style_change.StyleChangeCommand._invalidate_texture   10 10 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin._apply_style_change.StyleChangeCommand.execute   3 3 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin._apply_style_change.StyleChangeCommand.undo   3 3 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin._apply_style_change.StyleChangeCommand.redo   1 1 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin._apply_style_change.StyleChangeCommand.serialize   1 1 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin._apply_style_change.StyleChangeCommand.deserialize   1 1 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.show_corner_radius_dialog   10 10 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.remove_corner_radius   1 1 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.show_border_dialog   11 11 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.show_border_dialog.update_border   2 2 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.remove_border   1 1 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.show_shadow_dialog   11 11 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.show_shadow_dialog.update_shadow   4 4 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.toggle_shadow   6 6 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.apply_polaroid_style   2 2 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.apply_polaroid_style.apply_preset   7 7 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.apply_rounded_style   2 2 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.apply_rounded_style.apply_preset   6 6 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.clear_style   2 2 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.clear_style.clear_all   10 10 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.show_frame_picker   12 12 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.show_frame_picker.update_frame   3 3 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.remove_frame   2 2 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py StyleOperationsMixin.remove_frame.clear_frame   3 3 0   0%
pyPhotoAlbum/mixins/operations/style_ops.py (no function)   27 0 0   100%
pyPhotoAlbum/mixins/operations/template_ops.py TemplateOperationsMixin.save_page_as_template   20 0 0   100%
pyPhotoAlbum/mixins/operations/template_ops.py TemplateOperationsMixin.new_page_from_template   68 0 0   100%
pyPhotoAlbum/mixins/operations/template_ops.py TemplateOperationsMixin.apply_template_to_page   82 0 0   100%
pyPhotoAlbum/mixins/operations/template_ops.py (no function)   10 0 0   100%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.zoom_in   5 0 0   100%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.zoom_out   5 0 0   100%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.zoom_fit   16 0 0   100%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.toggle_grid_snap   7 0 0   100%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.toggle_edge_snap   7 1 0   86%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.toggle_guide_snap   7 1 0   86%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.toggle_show_grid   7 7 0   0%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.open_print_settings   9 9 0   0%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.toggle_print_guides   6 0 0   100%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.toggle_snap_lines   7 1 0   86%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.add_horizontal_guide   8 0 0   100%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.add_vertical_guide   8 0 0   100%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.clear_guides   8 0 0   100%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.toggle_image_browser   6 6 0   0%
pyPhotoAlbum/mixins/operations/view_ops.py ViewOperationsMixin.set_grid_size   46 7 0   85%
pyPhotoAlbum/mixins/operations/view_ops.py (no function)   33 0 0   100%
pyPhotoAlbum/mixins/operations/zorder_ops.py ZOrderOperationsMixin.bring_to_front   19 1 0   95%
pyPhotoAlbum/mixins/operations/zorder_ops.py ZOrderOperationsMixin.send_to_back   19 2 0   89%
pyPhotoAlbum/mixins/operations/zorder_ops.py ZOrderOperationsMixin.bring_forward   19 3 0   84%
pyPhotoAlbum/mixins/operations/zorder_ops.py ZOrderOperationsMixin.send_backward   19 3 0   84%
pyPhotoAlbum/mixins/operations/zorder_ops.py ZOrderOperationsMixin.swap_order   18 0 0   100%
pyPhotoAlbum/mixins/operations/zorder_ops.py (no function)   13 0 0   100%
pyPhotoAlbum/mixins/page_navigation.py PageNavigationMixin.update   1 0 0   100%
pyPhotoAlbum/mixins/page_navigation.py PageNavigationMixin.window   1 0 0   100%
pyPhotoAlbum/mixins/page_navigation.py PageNavigationMixin.__init__   3 0 0   100%
pyPhotoAlbum/mixins/page_navigation.py PageNavigationMixin._get_page_at   10 0 0   100%
pyPhotoAlbum/mixins/page_navigation.py PageNavigationMixin._get_page_positions   38 6 0   84%
pyPhotoAlbum/mixins/page_navigation.py PageNavigationMixin._check_ghost_page_click   30 2 0   93%
pyPhotoAlbum/mixins/page_navigation.py PageNavigationMixin._update_page_status   21 7 0   67%
pyPhotoAlbum/mixins/page_navigation.py (no function)   12 0 2   100%
pyPhotoAlbum/mixins/rendering.py RenderingMixin.paintGL   58 11 0   81%
pyPhotoAlbum/mixins/rendering.py RenderingMixin._draw_selection_handles   74 0 0   100%
pyPhotoAlbum/mixins/rendering.py RenderingMixin._render_text_overlays   44 1 0   98%
pyPhotoAlbum/mixins/rendering.py RenderingMixin._render_ghost_page   19 0 0   100%
pyPhotoAlbum/mixins/rendering.py RenderingMixin._draw_page_print_guides   23 21 0   9%
pyPhotoAlbum/mixins/rendering.py RenderingMixin._draw_page_print_guides._draw_rect_outline   12 12 0   0%
pyPhotoAlbum/mixins/rendering.py (no function)   11 0 0   100%
pyPhotoAlbum/mixins/viewport.py ViewportMixin.__init__   5 0 0   100%
pyPhotoAlbum/mixins/viewport.py ViewportMixin.initializeGL   2 2 0   0%
pyPhotoAlbum/mixins/viewport.py ViewportMixin.resizeGL   17 0 0   100%
pyPhotoAlbum/mixins/viewport.py ViewportMixin._calculate_fit_to_screen_zoom   14 0 0   100%
pyPhotoAlbum/mixins/viewport.py ViewportMixin._calculate_center_pan_offset   16 0 0   100%
pyPhotoAlbum/mixins/viewport.py ViewportMixin.get_content_bounds   19 0 0   100%
pyPhotoAlbum/mixins/viewport.py ViewportMixin._clamp_vertical_pan   8 0 0   100%
pyPhotoAlbum/mixins/viewport.py ViewportMixin._build_page_centerlines   13 0 0   100%
pyPhotoAlbum/mixins/viewport.py ViewportMixin._interpolate_target_centerline   11 2 0   82%
pyPhotoAlbum/mixins/viewport.py ViewportMixin._find_page_at_viewport_y   4 0 0   100%
pyPhotoAlbum/mixins/viewport.py ViewportMixin._clamp_horizontal_pan   7 0 0   100%
pyPhotoAlbum/mixins/viewport.py ViewportMixin.clamp_pan_offset   13 1 0   92%
pyPhotoAlbum/mixins/viewport.py (no function)   14 0 0   100%
pyPhotoAlbum/models.py ImageStyle.__init__   10 0 0   100%
pyPhotoAlbum/models.py ImageStyle.copy   1 0 0   100%
pyPhotoAlbum/models.py ImageStyle.has_styling   1 0 0   100%
pyPhotoAlbum/models.py ImageStyle.serialize   1 0 0   100%
pyPhotoAlbum/models.py ImageStyle.deserialize   5 0 0   100%
pyPhotoAlbum/models.py ImageStyle.__eq__   3 0 0   100%
pyPhotoAlbum/models.py ImageStyle.__repr__   0 0 12   100%
pyPhotoAlbum/models.py set_asset_resolution_context   3 0 0   100%
pyPhotoAlbum/models.py get_asset_search_paths   1 0 0   100%
pyPhotoAlbum/models.py BaseLayoutElement.__init__   10 0 0   100%
pyPhotoAlbum/models.py BaseLayoutElement.mark_modified   1 0 0   100%
pyPhotoAlbum/models.py BaseLayoutElement.mark_deleted   3 0 0   100%
pyPhotoAlbum/models.py BaseLayoutElement._serialize_base_fields   1 0 0   100%
pyPhotoAlbum/models.py BaseLayoutElement._deserialize_base_fields   6 0 0   100%
pyPhotoAlbum/models.py BaseLayoutElement.render   0 0 2   100%
pyPhotoAlbum/models.py BaseLayoutElement.serialize   0 0 2   100%
pyPhotoAlbum/models.py BaseLayoutElement.deserialize   0 0 2   100%
pyPhotoAlbum/models.py ImageData.__init__   10 0 0   100%
pyPhotoAlbum/models.py ImageData.resolve_image_path   12 0 0   100%
pyPhotoAlbum/models.py ImageData._extract_dimensions_metadata   6 0 0   100%
pyPhotoAlbum/models.py ImageData.render   63 7 0   89%
pyPhotoAlbum/models.py ImageData._render_shadow   17 17 0   0%
pyPhotoAlbum/models.py ImageData._render_border   14 14 0   0%
pyPhotoAlbum/models.py ImageData._render_frame   3 3 0   0%
pyPhotoAlbum/models.py ImageData.serialize   7 0 0   100%
pyPhotoAlbum/models.py ImageData.deserialize   22 0 0   100%
pyPhotoAlbum/models.py ImageData._on_async_image_loaded   26 8 0   69%
pyPhotoAlbum/models.py ImageData._get_style_hash   3 1 0   67%
pyPhotoAlbum/models.py ImageData._create_texture_from_pending_image   37 0 0   100%
pyPhotoAlbum/models.py ImageData._on_async_image_load_failed   3 0 0   100%
pyPhotoAlbum/models.py PlaceholderData.__init__   4 0 0   100%
pyPhotoAlbum/models.py PlaceholderData.render   29 0 0   100%
pyPhotoAlbum/models.py PlaceholderData.serialize   5 0 0   100%
pyPhotoAlbum/models.py PlaceholderData.deserialize   8 0 0   100%
pyPhotoAlbum/models.py TextBoxData.__init__   4 0 0   100%
pyPhotoAlbum/models.py TextBoxData.render   22 0 0   100%
pyPhotoAlbum/models.py TextBoxData.serialize   3 0 0   100%
pyPhotoAlbum/models.py TextBoxData.deserialize   8 0 0   100%
pyPhotoAlbum/models.py GhostPageData.__init__   3 0 0   100%
pyPhotoAlbum/models.py GhostPageData.render   24 0 0   100%
pyPhotoAlbum/models.py GhostPageData.get_page_rect   5 0 0   100%
pyPhotoAlbum/models.py GhostPageData.serialize   3 0 0   100%
pyPhotoAlbum/models.py GhostPageData.deserialize   4 0 0   100%
pyPhotoAlbum/models.py (no function)   59 0 7   100%
pyPhotoAlbum/page_layout.py PageLayout.__init__   9 0 0   100%
pyPhotoAlbum/page_layout.py PageLayout.add_element   2 0 0   100%
pyPhotoAlbum/page_layout.py PageLayout.remove_element   1 0 0   100%
pyPhotoAlbum/page_layout.py PageLayout.set_grid_layout   1 0 0   100%
pyPhotoAlbum/page_layout.py PageLayout.render   60 1 0   98%
pyPhotoAlbum/page_layout.py PageLayout._render_snap_lines   46 0 0   100%
pyPhotoAlbum/page_layout.py PageLayout.serialize   1 0 0   100%
pyPhotoAlbum/page_layout.py PageLayout.deserialize   27 0 0   100%
pyPhotoAlbum/page_layout.py GridLayout.__init__   4 0 0   100%
pyPhotoAlbum/page_layout.py GridLayout.merge_cells   1 0 0   100%
pyPhotoAlbum/page_layout.py GridLayout.get_cell_position   5 0 0   100%
pyPhotoAlbum/page_layout.py GridLayout.get_cell_size   3 0 0   100%
pyPhotoAlbum/page_layout.py GridLayout.serialize   1 0 0   100%
pyPhotoAlbum/page_layout.py GridLayout.deserialize   4 0 0   100%
pyPhotoAlbum/page_layout.py (no function)   20 0 2   100%
pyPhotoAlbum/page_renderer.py PageRenderer.__init__   10 0 0   100%
pyPhotoAlbum/page_renderer.py PageRenderer.page_to_screen   3 0 0   100%
pyPhotoAlbum/page_renderer.py PageRenderer.screen_to_page   3 0 0   100%
pyPhotoAlbum/page_renderer.py PageRenderer.is_point_in_page   1 0 0   100%
pyPhotoAlbum/page_renderer.py PageRenderer.get_sub_page_at   6 0 0   100%
pyPhotoAlbum/page_renderer.py PageRenderer.begin_render   3 3 0   0%
pyPhotoAlbum/page_renderer.py PageRenderer.end_render   1 1 0   0%
pyPhotoAlbum/page_renderer.py PageRenderer.get_page_bounds_screen   1 0 0   100%
pyPhotoAlbum/page_renderer.py PageRenderer.get_page_bounds_page   1 0 0   100%
pyPhotoAlbum/page_renderer.py (no function)   12 0 0   100%
pyPhotoAlbum/pdf_exporter.py _process_image_task   38 38 0   0%
pyPhotoAlbum/pdf_exporter.py PDFExporter.__init__   6 0 0   100%
pyPhotoAlbum/pdf_exporter.py PDFExporter.export   44 12 0   73%
pyPhotoAlbum/pdf_exporter.py PDFExporter._compute_page_sequence   15 2 0   87%
pyPhotoAlbum/pdf_exporter.py PDFExporter._render_item_to_bytes   28 8 0   71%
pyPhotoAlbum/pdf_exporter.py PDFExporter._make_blank_page_bytes   5 5 0   0%
pyPhotoAlbum/pdf_exporter.py PDFExporter._merge_page_pdfs   10 1 0   90%
pyPhotoAlbum/pdf_exporter.py PDFExporter._make_task_id   1 0 0   100%
pyPhotoAlbum/pdf_exporter.py PDFExporter._collect_image_tasks   14 4 0   71%
pyPhotoAlbum/pdf_exporter.py PDFExporter._collect_page_tasks   18 0 0   100%
pyPhotoAlbum/pdf_exporter.py PDFExporter._collect_spread_tasks   28 0 0   100%
pyPhotoAlbum/pdf_exporter.py PDFExporter._add_image_task   7 0 0   100%
pyPhotoAlbum/pdf_exporter.py PDFExporter._preprocess_images_parallel   25 8 0   68%
pyPhotoAlbum/pdf_exporter.py PDFExporter._export_cover   7 7 0   0%
pyPhotoAlbum/pdf_exporter.py PDFExporter._export_single_page   6 6 0   0%
pyPhotoAlbum/pdf_exporter.py PDFExporter._export_spread   28 0 0   100%
pyPhotoAlbum/pdf_exporter.py PDFExporter._render_element   19 1 0   95%
pyPhotoAlbum/pdf_exporter.py PDFExporter._render_split_element   30 1 0   97%
pyPhotoAlbum/pdf_exporter.py PDFExporter._render_image   28 13 0   54%
pyPhotoAlbum/pdf_exporter.py PDFExporter._process_image_fallback   37 31 0   16%
pyPhotoAlbum/pdf_exporter.py PDFExporter._draw_shadow_pdf   13 13 0   0%
pyPhotoAlbum/pdf_exporter.py PDFExporter._draw_border_pdf   12 12 0   0%
pyPhotoAlbum/pdf_exporter.py PDFExporter._draw_frame_pdf   4 4 0   0%
pyPhotoAlbum/pdf_exporter.py PDFExporter._render_textbox   42 14 0   67%
pyPhotoAlbum/pdf_exporter.py (no function)   80 0 0   100%
pyPhotoAlbum/project.py Page.__init__   21 2 0   90%
pyPhotoAlbum/project.py Page.get_page_numbers   3 3 0   0%
pyPhotoAlbum/project.py Page.get_page_count   1 0 0   100%
pyPhotoAlbum/project.py Page.mark_modified   1 1 0   0%
pyPhotoAlbum/project.py Page.mark_deleted   3 3 0   0%
pyPhotoAlbum/project.py Page.render   2 2 0   0%
pyPhotoAlbum/project.py Page.serialize   1 0 0   100%
pyPhotoAlbum/project.py Page.deserialize   13 0 0   100%
pyPhotoAlbum/project.py Project.__init__   34 0 0   100%
pyPhotoAlbum/project.py Project.mark_dirty   2 0 0   100%
pyPhotoAlbum/project.py Project.mark_clean   1 0 0   100%
pyPhotoAlbum/project.py Project.is_dirty   1 0 0   100%
pyPhotoAlbum/project.py Project.mark_modified   1 0 0   100%
pyPhotoAlbum/project.py Project.add_page   6 1 0   83%
pyPhotoAlbum/project.py Project.remove_page   4 1 0   75%
pyPhotoAlbum/project.py Project.calculate_spine_width   8 8 0   0%
pyPhotoAlbum/project.py Project.update_cover_dimensions   17 17 0   0%
pyPhotoAlbum/project.py Project.get_page_display_name   8 1 0   88%
pyPhotoAlbum/project.py Project.calculate_page_layout_with_ghosts   18 18 0   0%
pyPhotoAlbum/project.py Project.render_all_pages   2 2 0   0%
pyPhotoAlbum/project.py Project.serialize   1 0 0   100%
pyPhotoAlbum/project.py Project.deserialize   42 0 0   100%
pyPhotoAlbum/project.py Project.cleanup   8 2 0   75%
pyPhotoAlbum/project.py Project.__del__   1 0 0   100%
pyPhotoAlbum/project.py (no function)   35 0 0   100%
pyPhotoAlbum/project_serializer.py _import_external_images   26 16 0   38%
pyPhotoAlbum/project_serializer.py _normalize_asset_paths   26 8 0   69%
pyPhotoAlbum/project_serializer.py save_to_zip   23 0 0   100%
pyPhotoAlbum/project_serializer.py save_to_zip_async   28 28 0   0%
pyPhotoAlbum/project_serializer.py save_to_zip_async._background_save   37 37 0   0%
pyPhotoAlbum/project_serializer.py load_from_zip   39 2 0   95%
pyPhotoAlbum/project_serializer.py get_project_info   8 0 0   100%
pyPhotoAlbum/project_serializer.py (no function)   17 0 0   100%
pyPhotoAlbum/ribbon_builder.py build_ribbon_config   31 2 0   94%
pyPhotoAlbum/ribbon_builder.py get_keyboard_shortcuts   12 2 0   83%
pyPhotoAlbum/ribbon_builder.py validate_ribbon_config   37 0 0   100%
pyPhotoAlbum/ribbon_builder.py print_ribbon_summary   15 0 0   100%
pyPhotoAlbum/ribbon_builder.py (no function)   6 0 0   100%
pyPhotoAlbum/ribbon_widget.py RibbonWidget.__init__   15 2 0   87%
pyPhotoAlbum/ribbon_widget.py RibbonWidget._build_ribbon   3 0 0   100%
pyPhotoAlbum/ribbon_widget.py RibbonWidget._create_tab   10 0 0   100%
pyPhotoAlbum/ribbon_widget.py RibbonWidget._create_group   23 0 0   100%
pyPhotoAlbum/ribbon_widget.py RibbonWidget._create_action_button   7 0 0   100%
pyPhotoAlbum/ribbon_widget.py RibbonWidget._execute_action   5 0 0   100%
pyPhotoAlbum/ribbon_widget.py (no function)   9 0 0   100%
pyPhotoAlbum/snapping.py Guide.serialize   1 0 0   100%
pyPhotoAlbum/snapping.py Guide.deserialize   1 0 0   100%
pyPhotoAlbum/snapping.py SnappingSystem.__init__   6 0 0   100%
pyPhotoAlbum/snapping.py SnappingSystem.add_guide   3 0 0   100%
pyPhotoAlbum/snapping.py SnappingSystem.remove_guide   2 0 0   100%
pyPhotoAlbum/snapping.py SnappingSystem.clear_guides   1 0 0   100%
pyPhotoAlbum/snapping.py SnappingSystem.snap_position   59 0 0   100%
pyPhotoAlbum/snapping.py SnappingSystem.snap_resize   45 7 0   84%
pyPhotoAlbum/snapping.py SnappingSystem._snap_edge_to_targets   30 4 0   87%
pyPhotoAlbum/snapping.py SnappingSystem.get_snap_lines   21 0 0   100%
pyPhotoAlbum/snapping.py SnappingSystem.serialize   1 0 0   100%
pyPhotoAlbum/snapping.py SnappingSystem.deserialize   8 0 0   100%
pyPhotoAlbum/snapping.py (no function)   31 0 0   100%
pyPhotoAlbum/template_manager.py Template.__init__   4 0 0   100%
pyPhotoAlbum/template_manager.py Template.add_element   1 0 0   100%
pyPhotoAlbum/template_manager.py Template.to_dict   1 0 0   100%
pyPhotoAlbum/template_manager.py Template.from_dict   11 0 0   100%
pyPhotoAlbum/template_manager.py Template.save_to_file   2 0 0   100%
pyPhotoAlbum/template_manager.py Template.load_from_file   3 0 0   100%
pyPhotoAlbum/template_manager.py TemplateManager.__init__   3 0 0   100%
pyPhotoAlbum/template_manager.py TemplateManager._get_templates_directory   3 0 0   100%
pyPhotoAlbum/template_manager.py TemplateManager._get_builtin_templates_directory   2 0 0   100%
pyPhotoAlbum/template_manager.py TemplateManager._ensure_templates_directory   3 0 0   100%
pyPhotoAlbum/template_manager.py TemplateManager.list_templates   13 0 0   100%
pyPhotoAlbum/template_manager.py TemplateManager.load_template   16 5 0   69%
pyPhotoAlbum/template_manager.py TemplateManager.save_template   5 2 0   60%
pyPhotoAlbum/template_manager.py TemplateManager.delete_template   12 1 0   92%
pyPhotoAlbum/template_manager.py TemplateManager.embed_template   4 1 0   75%
pyPhotoAlbum/template_manager.py TemplateManager.create_template_from_page   12 0 0   100%
pyPhotoAlbum/template_manager.py TemplateManager.scale_template_elements   45 1 0   98%
pyPhotoAlbum/template_manager.py TemplateManager.apply_template_to_page   27 2 0   93%
pyPhotoAlbum/template_manager.py TemplateManager.create_page_from_template   13 0 0   100%
pyPhotoAlbum/template_manager.py (no function)   30 0 0   100%
pyPhotoAlbum/text_edit_dialog.py TextEditDialog.__init__   6 0 0   100%
pyPhotoAlbum/text_edit_dialog.py TextEditDialog._init_ui   40 0 0   100%
pyPhotoAlbum/text_edit_dialog.py TextEditDialog._load_values   16 0 0   100%
pyPhotoAlbum/text_edit_dialog.py TextEditDialog._choose_color   4 0 0   100%
pyPhotoAlbum/text_edit_dialog.py TextEditDialog._update_color_button   1 0 0   100%
pyPhotoAlbum/text_edit_dialog.py TextEditDialog.get_values   1 0 0   100%
pyPhotoAlbum/text_edit_dialog.py (no function)   10 0 0   100%
pyPhotoAlbum/thumbnail_browser.py DateHeader.__init__   3 3 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailItem.__init__   12 0 0   100%
pyPhotoAlbum/thumbnail_browser.py ThumbnailItem.get_bounds   1 0 0   100%
pyPhotoAlbum/thumbnail_browser.py ThumbnailItem.contains_point   1 0 0   100%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.__init__   14 0 0   100%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.window   1 0 0   100%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.update   1 0 0   100%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.initializeGL   4 4 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.resizeGL   8 8 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.paintGL   10 10 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.paintEvent   14 14 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget._render_thumbnail   48 48 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget._render_date_header   18 18 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget._create_texture_for_thumbnail   23 23 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.load_folder   9 0 0   100%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget._arrange_thumbnails   60 24 0   60%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget._update_scrollbar_range   19 17 0   11%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget._on_scrollbar_changed   4 4 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget._update_scrollbar_position   6 6 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.update_used_images   14 0 0   100%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget._request_thumbnail_load   14 4 0   71%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget._on_image_loaded   6 6 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget._on_image_load_failed   1 1 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.screen_to_viewport   3 0 0   100%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.get_thumbnail_at   5 0 0   100%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.mousePressEvent   3 3 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.mouseMoveEvent   18 18 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.mouseReleaseEvent   2 2 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailGLWidget.wheelEvent   15 15 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailBrowserDock.__init__   47 0 0   100%
pyPhotoAlbum/thumbnail_browser.py ThumbnailBrowserDock._connect_async_loader   14 11 0   21%
pyPhotoAlbum/thumbnail_browser.py ThumbnailBrowserDock.showEvent   2 2 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailBrowserDock._select_folder   3 0 0   100%
pyPhotoAlbum/thumbnail_browser.py ThumbnailBrowserDock.load_folder   6 0 0   100%
pyPhotoAlbum/thumbnail_browser.py ThumbnailBrowserDock._sort_by   9 9 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailBrowserDock._apply_sort   16 14 0   12%
pyPhotoAlbum/thumbnail_browser.py ThumbnailBrowserDock._get_image_date   18 18 0   0%
pyPhotoAlbum/thumbnail_browser.py ThumbnailBrowserDock._get_camera_model   13 13 0   0%
pyPhotoAlbum/thumbnail_browser.py (no function)   52 0 0   100%
pyPhotoAlbum/version_manager.py VersionCompatibility.is_compatible   3 0 0   100%
pyPhotoAlbum/version_manager.py VersionCompatibility.needs_migration   1 0 0   100%
pyPhotoAlbum/version_manager.py VersionCompatibility.get_version_info   1 1 0   0%
pyPhotoAlbum/version_manager.py VersionCompatibility.get_migration_path   10 3 0   70%
pyPhotoAlbum/version_manager.py DataMigration.register_migration   2 0 0   100%
pyPhotoAlbum/version_manager.py DataMigration.register_migration.decorator   2 0 0   100%
pyPhotoAlbum/version_manager.py DataMigration.migrate   15 3 0   80%
pyPhotoAlbum/version_manager.py migrate_1_0_to_2_0   3 3 0   0%
pyPhotoAlbum/version_manager.py migrate_2_0_to_3_0   35 0 0   100%
pyPhotoAlbum/version_manager.py check_version_compatibility   22 17 0   23%
pyPhotoAlbum/version_manager.py format_version_info   12 12 0   0%
pyPhotoAlbum/version_manager.py (no function)   27 0 0   100%
Total     10147 2758 108   73%

No items found using the specified filter.