Refactor attachment handling and UI components#12085
Refactor attachment handling and UI components#12085droidmonkey merged 32 commits intokeepassxreboot:developfrom
Conversation
|
Hello @droidmonkey. I've started refactoring the attachment handling code to make it easier to add new features (like PDF support and text file editing). Do we need to support rich text files as well? |
|
RichText, maybe, I'm more inclined to support markdown rendering instead |
I hadn’t thought about using Markdown before, but it seems interesting. |
0ba1270 to
689cb85
Compare
- Renamed NewEntryAttachmentsDialog to EditEntryAttachmentsDialog for clarity. - Introduced EditEntryAttachmentsDialog class to manage editing of existing attachments. - Added functionality to edit attachments in EntryAttachmentsWidget. - Created AbstractAttachmentWidget interface for different attachment types. - Implemented TextAttachmentsWidget for handling plain text attachments. - Added UnknownAttachmentTypeWidget for unsupported attachment types. - Updated PreviewEntryAttachmentsDialog to utilize the new attachment widget factory. - Enhanced EntryAttachmentsModel with rowByKey method for better key management. - Updated UI files for new and existing dialogs to reflect changes. - Introduced IAttachmentWidgetFactory interface for creating attachment widgets based on MIME type.
689cb85 to
3d9c99a
Compare
|
@xboxones1 This PR addresses your issue. I separated the widgets by file type to enhance the editor. Now, when you press the ‘Add’ button, it generates the name “New Attachment_{index}.txt”. You can change the name and/or press the ‘Edit’ button to modify the file. |
|
@xboxones1 |
54ab847 to
e2c53c5
Compare
|
@w15eacre do you think you can have this review ready this week? I'd like to push this out with 2.7.11 |
There was a problem hiding this comment.
Pull Request Overview
This pull request refactors attachment handling and the related UI components to better support editing, previewing, and handling various attachment types. Key changes include renaming dialogs (to EditEntryAttachmentsDialog), introducing an abstract widget interface with corresponding implementations, and enhancing the attachments model with new key management functionality.
Reviewed Changes
Copilot reviewed 32 out of 32 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/gui/entry/attachments/AttachmentWidgetFactory.* | Introduces a factory for creating attachment widgets. |
| src/gui/entry/attachments/AbstractAttachmentWidget.h | Defines the abstract widget interface for attachments. |
| src/gui/entry/PreviewEntryAttachmentsDialog.* | Updates preview dialog to use the new widget factory and attachment struct. |
| src/gui/entry/EntryAttachmentsWidget.* | Modifies attachment widget behavior, including edit functionality. |
| src/gui/entry/EditEntryAttachmentsDialog.* | Introduces a dedicated dialog for editing existing attachments. |
| src/gui/entry/EntryAttachmentsModel.* | Adds a method to retrieve row index by key for better key management. |
| src/core/Tools.* | Adds getMimeType helper method using QMimeDatabase. |
| CMakeLists.txt | Updates the build files to remove the old dialog and add new attachment widget source files. |
Introduces a new `TextAttachmentsPreviewWidget` to enable previewing attachments in plain text, HTML, and Markdown formats. Integrates the preview widget into `TextAttachmentsWidget` using a splitter for better attachment editing and viewing. Updates the attachment-handling logic to synchronize edits and previews dynamically. Also expands MIME type detection by adding support for zero-size text files.
|
@
I’ll finish it in 2–3 days. |
|
@xboxones1 I fixed the Edit button. |
|
wow I am really into this, awesome work! |
Maybe move the type dropdown to the left end of the buttons row? This way, it won't take up vertical space from the editor. And you can probably skip the label, as it's clear enough from the context. Just add it as a tooltip of the dropdown: Not sure if it's a good idea, but just something to consider. |
Not sure, but aligning the text editor and preview is a good idea |
Replaces deprecated SIGNAL-SLOT syntax with modern signal-slot syntax for better readability and maintenance. Enhances attachment selection handling by adding a check for empty selections and providing a warning message, preventing potential crashes or undefined behavior when no attachment is selected.
5d1e977 to
95cfb6d
Compare
…preview and edit modes based on read-only state
|
Oh I love that |
- Removed the AbstractAttachmentWidget class and its associated files. - Introduced AttachmentTypes.h to define Attachment structure and OpenMode enum. - Created AttachmentWidget class to manage attachments, replacing the abstract class. - Updated ImageAttachmentsWidget, TextAttachmentsWidget, and related classes to inherit from QWidget instead of AbstractAttachmentWidget. - Removed the AttachmentWidgetFactory and its tests, simplifying attachment widget creation. - Added tests for AttachmentWidget to ensure proper functionality with text and image attachments. - Cleaned up unused code and adjusted tests to reflect the new structure.
7cc4ec0 to
a6e6049
Compare
|
Just tested the latest, this is an awesome upgrade. |
|
@w15eacre I pushed some code standards cleanup and a couple fixes. Edited attachments were not saved (I fixed that) so might need to add a gui test for that. |
* Fix editing attachment not saving the edits * Fix preview being updated even if not visible and adding a delay to update to reduce typing lockups
084726d to
d6d8399
Compare
…ndling tests Add a returning text attachment test
|
@droidmonkey I’ve fixed the tests. Thanks! |
|
@droidmonkey Is MacOs working ok? |
|
It needs to be fixed, a brew update caused builds to fail |
…e statements for clarity
b710fb7 to
055de1c
Compare
|
@droidmonkey Does MacOs work? |
|
Got it working again |
|
@w15eacre thank you for this PR, great work! |
…12085) * Renamed NewEntryAttachmentsDialog to EditEntryAttachmentsDialog for clarity. * Introduced EditEntryAttachmentsDialog class to manage editing of existing attachments. * Added functionality to preview attachments while editing them. * Enhanced EntryAttachmentsModel with rowByKey method for better key management. * Add image attachment support with zoom functionality. * Add html and markdown detection. * Improve button layout on the attachment section when editing an entry
…12085) * Renamed NewEntryAttachmentsDialog to EditEntryAttachmentsDialog for clarity. * Introduced EditEntryAttachmentsDialog class to manage editing of existing attachments. * Added functionality to preview attachments while editing them. * Enhanced EntryAttachmentsModel with rowByKey method for better key management. * Add image attachment support with zoom functionality. * Add html and markdown detection. * Improve button layout on the attachment section when editing an entry
* Renamed NewEntryAttachmentsDialog to EditEntryAttachmentsDialog for clarity. * Introduced EditEntryAttachmentsDialog class to manage editing of existing attachments. * Added functionality to preview attachments while editing them. * Enhanced EntryAttachmentsModel with rowByKey method for better key management. * Add image attachment support with zoom functionality. * Add html and markdown detection. * Improve button layout on the attachment section when editing an entry
Release 2.7.11 (2025-11-23) - Add image, HTML, Markdown preview, and text editing support to inline attachment viewer [keepassxreboot#12085, keepassxreboot#12244, keepassxreboot#12654] - Add database merge confirmation dialog [keepassxreboot#10173] - Add option to auto-generate a password for new entries [keepassxreboot#12593] - Add support for group sync in KeeShare [keepassxreboot#11593] - Add {UUID} placeholder for use in references [keepassxreboot#12511] - Add “Wait for Enter” search option [keepassxreboot#12263] - Add keyboard shortcut to “Jump to Group” from search results [keepassxreboot#12225] - Add predefined search for TOTP entries [keepassxreboot#12199] - Add confirmation when closing database via ESC key [keepassxreboot#11963] - Add support for escaping placeholder expressions [keepassxreboot#11904] - Reduce tab indentation width in notes fields [keepassxreboot#11919] - Cap default Argon2 parallelism when creating a new database [keepassxreboot#11853] - Database lock after inactivity now enabled by default and set to 900 seconds [keepassxreboot#12689, keepassxreboot#12609] - Copying TOTP now opens setup dialog if none is configured for entry [keepassxreboot#12584] - Make double click action configurable [keepassxreboot#12322] - Remove unused “Last Accessed” from GUI [keepassxreboot#12602] - Auto-Type: Add more granular confirmation settings [keepassxreboot#12370] - Auto-Type: Add URL typing preset and add copy options to menu [keepassxreboot#12341] - Browser: Do not allow sites automatically if entry added from browser extension [keepassxreboot#12413] - Browser: Add options to restrict exposed groups [keepassxreboot#9852, keepassxreboot#12119] - Bitwarden Import: Add support for timestamps and password history [keepassxreboot#12588] - macOS: Add Liquid Glass icon [keepassxreboot#12642] - macOS: Remove theme-based menubar icon toggle [keepassxreboot#12685] - macOS: Add Window and Help menus [keepassxreboot#12357] - Windows: Add option to add KeePassXC to PATH during installation [keepassxreboot#12171] - Fix window geometry not being restored properly when KeePassXC starts in tray [keepassxreboot#12683] - Fix potential database truncation when using direct write save method with YubiKeys [keepassxreboot#11841] - Fix issue with database backup saving [keepassxreboot#11874] - Fix UI lockups during startup with multiple tabs [keepassxreboot#12053] - Fix keyboard shortcuts when menubar is hidden [keepassxreboot#12431] - Fix clipboard being cleared on exit even if no password was copied [keepassxreboot#12603] - Fix single-instance detection when username contains invalid filename characters [keepassxreboot#12559] - Fix “Search Wait for Enter” setting not being save [keepassxreboot#12614] - Fix hotkey accelerators not being escaped properly on database tabs [keepassxreboot#12630] - Fix confusing error if user cancels out of key file edit dialog [keepassxreboot#12639] - Fix issues with saved searches and “Press Enter to Search” option [keepassxreboot#12314] - Fix URL wildcard matching [keepassxreboot#12257] - Fix TOTP visibility on unlock and settings change [keepassxreboot#12220] - Fix KeeShare entries with reference attributes not updating [keepassxreboot#11809] - Fix sort order not being maintained when toggling filters in database reports [keepassxreboot#11849] - Fix several UI font and layout issues [keepassxreboot#11967, keepassxreboot#12102] - Prevent mouse wheel scroll on edit username field [keepassxreboot#12398] - Improve base translation consistency [keepassxreboot#12432] - Improve inactivity timer [keepassxreboot#12246] - Documentation improvements [keepassxreboot#12373, keepassxreboot#12506] - Browser: Fix ordering of clientDataJSON in Passkey response object [keepassxreboot#12120] - Browser: Fix URL matching for additional URLs [keepassxreboot#12196] - Browser: Fix group settings inheritance [keepassxreboot#12368] - Browser: Allow read-only native messaging config files [keepassxreboot#12236] - Browser: Optimise entry iteration in browser access control dialog [keepassxreboot#11817] - Browser: Fix “Do not ask permission for HTTP Basic Auth” option [keepassxreboot#11871] - Browser: Fix native messaging path for Tor Browser launcher on Linux [keepassxreboot#12005] - Auto-Type: Fix empty window behaviour [keepassxreboot#12622] - Auto-Type: Take delays into account when typing TOTP [keepassxreboot#12691] - SSH Agent: Fix out-of-memory crash with malformed SSH keys [keepassxreboot#12606] - CSV Import: Fix modified and creation time import [keepassxreboot#12379] - CSV Import: Fix duplication of root groups on import [keepassxreboot#12240] - Proton Pass Import: Fix email addresses not being imported when no username set [keepassxreboot#11888] - macOS: Fix secure input getting stuck [keepassxreboot#11928] - Windows: Prevent launch as SYSTEM user from MSI installer [keepassxreboot#12705] - Windows: Remove broken check for MSVC Redistributable from MSI installer [keepassxreboot#11950] - Linux: Fix startup delay due to StartupNotify setting in desktop file [keepassxreboot#12306] - Linux: Fix memory initialisation when --pw-stdin is used with a pipe [keepassxreboot#12050]






Refactor attachment editor to support editing files.
Screenshots
Testing strategy
manually testing and unit tests
Type of change