Some work on notifications.

This commit is contained in:
Martin Rotter 2015-06-29 18:30:32 +02:00
parent 4b63db95f9
commit a5e1b1b116
12 changed files with 472 additions and 425 deletions

View File

@ -65,8 +65,8 @@ project(rssguard)
set(APP_NAME "RSS Guard")
set(APP_LOW_NAME "rssguard")
set(APP_VERSION "2.4.1")
set(FILE_VERSION "2,4,1,0")
set(APP_VERSION "2.5.0")
set(FILE_VERSION "2,5,0,0")
set(APP_AUTHOR "Martin Rotter")
set(APP_URL "http://bitbucket.org/skunkos/rssguard")
set(APP_URL_ISSUES "http://bitbucket.org/skunkos/rssguard/issues")

View File

@ -1,382 +1,397 @@
<body>
<center><h2>2.4.1</h2></center>
Added:
<ul>
<li>Experimental support for lighter version of <b>Adblock</b> component. It is configurable via status bar icon in bottom-right corner of main application window. It supports Adblock Plus filters. It is disabled by default. DO NOT user Adblock component if you wish to have LOW memory footprint or use very limited set of rules. Big set of rules makes RSS Guard more RAM hungry. (issue #7)</li>
<li>Unavailable actions in menus are automatically disabled when such a situation arises. (issue #28)</li>
<li><b>Added support for Google auto-suggest API.</b> Just type your phrase in internal web browser location text box and Google will help you out.</li>
</ul>
<center><h2>2.5.0</h2></center>
Added:
<ul>
<li>Fancy & modern popup notifications (turned on by default).</li>
Fixed:
<ul>
<li>Source code now uses QStringLiteral/QLatin1String class for character literals.</li>
<li>Internal message previewer is now cleared only once when switching feeds.</li>
<li>Database cleanup tools now do support "shrinking" in in-memory databases, althouth it is bit hacky.</li>
<li>Google suggest API now prevents completion if ENTER in address textbox is hit.</li>
<li>Double-clickin on message now results in opening source article in mini web browser.</li>
</ul>
</ul>
<hr/>
<center><h2>2.4.0</h2></center>
Added:
<ul>
<li><b>Initial support for databse cleaning. See menu 'Tools -> Cleanup database'. (issue #101)</b></li>
<li>RSS Guard is now able to export/import feed/category icons to/from OPML 2.0 files.</li>
<li>Localizations now load their titles for localization list automatically.</li>
<li>All feeds are by default checked when exporting/importing them.</li>
<li>Message previewer now displays MIME type of all podcasts too. This MIME type is also stored in DB.</li>
<li>Ability to fetch only new icon for feed from its online source.</li>
<li>Message view now automatically scrolls to selected message when changing filter string.</li>
<li>Some small memory footprint enhancements.</li>
<li>Option to search highlighted text in web browser via Google, available from context menu. (issue #72)</li>
</ul>
<hr/>
<center><h2>2.4.2</h2></center>
Fixed:
<ul>
<li>Icon cache is now automatically cleared after most of application is loaded. This should save some memory.</li>
</ul>
Fixed:
<ul>
<li>Marking feed(s) unread now correctly marks also selected message unread.</li>
<li>Threads for feed updating are created only when really needed.</li>
<li>Reworked DB initialization scripts which allow to use OPML to do initial feed population.</li>
<li>Titles and descriptions of feeds are now fetched correctly in feed add/edit dialog.</li>
</ul>
<hr/>
<center><h2>2.4.1</h2></center>
Added:
<ul>
<li>Experimental support for lighter version of <b>Adblock</b> component. It is configurable via status bar icon in bottom-right corner of main application window. It supports Adblock Plus filters. It is disabled by default. DO NOT user Adblock component if you wish to have LOW memory footprint or use very limited set of rules. Big set of rules makes RSS Guard more RAM hungry. (issue #7)</li>
<li>Unavailable actions in menus are automatically disabled when such a situation arises. (issue #28)</li>
<li><b>Added support for Google auto-suggest API.</b> Just type your phrase in internal web browser location text box and Google will help you out.</li>
</ul>
<hr/>
<center><h2>2.3.1</h2></center>
Added:
<ul>
<li>Danish localization.</li>
</ul>
Fixed:
<ul>
<li>Source code now uses QStringLiteral/QLatin1String class for character literals.</li>
<li>Internal message previewer is now cleared only once when switching feeds.</li>
<li>Database cleanup tools now do support "shrinking" in in-memory databases, althouth it is bit hacky.</li>
<li>Google suggest API now prevents completion if ENTER in address textbox is hit.</li>
<li>Double-clickin on message now results in opening source article in mini web browser.</li>
</ul>
Fixed:
<ul>
<li>Enhanced downloading of feed icons. Now combines Google API along with the actual links obtained from feed XMLs.</li>
<li>Fixed restarting issues. (issue #109)</li>
<li>Target directory settings is now used for all kinds of downloading + when prompt for each download destination is set, then previously used folder is saved. (issue #108)</li>
<li>Fixed solarized skin. (issue #111)</li>
<li>Keyboard shorcuts and toolbar editors now have alphabetically sorted actions. Toolbar editor switched from drag/drop to buttons. You can use CTRL+UP/DOWN arrow to move buttons in toolbar editor or double-click them to add/remove them. (issue
#110)</li>
<li>New constructs on source code level.</li>
<li>Many minor fixes, mainly code cleanup and refactoring.</li>
</ul>
<hr/>
<center><h2>2.4.0</h2></center>
Added:
<ul>
<li><b>Initial support for databse cleaning. See menu 'Tools -> Cleanup database'. (issue #101)</b></li>
<li>RSS Guard is now able to export/import feed/category icons to/from OPML 2.0 files.</li>
<li>Localizations now load their titles for localization list automatically.</li>
<li>All feeds are by default checked when exporting/importing them.</li>
<li>Message previewer now displays MIME type of all podcasts too. This MIME type is also stored in DB.</li>
<li>Ability to fetch only new icon for feed from its online source.</li>
<li>Message view now automatically scrolls to selected message when changing filter string.</li>
<li>Some small memory footprint enhancements.</li>
<li>Option to search highlighted text in web browser via Google, available from context menu. (issue #72)</li>
</ul>
<hr/>
<center><h2>2.3.0</h2></center>
Fixed:
<ul>
<li>Marking feed(s) unread now correctly marks also selected message unread.</li>
<li>Threads for feed updating are created only when really needed.</li>
<li>Reworked DB initialization scripts which allow to use OPML to do initial feed population.</li>
<li>Titles and descriptions of feeds are now fetched correctly in feed add/edit dialog.</li>
</ul>
Fixed:
<ul>
<li>Some MySQL-related fixes.</li>
</ul>
<hr/>
<center><h2>2.3.1</h2></center>
Added:
<ul>
<li>Danish localization.</li>
</ul>
Added:
<ul>
<li>User now can specify MySQL target database by name. (issue #107)</li>
<li>Automatic detection of feeds on websites. User loads website and can add feeds via custom web browser toolbar button. (issue #47)</li>
<li>Better format for logged messages. Logging to file is possible via "rssguard 2> log.txt" command.</li>
<li>Full support for podcasts (issue #81). Supports RSS 2.0 podcasts and ATOM 1.0 podcasts. In ATOM, RSS Guard is able to fetch multiple podcasts per message. Podcasts are displayed as additional URL addresses in message preview panel.</li>
</ul>
Fixed:
<ul>
<li>Enhanced downloading of feed icons. Now combines Google API along with the actual links obtained from feed XMLs.</li>
<li>Fixed restarting issues. (issue #109)</li>
<li>Target directory settings is now used for all kinds of downloading + when prompt for each download destination is set, then previously used folder is saved. (issue #108)</li>
<li>Fixed solarized skin. (issue #111)</li>
<li>Keyboard shorcuts and toolbar editors now have alphabetically sorted actions. Toolbar editor switched from drag/drop to buttons. You can use CTRL+UP/DOWN arrow to move buttons in toolbar editor or double-click them to add/remove them. (issue
#110)</li>
<li>New constructs on source code level.</li>
<li>Many minor fixes, mainly code cleanup and refactoring.</li>
</ul>
Changed:
<ul>
</ul>
<hr/>
<center><h2>2.3.0</h2></center>
<hr/>
<center><h2>2.2.0</h2></center>
Fixed:
<ul>
<li>Some MySQL-related fixes.</li>
</ul>
Fixed:
<ul>
<li>Fixed issue #53 - removing of duplicate messages. Feature is available globally in "Settings -> Messages".</li>
<li>Fixed issue #100 - saving HTML web pages.</li>
<li>Fixed issues #106, #65.</li>
</ul>
Added:
<ul>
<li>User now can specify MySQL target database by name. (issue #107)</li>
<li>Automatic detection of feeds on websites. User loads website and can add feeds via custom web browser toolbar button. (issue #47)</li>
<li>Better format for logged messages. Logging to file is possible via "rssguard 2> log.txt" command.</li>
<li>Full support for podcasts (issue #81). Supports RSS 2.0 podcasts and ATOM 1.0 podcasts. In ATOM, RSS Guard is able to fetch multiple podcasts per message. Podcasts are displayed as additional URL addresses in message preview panel.</li>
</ul>
Added:
<ul>
<li style="font-weight: bold;">Completely new downloader (see menu Tools -> Downloads) forked from original Qt examples.</li>
</ul>
Changed:
<ul>
</ul>
Changed:
<ul>
<li>Updater now displays full changelog.</li>
</ul>
<hr/>
<center><h2>2.2.0</h2></center>
<hr/>
<center><h2>2.1.0</h2></center>
Fixed:
<ul>
<li>Fixed issue #53 - removing of duplicate messages. Feature is available globally in "Settings -> Messages".</li>
<li>Fixed issue #100 - saving HTML web pages.</li>
<li>Fixed issues #106, #65.</li>
</ul>
Fixed:
<ul>
<li>Fixed bug #105, #103.</li>
</ul>
Added:
<ul>
<li style="font-weight: bold;">Completely new downloader (see menu Tools -> Downloads) forked from original Qt examples.</li>
</ul>
Added:
<ul>
<li>Embedded web browser supports printing of its contents, feature is accessible via web browser context menu.</li>
<li>Embedded web browser now displays navigation toolbar even in message preview mode/newspaper mode when user loads external links.</li>
</ul>
Changed:
<ul>
<li>Updater now displays full changelog.</li>
</ul>
<hr/>
<center><h2>2.0.0.4</h2></center>
<hr/>
<center><h2>2.1.0</h2></center>
Fixed:
<ul>
<li>Database is now correctly restored when using SQLite memory databases.</li>
<li>When items are deleted from recycle bin then they are kept in DB and marked as "permanently deleted" (bug #95).'
</ul>
Fixed:
<ul>
<li>Fixed bug #105, #103.</li>
</ul>
Added:
<ul>
<li>Layout orientation of message list/viewer is now changeable via "View" menu (bug report #98).</li>
<li>Sort order/column in message list is now persistent (bug #97).</li>
<li>Inline searching in feed/message list is now case insensitive and more polished (bug report #84).</li>
<li>Items in feed list (categories and feeds) now can be re-arranged via drag-drop functionality (issue report #91).</li>
<li>Tray icon now displays blue number of unread messages if any of those messages is newly downloaded from online feed (enhancement #87).</li>
<li>Fixed issue request #95: items are now permanently hidden (not deleted from database) when "deleted" from recycle bin.</li>
<li>Issue request #95: moreover custom incremental ability to update database schema was added to keep RSS Guard 2.0.0.4+ fully compatible with previous releases. Incremental algorithm supports both database backends.</li>
</ul>
Added:
<ul>
<li>Embedded web browser supports printing of its contents, feature is accessible via web browser context menu.</li>
<li>Embedded web browser now displays navigation toolbar even in message preview mode/newspaper mode when user loads external links.</li>
</ul>
Changed:
<ul>
</ul>
<hr/>
<center><h2>2.0.0.4</h2></center>
<hr/>
<center><h2>2.0.0.3</h2></center>
Fixed:
<ul>
<li>Database is now correctly restored when using SQLite memory databases.</li>
<li>When items are deleted from recycle bin then they are kept in DB and marked as "permanently deleted" (bug #95).'
</ul>
Fixed:
<ul>
<li>Fixed #76, #75, #82, #79, #85 #78, #92, #93.</li>
</ul>
Added:
<ul>
<li>Layout orientation of message list/viewer is now changeable via "View" menu (bug report #98).</li>
<li>Sort order/column in message list is now persistent (bug #97).</li>
<li>Inline searching in feed/message list is now case insensitive and more polished (bug report #84).</li>
<li>Items in feed list (categories and feeds) now can be re-arranged via drag-drop functionality (issue report #91).</li>
<li>Tray icon now displays blue number of unread messages if any of those messages is newly downloaded from online feed (enhancement #87).</li>
<li>Fixed issue request #95: items are now permanently hidden (not deleted from database) when "deleted" from recycle bin.</li>
<li>Issue request #95: moreover custom incremental ability to update database schema was added to keep RSS Guard 2.0.0.4+ fully compatible with previous releases. Incremental algorithm supports both database backends.</li>
</ul>
Added:
<ul>
<li>Settings/database can now experimentally be exported/imported.</li>
<li>Added Swedish localization (thanks to &Aring;ke Engelbrektson).</li>
<li>Parent item is now selected when adding new category/feed with that parent pre-selected in feed view.</li>
<li>Message date/time format is now changeable.</li>
</ul>
Changed:
<ul>
</ul>
Changed:
<ul>
</ul>
<hr/>
<center><h2>2.0.0.3</h2></center>
<hr/>
<center><h2>2.0.0.2</h2></center>
Fixed:
<ul>
<li>Fixed #76, #75, #82, #79, #85 #78, #92, #93.</li>
</ul>
Fixed:
<ul>
<li>Fully portable settings is now used as default if non portable settings does not exist yet.</li>
<li>List of actions in toolbar editor now does not allow copying of items.</li>
<li>Keyboard search for message list should now work with Qt 4.</li>
<li>Overall code cleanups and refactoring primarily in area of feed/message models and recycle bin functionality.</li>
<li>Fixed bugs #66, #67, #69, #64, #48.</li>
<li>Blau skin now has colored webkit scrollbars, fixed some button widths and enhanced menu popup tool buttons.</li>
</ul>
Added:
<ul>
<li>Settings/database can now experimentally be exported/imported.</li>
<li>Added Swedish localization (thanks to &Aring;ke Engelbrektson).</li>
<li>Parent item is now selected when adding new category/feed with that parent pre-selected in feed view.</li>
<li>Message date/time format is now changeable.</li>
</ul>
Added:
<ul>
<li>Application can now be safely restarted from within main menu.</li>
<li>HTTP request for feed files now contains special "Accept" header.</li>
<li>Recycle bin with ability to trash or restore the whole bin or individual messages.</li>
<li>MySQL backend now allows to defragment/optimize RSS Guard database.</li>
<li>Three new skins, including solarized skin. Vergilius improved.</li>
</ul>
Changed:
<ul>
</ul>
Changed:
<ul>
<li>File downloader now resolves "feed://" URI scheme to "http://" URI scheme.</li>
<li>Target message is now selected instead of highlighted when searching with keyboard.</li>
</ul>
<hr/>
<center><h2>2.0.0.2</h2></center>
<hr/>
<center><h2>2.0.0.1</h2></center>
Fixed:
<ul>
<li>Fully portable settings is now used as default if non portable settings does not exist yet.</li>
<li>List of actions in toolbar editor now does not allow copying of items.</li>
<li>Keyboard search for message list should now work with Qt 4.</li>
<li>Overall code cleanups and refactoring primarily in area of feed/message models and recycle bin functionality.</li>
<li>Fixed bugs #66, #67, #69, #64, #48.</li>
<li>Blau skin now has colored webkit scrollbars, fixed some button widths and enhanced menu popup tool buttons.</li>
</ul>
Fixed:
<ul>
<li>Some visual tweaking.</li>
<li>URL redirection now works with relative redirecting addresses.</li>
<li>Messages are now sorted using active locale.</li>
<li>Fixed bug #49 and duplicate feed/category detection.</li>
<li>Experimentally fixed bug #50.</li>
<li>NSIS installer is now portable. It makes only ONE access to registry and you can use it to install RSS Guard to any location such as USB flash drives.</li>
</ul>
Added:
<ul>
<li>Application can now be safely restarted from within main menu.</li>
<li>HTTP request for feed files now contains special "Accept" header.</li>
<li>Recycle bin with ability to trash or restore the whole bin or individual messages.</li>
<li>MySQL backend now allows to defragment/optimize RSS Guard database.</li>
<li>Three new skins, including solarized skin. Vergilius improved.</li>
</ul>
Added:
<ul>
<li>RSS Guard now accepts donations, see "Help" menu for more information.</li>
<li>Tray icon tooltips now displays number of unread messages if there is at least one unread message.</li>
<li>Re-introduced "blau" (dark) skin.</li>
<li>Import/export dialog now offers "Check/uncheck all items" button.</li>
</ul>
Changed:
<ul>
<li>File downloader now resolves "feed://" URI scheme to "http://" URI scheme.</li>
<li>Target message is now selected instead of highlighted when searching with keyboard.</li>
</ul>
Changed:
<ul>
<li>Selection in feed list is now single.</li>
<li>Keyboard navigation to "next/previous" item in feed list is now recursively hybrid.</li>
</ul>
<hr/>
<center><h2>2.0.0.1</h2></center>
<hr/>
<center><h2>2.0.0.0</h2></center>
Fixed:
<ul>
<li>Some visual tweaking.</li>
<li>URL redirection now works with relative redirecting addresses.</li>
<li>Messages are now sorted using active locale.</li>
<li>Fixed bug #49 and duplicate feed/category detection.</li>
<li>Experimentally fixed bug #50.</li>
<li>NSIS installer is now portable. It makes only ONE access to registry and you can use it to install RSS Guard to any location such as USB flash drives.</li>
</ul>
Fixed:
<ul>
<li>Improved behavior of updater. Switched to NSIS installers.</li>
<li>Adjusted OS/2 icon handling.</li>
<li>Toolbars tweaked.</li>
<li>Source code huge refactorings.</li>
<li>Flag icons are now separated into their own directory.</li>
<li>File downloaders are now thinner.</li>
<li>GUI tweaked.</li>
<li>Database connections are only used when really needed.</li>
</ul>
Added:
<ul>
<li>RSS Guard now accepts donations, see "Help" menu for more information.</li>
<li>Tray icon tooltips now displays number of unread messages if there is at least one unread message.</li>
<li>Re-introduced "blau" (dark) skin.</li>
<li>Import/export dialog now offers "Check/uncheck all items" button.</li>
</ul>
Added:
<ul>
<li>Added NSIS-based "portable" installer for Windows and restructured update process.</li>
<li>Added experimental support for exporting and importing feeds to/from OPML 2.0.</li>
<li>Feeds now change their color to red if their network status reports error - feed is not reachable or was moved or is unavailable due to other errors.</li>
</ul>
Changed:
<ul>
<li>Selection in feed list is now single.</li>
<li>Keyboard navigation to "next/previous" item in feed list is now recursively hybrid.</li>
</ul>
Changed:
<ul>
<li>Added newly-compiled SQL libraries - MariaDB, Postgre SQL.</li>
<li>Updated bundled OpenSSL libraries for Windows portable version.</li>
</ul>
<hr/>
<center><h2>2.0.0.0</h2></center>
<hr/>
<center><h2>1.9.9.9</h2></center>
Fixed:
<ul>
<li>Improved behavior of updater. Switched to NSIS installers.</li>
<li>Adjusted OS/2 icon handling.</li>
<li>Toolbars tweaked.</li>
<li>Source code huge refactorings.</li>
<li>Flag icons are now separated into their own directory.</li>
<li>File downloaders are now thinner.</li>
<li>GUI tweaked.</li>
<li>Database connections are only used when really needed.</li>
</ul>
Fixed:
<ul>
<li>Various GUI and bug fixes.</li>
</ul>
Added:
<ul>
<li>Added NSIS-based "portable" installer for Windows and restructured update process.</li>
<li>Added experimental support for exporting and importing feeds to/from OPML 2.0.</li>
<li>Feeds now change their color to red if their network status reports error - feed is not reachable or was moved or is unavailable due to other errors.</li>
</ul>
Added:
<ul>
<li>Application is now able to self-update itself on OS/2 and Windows. Currently, this is EXPERIMENTAL support. Please, report any bugs. Authors take no responsibility for removed files or lost application settings.</li>
<li>Added option to adjust icons/buttons displayed in toolbars. See Settings/User interface/Toolbars dialog for more information.</li>
<li>Added option to search messages via regular expression.</li>
<li>Added option to highlight particular messages - unread, important, none.</li>
</ul>
Changed:
<ul>
<li>Added newly-compiled SQL libraries - MariaDB, Postgre SQL.</li>
<li>Updated bundled OpenSSL libraries for Windows portable version.</li>
</ul>
Changed:
<ul>
</ul>
<hr/>
<center><h2>1.9.9.9</h2></center>
<hr/>
<center><h2>1.9.9.8</h2></center>
Fixed:
<ul>
<li>Various GUI and bug fixes.</li>
</ul>
Fixed:
<ul>
<li>Informative buttons now do not accept focus.</li>
<li>Button for resetting keyboard shortcut now works.</li>
<li>Fixed web browser tab title/icon handling (bug #39).</li>
</ul>
Added:
<ul>
<li>Application is now able to self-update itself on OS/2 and Windows. Currently, this is EXPERIMENTAL support. Please, report any bugs. Authors take no responsibility for removed files or lost application settings.</li>
<li>Added option to adjust icons/buttons displayed in toolbars. See Settings/User interface/Toolbars dialog for more information.</li>
<li>Added option to search messages via regular expression.</li>
<li>Added option to highlight particular messages - unread, important, none.</li>
</ul>
Added:
<ul>
<li>Added option to hide main toolbars and feed/message list headers.</li>
<li>"Defragment database" button shortcut is now changeable.</li>
<li>Added option to clear keyboard shortcuts.</li>
<li>Added "progress bar" to web browser.</li>
<li>Added blue color to feeds which contain unread messages.</li>
<li>Added new "greeen" skin.</li>
<li>Added "Web browser" menu to corner main menu button.</li>
</ul>
Changed:
<ul>
</ul>
Changed:
<ul>
<li>Massive code cleanups.</li>
<li>Removed "progress bar" from address text edit of web browser.</li>
<li>Removed "blau" skin due to its slowness.</li>
<li>Tab order and default widget changed for category/feed add/edit dialogs.</li>
<li>New style for tab widget corner buttons.</li>
</ul>
<hr/>
<center><h2>1.9.9.8</h2></center>
<hr/>
<center><h2>1.9.9.7</h2></center>
Fixed:
<ul>
<li>Informative buttons now do not accept focus.</li>
<li>Button for resetting keyboard shortcut now works.</li>
<li>Fixed web browser tab title/icon handling (bug #39).</li>
</ul>
Fixed:
<ul>
<li>Simplified hiding of main menu - primarily in source code.</li>
<li>Fixed size of "normal" window display when fullscreen mode is active on application exit.</li>
<li>Partially fixed bug #33.</li>
<li>All datetimes fetched from feeds are now considered to be UTC.</li>
</ul>
Added:
<ul>
<li>Added option to hide main toolbars and feed/message list headers.</li>
<li>"Defragment database" button shortcut is now changeable.</li>
<li>Added option to clear keyboard shortcuts.</li>
<li>Added "progress bar" to web browser.</li>
<li>Added blue color to feeds which contain unread messages.</li>
<li>Added new "greeen" skin.</li>
<li>Added "Web browser" menu to corner main menu button.</li>
</ul>
Added:
<ul>
<li>Toolbutton-based main menu.</li>
<li>User can enable/disable web browser javascript, external plugins and images auto-loading (bug #9).</li>
<li>Custom counts of messages in feed list (issue #14) are now changeable.</li>
<li>Feed list categories expand status is now persistent.</li>
<li>System-wide external web browser can now be used.</li>
<li>Switchable (with user-defined keyboard shortcut) main menu.</li>
<li>Added better changelog.</li>
</ul>
Changed:
<ul>
<li>Massive code cleanups.</li>
<li>Removed "progress bar" from address text edit of web browser.</li>
<li>Removed "blau" skin due to its slowness.</li>
<li>Tab order and default widget changed for category/feed add/edit dialogs.</li>
<li>New style for tab widget corner buttons.</li>
</ul>
Changed:
<ul>
<li>Some icons replaced.</li>
<li>Several keyboard shortcuts + accelerators changed.</li>
<li>Message list optimizations done.</li>
<li>"Check for updates" dialog tweaked.</li>
</ul>
<hr/>
<center><h2>1.9.9.7</h2></center>
<hr/>
<center><h2>1.9.9.6</h2></center>
Fixed:
<ul>
<li>Simplified hiding of main menu - primarily in source code.</li>
<li>Fixed size of "normal" window display when fullscreen mode is active on application exit.</li>
<li>Partially fixed bug #33.</li>
<li>All datetimes fetched from feeds are now considered to be UTC.</li>
</ul>
Fixed:
<ul>
<li>Restarting of application on all platforms fixed.</li>
<li>Feed type saved correctly to database when feed is added.</li>
<li>Fixed bugs #15, #16, #13, #19, #20, #26, #25, #18, #21, #25.</li>
</ul>
Added:
<ul>
<li>Toolbutton-based main menu.</li>
<li>User can enable/disable web browser javascript, external plugins and images auto-loading (bug #9).</li>
<li>Custom counts of messages in feed list (issue #14) are now changeable.</li>
<li>Feed list categories expand status is now persistent.</li>
<li>System-wide external web browser can now be used.</li>
<li>Switchable (with user-defined keyboard shortcut) main menu.</li>
<li>Added better changelog.</li>
</ul>
Added:
<ul>
<li>Added initial French, Portuguese, German localizations. THANKS to theirs authors!!!</li>
<li>"Copy selection" context menu item for internal web browser added. </li>
</ul>
Changed:
<ul>
<li>Some icons replaced.</li>
<li>Several keyboard shortcuts + accelerators changed.</li>
<li>Message list optimizations done.</li>
<li>"Check for updates" dialog tweaked.</li>
</ul>
Changed:
<ul>
<li>Localization handling improved.</li>
<li>Default feed list improved.</li>
</ul>
<hr/>
<center><h2>1.9.9.6</h2></center>
<hr/>
<center><h2>1.9.9.5</h2></center>
Fixed:
<ul>
<li>Restarting of application on all platforms fixed.</li>
<li>Feed type saved correctly to database when feed is added.</li>
<li>Fixed bugs #15, #16, #13, #19, #20, #26, #25, #18, #21, #25.</li>
</ul>
Fixed:
<ul>
<li>Mac OS X support missing.</li>
<li>Virtual desktop change hides main window.</li>
<li>Misleding external browser settings.</li>
<li>Non-functional external browser shortcuts.</li>
<li>Saving of webbrowser progressbar color.</li>
</ul>
Added:
<ul>
<li>Added initial French, Portuguese, German localizations. THANKS to theirs authors!!!</li>
<li>"Copy selection" context menu item for internal web browser added. </li>
</ul>
Added:
<ul>
<li>Some missing keyboard shortcuts.</li>
</ul>
Changed:
<ul>
<li>Localization handling improved.</li>
<li>Default feed list improved.</li>
</ul>
Changed:
<ul>
<li>Completely switched to new website.</li>
<li>Usability of some GUI elements improved.</li>
</ul>
<hr/>
<center><h2>1.9.9.5</h2></center>
<hr/>
<center><h2>1.9.9.4</h2></center>
Fixed:
<ul>
<li>Mac OS X support missing.</li>
<li>Virtual desktop change hides main window.</li>
<li>Misleding external browser settings.</li>
<li>Non-functional external browser shortcuts.</li>
<li>Saving of webbrowser progressbar color.</li>
</ul>
Added:
<ul>
<li>Experimental MySQL backend support.</li>
<li>Feed metadata fetching is available.</li>
<li>Changeable toolbar button style via application settings.</li>
</ul>
Added:
<ul>
<li>Some missing keyboard shortcuts.</li>
</ul>
Changed:
<ul>
<li>Other major features tweaked, many bugs fixed.</li>
</ul>
Changed:
<ul>
<li>Completely switched to new website.</li>
<li>Usability of some GUI elements improved.</li>
</ul>
</body>
<hr/>
<center><h2>1.9.9.4</h2></center>
Added:
<ul>
<li>Experimental MySQL backend support.</li>
<li>Feed metadata fetching is available.</li>
<li>Changeable toolbar button style via application settings.</li>
</ul>
Changed:
<ul>
<li>Other major features tweaked, many bugs fixed.</li>
</ul>
</body>

View File

@ -80,7 +80,7 @@ FormMain::FormMain(QWidget *parent, Qt::WindowFlags f)
// Initialize the web factory.
WebFactory::instance()->loadState();
(new Notification())->notify("abcd abcd abcd abcd abcd abcd \naaa\n\n\nabcd abcd abcd abcd abcd", "def def def def def");
(new Notification())->notify("abcd abcd abcd abcd abcd abcd \naaa\n\n\nabcd abcd abcd abcd abcd", "def def def def def", qApp->icons()->fromTheme("item-update-all"));
}
FormMain::~FormMain() {

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>979</width>
<height>600</height>
<width>1296</width>
<height>677</height>
</rect>
</property>
<property name="windowTitle">
@ -47,7 +47,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>979</width>
<width>1296</width>
<height>21</height>
</rect>
</property>

View File

@ -706,18 +706,25 @@ void FormSettings::loadInterface() {
// Load settings of tray icon.
if (SystemTrayIcon::isSystemTrayAvailable()) {
m_ui->m_radioTrayOff->setChecked(!settings->value(GROUP(GUI), SETTING(GUI::UseTrayIcon)).toBool());
m_ui->m_grpTray->setChecked(settings->value(GROUP(GUI), SETTING(GUI::UseTrayIcon)).toBool());
}
// Tray icon is not supported on this machine.
else {
m_ui->m_radioTrayOff->setText(tr("Disable (Tray icon is not available.)"));
m_ui->m_radioTrayOff->setChecked(true);
m_ui->m_grpTray->setDisabled(true);
m_ui->m_grpTray->setTitle(m_ui->m_grpTray->title() + QL1C(' ') + tr("(Tray icon is not available.)"));
m_ui->m_grpTray->setChecked(false);
}
m_ui->m_checkHidden->setChecked(settings->value(GROUP(GUI), SETTING(GUI::MainWindowStartsHidden)).toBool());
m_ui->m_checkHideWhenMinimized->setChecked(settings->value(GROUP(GUI), SETTING(GUI::HideMainWindowWhenMinimized)).toBool());
// Load fancy notification settings.
m_ui->m_grpNotifications->setChecked(settings->value(GROUP(GUI), SETTING(GUI::UseFancyNotifications)).toBool());
m_ui->m_cmbNotificationPosition->addItem(tr("Bottom-left corner"), Qt::BottomLeftCorner);
m_ui->m_cmbNotificationPosition->addItem(tr("Top-left corner"), Qt::TopLeftCorner);
m_ui->m_cmbNotificationPosition->addItem(tr("Bottom-right corner"), Qt::BottomRightCorner);
m_ui->m_cmbNotificationPosition->addItem(tr("Top-right corner"), Qt::TopRightCorner);
m_ui->m_cmbNotificationPosition->setCurrentIndex(m_ui->m_cmbNotificationPosition->findData(static_cast<Qt::Corner>(settings->value(GROUP(GUI), SETTING(GUI::FancyNotificationsPosition)).toInt())));
// Load settings of icon theme.
QString current_theme = qApp->icons()->currentIconTheme();
@ -804,9 +811,9 @@ void FormSettings::saveInterface() {
// Save tray icon.
if (SystemTrayIcon::isSystemTrayAvailable()) {
settings->setValue(GROUP(GUI), GUI::UseTrayIcon, m_ui->m_radioTrayOn->isChecked());
settings->setValue(GROUP(GUI), GUI::UseTrayIcon, m_ui->m_grpTray->isChecked());
if (m_ui->m_radioTrayOn->isChecked()) {
if (m_ui->m_grpTray->isChecked()) {
qApp->showTrayIcon();
}
else {
@ -817,6 +824,10 @@ void FormSettings::saveInterface() {
settings->setValue(GROUP(GUI), GUI::MainWindowStartsHidden, m_ui->m_checkHidden->isChecked());
settings->setValue(GROUP(GUI), GUI::HideMainWindowWhenMinimized, m_ui->m_checkHideWhenMinimized->isChecked());
// Save notifications.
settings->setValue(GROUP(GUI), GUI::UseFancyNotifications, m_ui->m_grpNotifications->isChecked());
settings->setValue(GROUP(GUI), GUI::FancyNotificationsPosition, static_cast<Qt::Corner>(m_ui->m_cmbNotificationPosition->itemData(m_ui->m_cmbNotificationPosition->currentIndex()).toInt()));
// Save selected icon theme.
QString selected_icon_theme = m_ui->m_cmbIconTheme->itemData(m_ui->m_cmbIconTheme->currentIndex()).toString();
QString original_icon_theme = qApp->icons()->currentIconTheme();

View File

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>990</width>
<width>1032</width>
<height>498</height>
</rect>
</property>
@ -88,7 +88,7 @@
<item row="0" column="1">
<widget class="QStackedWidget" name="m_stackedSettings">
<property name="currentIndex">
<number>0</number>
<number>3</number>
</property>
<widget class="QWidget" name="m_pageGeneral">
<layout class="QFormLayout" name="formLayout_5">
@ -419,8 +419,8 @@ MySQL backend will automatically use database with name &quot;rssguard&quot;. Do
<rect>
<x>0</x>
<y>0</y>
<width>740</width>
<height>451</height>
<width>100</width>
<height>30</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
@ -465,7 +465,7 @@ MySQL backend will automatically use database with name &quot;rssguard&quot;. Do
<enum>QTabWidget::North</enum>
</property>
<property name="currentIndex">
<number>0</number>
<number>1</number>
</property>
<widget class="QWidget" name="m_tabIconSkin">
<attribute name="title">
@ -497,8 +497,8 @@ MySQL backend will automatically use database with name &quot;rssguard&quot;. Do
<rect>
<x>0</x>
<y>0</y>
<width>734</width>
<height>425</height>
<width>208</width>
<height>238</height>
</rect>
</property>
<layout class="QFormLayout" name="formLayout">
@ -608,46 +608,54 @@ MySQL backend will automatically use database with name &quot;rssguard&quot;. Do
<string>Tray area &amp;&amp; notifications</string>
</attribute>
<layout class="QFormLayout" name="formLayout_3">
<item row="0" column="0" colspan="2">
<item row="1" column="0" colspan="2">
<widget class="QGroupBox" name="m_grpTray">
<property name="title">
<string>Tray icon</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QFormLayout" name="formLayout_2">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::ExpandingFieldsGrow</enum>
</property>
<item row="0" column="0" colspan="2">
<widget class="QRadioButton" name="m_radioTrayOff">
<property name="text">
<string>Disable</string>
</property>
</widget>
</item>
<item row="2" column="0">
<item row="0" column="0">
<widget class="QCheckBox" name="m_checkHideWhenMinimized">
<property name="text">
<string>Hide main window when it is minimized</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<item row="1" column="0" colspan="2">
<widget class="QCheckBox" name="m_checkHidden">
<property name="text">
<string>Start application hidden</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QRadioButton" name="m_radioTrayOn">
</layout>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QGroupBox" name="m_grpNotifications">
<property name="title">
<string>Fancy &amp;&amp; modern popup notifications</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QFormLayout" name="formLayout_23">
<item row="0" column="0">
<widget class="QLabel" name="m_lblNotificationPosition">
<property name="text">
<string>Enable</string>
</property>
<property name="checked">
<bool>true</bool>
<string>Notification position</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="m_cmbNotificationPosition"/>
</item>
</layout>
</widget>
</item>
@ -1564,10 +1572,8 @@ MySQL backend will automatically use database with name &quot;rssguard&quot;. Do
<tabstop>m_scrollIconSkins</tabstop>
<tabstop>m_cmbIconTheme</tabstop>
<tabstop>m_treeSkins</tabstop>
<tabstop>m_radioTrayOff</tabstop>
<tabstop>m_checkHideWhenMinimized</tabstop>
<tabstop>m_checkHidden</tabstop>
<tabstop>m_radioTrayOn</tabstop>
<tabstop>m_checkNewTabDoubleClick</tabstop>
<tabstop>m_hideTabBarIfOneTabVisible</tabstop>
<tabstop>m_checkCloseTabsDoubleClick</tabstop>
@ -1642,22 +1648,6 @@ MySQL backend will automatically use database with name &quot;rssguard&quot;. Do
</hint>
</hints>
</connection>
<connection>
<sender>m_radioTrayOn</sender>
<signal>toggled(bool)</signal>
<receiver>m_checkHidden</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>508</x>
<y>102</y>
</hint>
<hint type="destinationlabel">
<x>508</x>
<y>151</y>
</hint>
</hints>
</connection>
<connection>
<sender>m_checkAutoUpdate</sender>
<signal>toggled(bool)</signal>
@ -1674,22 +1664,6 @@ MySQL backend will automatically use database with name &quot;rssguard&quot;. Do
</hint>
</hints>
</connection>
<connection>
<sender>m_radioTrayOn</sender>
<signal>toggled(bool)</signal>
<receiver>m_checkHideWhenMinimized</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>515</x>
<y>94</y>
</hint>
<hint type="destinationlabel">
<x>357</x>
<y>117</y>
</hint>
</hints>
</connection>
<connection>
<sender>m_checkMessagesDateTimeFormat</sender>
<signal>toggled(bool)</signal>
@ -1722,5 +1696,37 @@ MySQL backend will automatically use database with name &quot;rssguard&quot;. Do
</hint>
</hints>
</connection>
<connection>
<sender>m_grpNotifications</sender>
<signal>toggled(bool)</signal>
<receiver>m_lblNotificationPosition</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>625</x>
<y>77</y>
</hint>
<hint type="destinationlabel">
<x>326</x>
<y>84</y>
</hint>
</hints>
</connection>
<connection>
<sender>m_grpNotifications</sender>
<signal>toggled(bool)</signal>
<receiver>m_cmbNotificationPosition</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>625</x>
<y>77</y>
</hint>
<hint type="destinationlabel">
<x>696</x>
<y>84</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -19,6 +19,9 @@
#include "gui/messagebox.h"
#include "definitions/definitions.h"
#include "miscellaneous/application.h"
#include "miscellaneous/settings.h"
#include "miscellaneous/textfactory.h"
#include <QApplication>
#include <QDesktopWidget>
@ -40,6 +43,10 @@ Notification::Notification() : QWidget(0), m_title(QString()), m_text(QString())
Notification::~Notification() {
}
bool Notification::areNotificationsActivated() {
return qApp->settings()->value(GROUP(GUI), SETTING(GUI::UseFancyNotifications)).toBool();
}
void Notification::notify(const QString &text, const QString &title, const QIcon &icon) {
hide();
@ -61,12 +68,13 @@ void Notification::notify(const QString &text, const QString &title, QSystemTray
void Notification::updateGeometries() {
// Calculate width and height of notification with given icon and text.
m_width = m_padding +
m_icon.width() + m_padding + /* contents */ qMax(stringWidth(m_title), stringWidth(m_text)) +
m_icon.width() + m_padding + /* contents */ qMax(TextFactory::stringWidth(m_title, fontMetrics()),
TextFactory::stringWidth(m_text, fontMetrics())) +
m_padding;
m_height = m_padding +
/* contents */
qMax(m_icon.height(),
stringHeight(m_title) + m_padding + stringHeight(m_text)) +
TextFactory::stringHeight(m_title, fontMetrics()) + m_padding + TextFactory::stringHeight(m_text, fontMetrics())) +
m_padding;
// Calculate real position.
@ -130,7 +138,7 @@ void Notification::paintEvent(QPaintEvent *event) {
painter.setPen(Qt::black);
// Needed heighs/widths.
int title_height = stringHeight(m_title);
int title_height = TextFactory::stringHeight(m_title, fontMetrics());
int remaining_width = width() - m_padding - m_icon.width() - m_padding /* - here comes contents */ - m_padding;
int remaining_height = height() - m_padding - title_height - m_padding /* - here comes contents */ - m_padding;
@ -163,29 +171,8 @@ void Notification::leaveEvent(QEvent *event) {
repaint();
}
int Notification::stringHeight(const QString &string) {
int count_lines = string.split(QL1C('\n')).size();
return fontMetrics().height() * count_lines;
}
int Notification::stringWidth(const QString &string) {
QStringList lines = string.split(QL1C('\n'));
int width = 0;
foreach (const QString &line, lines) {
int line_width = fontMetrics().width(line);
if (line_width > width) {
width = line_width;
}
}
return width;
}
void Notification::loadSettings() {
// TODO: načist z nastaveni.
m_position = Qt::BottomRightCorner;
m_position = static_cast<Qt::Corner>(qApp->settings()->value(GROUP(GUI), SETTING(GUI::FancyNotificationsPosition)).toInt());
}
void Notification::setupWidget() {
@ -220,11 +207,4 @@ void Notification::setupWidget() {
// Window will be meant to be on top, but should not steal focus.
setFocusPolicy(Qt::NoFocus);
// TODO: pokracovat
// https://github.com/binaryking/QNotify/blob/master/QNotify.cpp
// http://stackoverflow.com/questions/5823700/notification-window-in-mac-with-or-without-qt
// quiterss
// a odkazy z issue
// promyslet esli tam dat jen ciste label a ikonu, nebo i seznam nejnovesich zprav atp.
}

View File

@ -31,6 +31,8 @@ class Notification : public QWidget {
explicit Notification();
virtual ~Notification();
inline static bool areNotificationsActivated();
public slots:
void notify(const QString &text, const QString &title, const QIcon &icon);
void notify(const QString &text, const QString &title, QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information);
@ -42,9 +44,6 @@ class Notification : public QWidget {
void leaveEvent(QEvent *event);
private:
int stringHeight(const QString &string);
int stringWidth(const QString &string);
void loadSettings();
void setupWidget();
void updateGeometries();

View File

@ -105,6 +105,12 @@ DVALUE(bool) GUI::HideMainWindowWhenMinimizedDef = false;
DKEY GUI::UseTrayIcon = "use_tray_icon";
DVALUE(bool) GUI::UseTrayIconDef = true;
DKEY GUI::UseFancyNotifications = "use_fancy_notifications";
DVALUE(bool) GUI::UseFancyNotificationsDef = true;
DKEY GUI::FancyNotificationsPosition = "fancy_notifications_position";
DVALUE(Qt::Corner) GUI::FancyNotificationsPositionDef = Qt::BottomRightCorner;
DKEY GUI::TabCloseMiddleClick = "tab_close_mid_button";
DVALUE(bool) GUI::TabCloseMiddleClickDef = true;

View File

@ -117,6 +117,12 @@ namespace GUI {
KEY UseTrayIcon;
VALUE(bool) UseTrayIconDef;
KEY UseFancyNotifications;
VALUE(bool) UseFancyNotificationsDef;
KEY FancyNotificationsPosition;
VALUE(Qt::Corner) FancyNotificationsPositionDef;
KEY TabCloseMiddleClick;
VALUE(bool) TabCloseMiddleClickDef;

View File

@ -27,6 +27,26 @@
TextFactory::TextFactory() {
}
int TextFactory::stringHeight(const QString &string, const QFontMetrics &metrics) {
int count_lines = string.split(QL1C('\n')).size();
return metrics.height() * count_lines;
}
int TextFactory::stringWidth(const QString &string, const QFontMetrics &metrics) {
QStringList lines = string.split(QL1C('\n'));
int width = 0;
foreach (const QString &line, lines) {
int line_width = metrics.width(line);
if (line_width > width) {
width = line_width;
}
}
return width;
}
QDateTime TextFactory::parseDateTime(const QString &date_time) {
QString input_date = date_time.simplified();
QDateTime dt;

View File

@ -21,6 +21,7 @@
#include "definitions/definitions.h"
#include <QDateTime>
#include <QFontMetrics>
class TextFactory {
@ -34,6 +35,9 @@ class TextFactory {
return lhs.toLower() < rhs.toLower();
}
static int stringHeight(const QString &string, const QFontMetrics &metrics);
static int stringWidth(const QString &string, const QFontMetrics &metrics);
// Tries to parse input textual date/time representation.
// Returns invalid date/time if processing fails.
// NOTE: This method tries to always return time in UTC+00:00.