From 1d8f5f860d4be94c5d6afd14518b3dfc03608d33 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Wed, 27 Jul 2016 08:03:37 +0200 Subject: [PATCH] Work on settings panels, only few to go. --- rssguard.pro | 531 +++++++++++----------- src/gui/dialogs/formsettings.cpp | 17 +- src/gui/dialogs/formsettings.ui | 2 +- src/gui/settings/settingsdatabase.cpp | 158 ++++++- src/gui/settings/settingsdatabase.h | 10 +- src/gui/settings/settingsgeneral.cpp | 4 + src/gui/settings/settingsgui.cpp | 211 ++++++++- src/gui/settings/settingsgui.h | 22 +- src/gui/settings/settingslocalization.cpp | 74 ++- src/gui/settings/settingslocalization.h | 19 +- src/gui/settings/settingspanel.cpp | 17 +- src/gui/settings/settingspanel.h | 13 +- src/gui/settings/settingsshortcuts.cpp | 15 +- src/gui/settings/settingsshortcuts.h | 2 +- 14 files changed, 762 insertions(+), 333 deletions(-) diff --git a/rssguard.pro b/rssguard.pro index 0f7146574..72c2a4282 100755 --- a/rssguard.pro +++ b/rssguard.pro @@ -154,274 +154,273 @@ win32 { QMAKE_TARGET_PRODUCT = $$APP_NAME } -HEADERS += src/core/feeddownloader.h \ - src/core/feedsmodel.h \ - src/core/feedsproxymodel.h \ - src/core/message.h \ - src/core/messagesmodel.h \ - src/core/messagesproxymodel.h \ - src/core/parsingfactory.h \ - src/definitions/definitions.h \ - src/dynamic-shortcuts/dynamicshortcuts.h \ - src/dynamic-shortcuts/dynamicshortcutswidget.h \ - src/dynamic-shortcuts/shortcutbutton.h \ - src/dynamic-shortcuts/shortcutcatcher.h \ - src/exceptions/applicationexception.h \ - src/exceptions/ioexception.h \ - src/gui/baselineedit.h \ - src/gui/basetoolbar.h \ - src/gui/colorlabel.h \ - src/gui/comboboxwithstatus.h \ - src/gui/dialogs/formabout.h \ - src/gui/dialogs/formaddaccount.h \ - src/gui/dialogs/formbackupdatabasesettings.h \ - src/gui/dialogs/formdatabasecleanup.h \ - src/gui/dialogs/formmain.h \ - src/gui/dialogs/formrestoredatabasesettings.h \ - src/gui/dialogs/formsettings.h \ - src/gui/dialogs/formupdate.h \ - src/gui/edittableview.h \ - src/gui/feedmessageviewer.h \ - src/gui/feedstoolbar.h \ - src/gui/feedsview.h \ - src/gui/labelwithstatus.h \ - src/gui/lineeditwithstatus.h \ - src/gui/messagebox.h \ - src/gui/messagessearchlineedit.h \ - src/gui/messagestoolbar.h \ - src/gui/messagesview.h \ - src/gui/plaintoolbutton.h \ - src/gui/squeezelabel.h \ - src/gui/statusbar.h \ - src/gui/styleditemdelegatewithoutfocus.h \ - src/gui/systemtrayicon.h \ - src/gui/tabbar.h \ - src/gui/tabcontent.h \ - src/gui/tabwidget.h \ - src/gui/timespinbox.h \ - src/gui/toolbareditor.h \ - src/gui/widgetwithstatus.h \ - src/miscellaneous/application.h \ - src/miscellaneous/autosaver.h \ - src/miscellaneous/databasecleaner.h \ - src/miscellaneous/databasefactory.h \ - src/miscellaneous/databasequeries.h \ - src/miscellaneous/debugging.h \ - src/miscellaneous/iconfactory.h \ - src/miscellaneous/iofactory.h \ - src/miscellaneous/localization.h \ - src/miscellaneous/mutex.h \ - src/miscellaneous/settings.h \ - src/miscellaneous/settingsproperties.h \ - src/miscellaneous/simplecrypt/simplecrypt.h \ - src/miscellaneous/skinfactory.h \ - src/miscellaneous/systemfactory.h \ - src/miscellaneous/textfactory.h \ - src/network-web/basenetworkaccessmanager.h \ - src/network-web/downloader.h \ - src/network-web/downloadmanager.h \ - src/network-web/networkfactory.h \ - src/network-web/silentnetworkaccessmanager.h \ - src/network-web/webfactory.h \ - src/qtsingleapplication/qtlocalpeer.h \ - src/qtsingleapplication/qtlockedfile.h \ - src/qtsingleapplication/qtsingleapplication.h \ - src/qtsingleapplication/qtsinglecoreapplication.h \ - src/services/abstract/accountcheckmodel.h \ - src/services/abstract/category.h \ - src/services/abstract/feed.h \ - src/services/abstract/gui/formfeeddetails.h \ - src/services/abstract/recyclebin.h \ - src/services/abstract/rootitem.h \ - src/services/abstract/serviceentrypoint.h \ - src/services/abstract/serviceroot.h \ - src/services/owncloud/definitions.h \ - src/services/owncloud/gui/formeditowncloudaccount.h \ - src/services/owncloud/gui/formowncloudfeeddetails.h \ - src/services/owncloud/network/owncloudnetworkfactory.h \ - src/services/owncloud/owncloudcategory.h \ - src/services/owncloud/owncloudfeed.h \ - src/services/owncloud/owncloudrecyclebin.h \ - src/services/owncloud/owncloudserviceentrypoint.h \ - src/services/owncloud/owncloudserviceroot.h \ - src/services/standard/gui/formstandardcategorydetails.h \ - src/services/standard/gui/formstandardfeeddetails.h \ - src/services/standard/gui/formstandardimportexport.h \ - src/services/standard/standardcategory.h \ - src/services/standard/standardfeed.h \ - src/services/standard/standardfeedsimportexportmodel.h \ - src/services/standard/standardserviceentrypoint.h \ - src/services/standard/standardserviceroot.h \ - src/services/tt-rss/definitions.h \ - src/services/tt-rss/gui/formeditaccount.h \ - src/services/tt-rss/gui/formttrssfeeddetails.h \ - src/services/tt-rss/network/ttrssnetworkfactory.h \ - src/services/tt-rss/ttrsscategory.h \ - src/services/tt-rss/ttrssfeed.h \ - src/services/tt-rss/ttrssrecyclebin.h \ - src/services/tt-rss/ttrssserviceentrypoint.h \ - src/services/tt-rss/ttrssserviceroot.h \ - src/gui/webviewer.h \ - src/gui/webbrowser.h \ - src/network-web/webpage.h \ - src/gui/locationlineedit.h \ - src/network-web/googlesuggest.h \ - src/gui/discoverfeedsbutton.h \ - src/gui/settings/settingspanel.h \ - src/gui/settings/settingsgeneral.h \ - src/gui/settings/settingsdatabase.h \ - src/gui/settings/settingsshortcuts.h \ - src/gui/settings/settingsgui.h \ - src/gui/settings/settingslocalization.h \ - src/gui/settings/settingsbrowsermail.h \ - src/gui/settings/settingsfeedsmessages.h \ - src/gui/settings/settingsdownloads.h +HEADERS += src/core/feeddownloader.h \ + src/core/feedsmodel.h \ + src/core/feedsproxymodel.h \ + src/core/message.h \ + src/core/messagesmodel.h \ + src/core/messagesproxymodel.h \ + src/core/parsingfactory.h \ + src/definitions/definitions.h \ + src/dynamic-shortcuts/dynamicshortcuts.h \ + src/dynamic-shortcuts/dynamicshortcutswidget.h \ + src/dynamic-shortcuts/shortcutbutton.h \ + src/dynamic-shortcuts/shortcutcatcher.h \ + src/exceptions/applicationexception.h \ + src/exceptions/ioexception.h \ + src/gui/baselineedit.h \ + src/gui/basetoolbar.h \ + src/gui/colorlabel.h \ + src/gui/comboboxwithstatus.h \ + src/gui/dialogs/formabout.h \ + src/gui/dialogs/formaddaccount.h \ + src/gui/dialogs/formbackupdatabasesettings.h \ + src/gui/dialogs/formdatabasecleanup.h \ + src/gui/dialogs/formmain.h \ + src/gui/dialogs/formrestoredatabasesettings.h \ + src/gui/dialogs/formsettings.h \ + src/gui/dialogs/formupdate.h \ + src/gui/edittableview.h \ + src/gui/feedmessageviewer.h \ + src/gui/feedstoolbar.h \ + src/gui/feedsview.h \ + src/gui/labelwithstatus.h \ + src/gui/lineeditwithstatus.h \ + src/gui/messagebox.h \ + src/gui/messagessearchlineedit.h \ + src/gui/messagestoolbar.h \ + src/gui/messagesview.h \ + src/gui/plaintoolbutton.h \ + src/gui/squeezelabel.h \ + src/gui/statusbar.h \ + src/gui/styleditemdelegatewithoutfocus.h \ + src/gui/systemtrayicon.h \ + src/gui/tabbar.h \ + src/gui/tabcontent.h \ + src/gui/tabwidget.h \ + src/gui/timespinbox.h \ + src/gui/toolbareditor.h \ + src/gui/widgetwithstatus.h \ + src/miscellaneous/application.h \ + src/miscellaneous/autosaver.h \ + src/miscellaneous/databasecleaner.h \ + src/miscellaneous/databasefactory.h \ + src/miscellaneous/databasequeries.h \ + src/miscellaneous/debugging.h \ + src/miscellaneous/iconfactory.h \ + src/miscellaneous/iofactory.h \ + src/miscellaneous/localization.h \ + src/miscellaneous/mutex.h \ + src/miscellaneous/settings.h \ + src/miscellaneous/settingsproperties.h \ + src/miscellaneous/simplecrypt/simplecrypt.h \ + src/miscellaneous/skinfactory.h \ + src/miscellaneous/systemfactory.h \ + src/miscellaneous/textfactory.h \ + src/network-web/basenetworkaccessmanager.h \ + src/network-web/downloader.h \ + src/network-web/downloadmanager.h \ + src/network-web/networkfactory.h \ + src/network-web/silentnetworkaccessmanager.h \ + src/network-web/webfactory.h \ + src/qtsingleapplication/qtlocalpeer.h \ + src/qtsingleapplication/qtlockedfile.h \ + src/qtsingleapplication/qtsingleapplication.h \ + src/qtsingleapplication/qtsinglecoreapplication.h \ + src/services/abstract/accountcheckmodel.h \ + src/services/abstract/category.h \ + src/services/abstract/feed.h \ + src/services/abstract/gui/formfeeddetails.h \ + src/services/abstract/recyclebin.h \ + src/services/abstract/rootitem.h \ + src/services/abstract/serviceentrypoint.h \ + src/services/abstract/serviceroot.h \ + src/services/owncloud/definitions.h \ + src/services/owncloud/gui/formeditowncloudaccount.h \ + src/services/owncloud/gui/formowncloudfeeddetails.h \ + src/services/owncloud/network/owncloudnetworkfactory.h \ + src/services/owncloud/owncloudcategory.h \ + src/services/owncloud/owncloudfeed.h \ + src/services/owncloud/owncloudrecyclebin.h \ + src/services/owncloud/owncloudserviceentrypoint.h \ + src/services/owncloud/owncloudserviceroot.h \ + src/services/standard/gui/formstandardcategorydetails.h \ + src/services/standard/gui/formstandardfeeddetails.h \ + src/services/standard/gui/formstandardimportexport.h \ + src/services/standard/standardcategory.h \ + src/services/standard/standardfeed.h \ + src/services/standard/standardfeedsimportexportmodel.h \ + src/services/standard/standardserviceentrypoint.h \ + src/services/standard/standardserviceroot.h \ + src/services/tt-rss/definitions.h \ + src/services/tt-rss/gui/formeditaccount.h \ + src/services/tt-rss/gui/formttrssfeeddetails.h \ + src/services/tt-rss/network/ttrssnetworkfactory.h \ + src/services/tt-rss/ttrsscategory.h \ + src/services/tt-rss/ttrssfeed.h \ + src/services/tt-rss/ttrssrecyclebin.h \ + src/services/tt-rss/ttrssserviceentrypoint.h \ + src/services/tt-rss/ttrssserviceroot.h \ + src/gui/webviewer.h \ + src/gui/webbrowser.h \ + src/network-web/webpage.h \ + src/gui/locationlineedit.h \ + src/network-web/googlesuggest.h \ + src/gui/discoverfeedsbutton.h \ + src/gui/settings/settingspanel.h \ + src/gui/settings/settingsgeneral.h \ + src/gui/settings/settingsdatabase.h \ + src/gui/settings/settingsshortcuts.h \ + src/gui/settings/settingsgui.h \ + src/gui/settings/settingslocalization.h \ + src/gui/settings/settingsbrowsermail.h \ + src/gui/settings/settingsfeedsmessages.h \ + src/gui/settings/settingsdownloads.h -SOURCES += src/core/feeddownloader.cpp \ - src/core/feedsmodel.cpp \ - src/core/feedsproxymodel.cpp \ - src/core/message.cpp \ - src/core/messagesmodel.cpp \ - src/core/messagesproxymodel.cpp \ - src/core/parsingfactory.cpp \ - src/dynamic-shortcuts/dynamicshortcuts.cpp \ - src/dynamic-shortcuts/dynamicshortcutswidget.cpp \ - src/dynamic-shortcuts/shortcutbutton.cpp \ - src/dynamic-shortcuts/shortcutcatcher.cpp \ - src/exceptions/applicationexception.cpp \ - src/exceptions/ioexception.cpp \ - src/gui/baselineedit.cpp \ - src/gui/basetoolbar.cpp \ - src/gui/colorlabel.cpp \ - src/gui/comboboxwithstatus.cpp \ - src/gui/dialogs/formabout.cpp \ - src/gui/dialogs/formaddaccount.cpp \ - src/gui/dialogs/formbackupdatabasesettings.cpp \ - src/gui/dialogs/formdatabasecleanup.cpp \ - src/gui/dialogs/formmain.cpp \ - src/gui/dialogs/formrestoredatabasesettings.cpp \ - src/gui/dialogs/formsettings.cpp \ - src/gui/dialogs/formupdate.cpp \ - src/gui/edittableview.cpp \ - src/gui/feedmessageviewer.cpp \ - src/gui/feedstoolbar.cpp \ - src/gui/feedsview.cpp \ - src/gui/labelwithstatus.cpp \ - src/gui/lineeditwithstatus.cpp \ - src/gui/messagebox.cpp \ - src/gui/messagessearchlineedit.cpp \ - src/gui/messagestoolbar.cpp \ - src/gui/messagesview.cpp \ - src/gui/plaintoolbutton.cpp \ - src/gui/squeezelabel.cpp \ - src/gui/statusbar.cpp \ - src/gui/styleditemdelegatewithoutfocus.cpp \ - src/gui/systemtrayicon.cpp \ - src/gui/tabbar.cpp \ - src/gui/tabcontent.cpp \ - src/gui/tabwidget.cpp \ - src/gui/timespinbox.cpp \ - src/gui/toolbareditor.cpp \ - src/gui/widgetwithstatus.cpp \ - src/main.cpp \ - src/miscellaneous/application.cpp \ - src/miscellaneous/autosaver.cpp \ - src/miscellaneous/databasecleaner.cpp \ - src/miscellaneous/databasefactory.cpp \ - src/miscellaneous/databasequeries.cpp \ - src/miscellaneous/debugging.cpp \ - src/miscellaneous/iconfactory.cpp \ - src/miscellaneous/iofactory.cpp \ - src/miscellaneous/localization.cpp \ - src/miscellaneous/mutex.cpp \ - src/miscellaneous/settings.cpp \ - src/miscellaneous/simplecrypt/simplecrypt.cpp \ - src/miscellaneous/skinfactory.cpp \ - src/miscellaneous/systemfactory.cpp \ - src/miscellaneous/textfactory.cpp \ - src/network-web/basenetworkaccessmanager.cpp \ - src/network-web/downloader.cpp \ - src/network-web/downloadmanager.cpp \ - src/network-web/networkfactory.cpp \ - src/network-web/silentnetworkaccessmanager.cpp \ - src/network-web/webfactory.cpp \ - src/qtsingleapplication/qtlocalpeer.cpp \ - src/qtsingleapplication/qtlockedfile.cpp \ - src/qtsingleapplication/qtsingleapplication.cpp \ - src/qtsingleapplication/qtsinglecoreapplication.cpp \ - src/services/abstract/accountcheckmodel.cpp \ - src/services/abstract/category.cpp \ - src/services/abstract/feed.cpp \ - src/services/abstract/gui/formfeeddetails.cpp \ - src/services/abstract/recyclebin.cpp \ - src/services/abstract/rootitem.cpp \ - src/services/abstract/serviceentrypoint.cpp \ - src/services/abstract/serviceroot.cpp \ - src/services/owncloud/gui/formeditowncloudaccount.cpp \ - src/services/owncloud/gui/formowncloudfeeddetails.cpp \ - src/services/owncloud/network/owncloudnetworkfactory.cpp \ - src/services/owncloud/owncloudcategory.cpp \ - src/services/owncloud/owncloudfeed.cpp \ - src/services/owncloud/owncloudrecyclebin.cpp \ - src/services/owncloud/owncloudserviceentrypoint.cpp \ - src/services/owncloud/owncloudserviceroot.cpp \ - src/services/standard/gui/formstandardcategorydetails.cpp \ - src/services/standard/gui/formstandardfeeddetails.cpp \ - src/services/standard/gui/formstandardimportexport.cpp \ - src/services/standard/standardcategory.cpp \ - src/services/standard/standardfeed.cpp \ - src/services/standard/standardfeedsimportexportmodel.cpp \ - src/services/standard/standardserviceentrypoint.cpp \ - src/services/standard/standardserviceroot.cpp \ - src/services/tt-rss/gui/formeditaccount.cpp \ - src/services/tt-rss/gui/formttrssfeeddetails.cpp \ - src/services/tt-rss/network/ttrssnetworkfactory.cpp \ - src/services/tt-rss/ttrsscategory.cpp \ - src/services/tt-rss/ttrssfeed.cpp \ - src/services/tt-rss/ttrssrecyclebin.cpp \ - src/services/tt-rss/ttrssserviceentrypoint.cpp \ - src/services/tt-rss/ttrssserviceroot.cpp \ - src/gui/webviewer.cpp \ - src/gui/webbrowser.cpp \ - src/network-web/webpage.cpp \ - src/gui/locationlineedit.cpp \ - src/network-web/googlesuggest.cpp \ - src/gui/discoverfeedsbutton.cpp \ - src/gui/settings/settingspanel.cpp \ - src/gui/settings/settingsgeneral.cpp \ - src/gui/settings/settingsdatabase.cpp \ - src/gui/settings/settingsshortcuts.cpp \ - src/gui/settings/settingsgui.cpp \ - src/gui/settings/settingslocalization.cpp \ - src/gui/settings/settingsbrowsermail.cpp \ - src/gui/settings/settingsfeedsmessages.cpp \ - src/gui/settings/settingsdownloads.cpp +SOURCES += src/core/feeddownloader.cpp \ + src/core/feedsmodel.cpp \ + src/core/feedsproxymodel.cpp \ + src/core/message.cpp \ + src/core/messagesmodel.cpp \ + src/core/messagesproxymodel.cpp \ + src/core/parsingfactory.cpp \ + src/dynamic-shortcuts/dynamicshortcuts.cpp \ + src/dynamic-shortcuts/dynamicshortcutswidget.cpp \ + src/dynamic-shortcuts/shortcutbutton.cpp \ + src/dynamic-shortcuts/shortcutcatcher.cpp \ + src/exceptions/applicationexception.cpp \ + src/exceptions/ioexception.cpp \ + src/gui/baselineedit.cpp \ + src/gui/basetoolbar.cpp \ + src/gui/colorlabel.cpp \ + src/gui/comboboxwithstatus.cpp \ + src/gui/dialogs/formabout.cpp \ + src/gui/dialogs/formaddaccount.cpp \ + src/gui/dialogs/formbackupdatabasesettings.cpp \ + src/gui/dialogs/formdatabasecleanup.cpp \ + src/gui/dialogs/formmain.cpp \ + src/gui/dialogs/formrestoredatabasesettings.cpp \ + src/gui/dialogs/formsettings.cpp \ + src/gui/dialogs/formupdate.cpp \ + src/gui/edittableview.cpp \ + src/gui/feedmessageviewer.cpp \ + src/gui/feedstoolbar.cpp \ + src/gui/feedsview.cpp \ + src/gui/labelwithstatus.cpp \ + src/gui/lineeditwithstatus.cpp \ + src/gui/messagebox.cpp \ + src/gui/messagessearchlineedit.cpp \ + src/gui/messagestoolbar.cpp \ + src/gui/messagesview.cpp \ + src/gui/plaintoolbutton.cpp \ + src/gui/squeezelabel.cpp \ + src/gui/statusbar.cpp \ + src/gui/styleditemdelegatewithoutfocus.cpp \ + src/gui/systemtrayicon.cpp \ + src/gui/tabbar.cpp \ + src/gui/tabcontent.cpp \ + src/gui/tabwidget.cpp \ + src/gui/timespinbox.cpp \ + src/gui/toolbareditor.cpp \ + src/gui/widgetwithstatus.cpp \ + src/main.cpp \ + src/miscellaneous/application.cpp \ + src/miscellaneous/autosaver.cpp \ + src/miscellaneous/databasecleaner.cpp \ + src/miscellaneous/databasefactory.cpp \ + src/miscellaneous/databasequeries.cpp \ + src/miscellaneous/debugging.cpp \ + src/miscellaneous/iconfactory.cpp \ + src/miscellaneous/iofactory.cpp \ + src/miscellaneous/localization.cpp \ + src/miscellaneous/mutex.cpp \ + src/miscellaneous/settings.cpp \ + src/miscellaneous/simplecrypt/simplecrypt.cpp \ + src/miscellaneous/skinfactory.cpp \ + src/miscellaneous/systemfactory.cpp \ + src/miscellaneous/textfactory.cpp \ + src/network-web/basenetworkaccessmanager.cpp \ + src/network-web/downloader.cpp \ + src/network-web/downloadmanager.cpp \ + src/network-web/networkfactory.cpp \ + src/network-web/silentnetworkaccessmanager.cpp \ + src/network-web/webfactory.cpp \ + src/qtsingleapplication/qtlocalpeer.cpp \ + src/qtsingleapplication/qtlockedfile.cpp \ + src/qtsingleapplication/qtsingleapplication.cpp \ + src/qtsingleapplication/qtsinglecoreapplication.cpp \ + src/services/abstract/accountcheckmodel.cpp \ + src/services/abstract/category.cpp \ + src/services/abstract/feed.cpp \ + src/services/abstract/gui/formfeeddetails.cpp \ + src/services/abstract/recyclebin.cpp \ + src/services/abstract/rootitem.cpp \ + src/services/abstract/serviceentrypoint.cpp \ + src/services/abstract/serviceroot.cpp \ + src/services/owncloud/gui/formeditowncloudaccount.cpp \ + src/services/owncloud/gui/formowncloudfeeddetails.cpp \ + src/services/owncloud/network/owncloudnetworkfactory.cpp \ + src/services/owncloud/owncloudcategory.cpp \ + src/services/owncloud/owncloudfeed.cpp \ + src/services/owncloud/owncloudrecyclebin.cpp \ + src/services/owncloud/owncloudserviceentrypoint.cpp \ + src/services/owncloud/owncloudserviceroot.cpp \ + src/services/standard/gui/formstandardcategorydetails.cpp \ + src/services/standard/gui/formstandardfeeddetails.cpp \ + src/services/standard/gui/formstandardimportexport.cpp \ + src/services/standard/standardcategory.cpp \ + src/services/standard/standardfeed.cpp \ + src/services/standard/standardfeedsimportexportmodel.cpp \ + src/services/standard/standardserviceentrypoint.cpp \ + src/services/standard/standardserviceroot.cpp \ + src/services/tt-rss/gui/formeditaccount.cpp \ + src/services/tt-rss/gui/formttrssfeeddetails.cpp \ + src/services/tt-rss/network/ttrssnetworkfactory.cpp \ + src/services/tt-rss/ttrsscategory.cpp \ + src/services/tt-rss/ttrssfeed.cpp \ + src/services/tt-rss/ttrssrecyclebin.cpp \ + src/services/tt-rss/ttrssserviceentrypoint.cpp \ + src/services/tt-rss/ttrssserviceroot.cpp \ + src/gui/webviewer.cpp \ + src/gui/webbrowser.cpp \ + src/network-web/webpage.cpp \ + src/gui/locationlineedit.cpp \ + src/network-web/googlesuggest.cpp \ + src/gui/discoverfeedsbutton.cpp \ + src/gui/settings/settingspanel.cpp \ + src/gui/settings/settingsgeneral.cpp \ + src/gui/settings/settingsdatabase.cpp \ + src/gui/settings/settingsshortcuts.cpp \ + src/gui/settings/settingsgui.cpp \ + src/gui/settings/settingslocalization.cpp \ + src/gui/settings/settingsbrowsermail.cpp \ + src/gui/settings/settingsfeedsmessages.cpp \ + src/gui/settings/settingsdownloads.cpp -FORMS += \ - src/gui/toolbareditor.ui \ - src/network-web/downloaditem.ui \ - src/network-web/downloadmanager.ui \ - src/gui/dialogs/formabout.ui \ - src/gui/dialogs/formaddaccount.ui \ - src/gui/dialogs/formbackupdatabasesettings.ui \ - src/gui/dialogs/formdatabasecleanup.ui \ - src/gui/dialogs/formmain.ui \ - src/gui/dialogs/formrestoredatabasesettings.ui \ - src/gui/dialogs/formsettings.ui \ - src/gui/dialogs/formupdate.ui \ - src/services/abstract/gui/formfeeddetails.ui \ - src/services/owncloud/gui/formeditowncloudaccount.ui \ - src/services/standard/gui/formstandardcategorydetails.ui \ - src/services/standard/gui/formstandardimportexport.ui \ - src/services/tt-rss/gui/formeditaccount.ui \ - src/gui/settings/settingsgeneral.ui \ - src/gui/settings/settingsdatabase.ui \ - src/gui/settings/settingsshortcuts.ui \ - src/gui/settings/settingsgui.ui \ - src/gui/settings/settingslocalization.ui \ - src/gui/settings/settingsbrowsermail.ui \ - src/gui/settings/settingsfeedsmessages.ui \ - src/gui/settings/settingsdownloads.ui +FORMS += src/gui/toolbareditor.ui \ + src/network-web/downloaditem.ui \ + src/network-web/downloadmanager.ui \ + src/gui/dialogs/formabout.ui \ + src/gui/dialogs/formaddaccount.ui \ + src/gui/dialogs/formbackupdatabasesettings.ui \ + src/gui/dialogs/formdatabasecleanup.ui \ + src/gui/dialogs/formmain.ui \ + src/gui/dialogs/formrestoredatabasesettings.ui \ + src/gui/dialogs/formsettings.ui \ + src/gui/dialogs/formupdate.ui \ + src/services/abstract/gui/formfeeddetails.ui \ + src/services/owncloud/gui/formeditowncloudaccount.ui \ + src/services/standard/gui/formstandardcategorydetails.ui \ + src/services/standard/gui/formstandardimportexport.ui \ + src/services/tt-rss/gui/formeditaccount.ui \ + src/gui/settings/settingsgeneral.ui \ + src/gui/settings/settingsdatabase.ui \ + src/gui/settings/settingsshortcuts.ui \ + src/gui/settings/settingsgui.ui \ + src/gui/settings/settingslocalization.ui \ + src/gui/settings/settingsbrowsermail.ui \ + src/gui/settings/settingsfeedsmessages.ui \ + src/gui/settings/settingsdownloads.ui TRANSLATIONS += localization/qtbase-cs.ts \ localization/qtbase-da.ts \ diff --git a/src/gui/dialogs/formsettings.cpp b/src/gui/dialogs/formsettings.cpp index 31367be0a..d51b27927 100755 --- a/src/gui/dialogs/formsettings.cpp +++ b/src/gui/dialogs/formsettings.cpp @@ -96,28 +96,19 @@ FormSettings::FormSettings(QWidget *parent) : QDialog(parent), m_ui(new Ui::Form // Establish needed connections. connect(m_ui->m_buttonBox, SIGNAL(accepted()), this, SLOT(saveSettings())); + connect(m_ui->m_cmbProxyType, SIGNAL(currentIndexChanged(int)), this, SLOT(onProxyTypeChanged(int))); connect(m_ui->m_checkShowPassword, SIGNAL(stateChanged(int)), this, SLOT(displayProxyPassword(int))); - connect(m_ui->m_treeSkins, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(onSkinSelected(QTreeWidgetItem*,QTreeWidgetItem*))); connect(m_ui->m_cmbExternalBrowserPreset, SIGNAL(currentIndexChanged(int)), this, SLOT(changeDefaultBrowserArguments(int))); connect(m_ui->m_btnExternalBrowserExecutable, SIGNAL(clicked()), this, SLOT(selectBrowserExecutable())); connect(m_ui->m_cmbExternalEmailPreset, SIGNAL(currentIndexChanged(int)), this, SLOT(changeDefaultEmailArguments(int))); connect(m_ui->m_btnExternalEmailExecutable, SIGNAL(clicked()), this, SLOT(selectEmailExecutable())); - connect(m_ui->m_txtMysqlUsername->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlUsernameChanged(QString))); - connect(m_ui->m_txtMysqlHostname->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlHostnameChanged(QString))); - connect(m_ui->m_txtMysqlPassword->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlPasswordChanged(QString))); - connect(m_ui->m_txtMysqlDatabase->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(onMysqlDatabaseChanged(QString))); - connect(m_ui->m_btnMysqlTestSetup, SIGNAL(clicked()), this, SLOT(mysqlTestConnection())); - connect(m_ui->m_spinMysqlPort, SIGNAL(editingFinished()), this, SLOT(onMysqlDataStorageEdited())); - connect(m_ui->m_txtMysqlHostname->lineEdit(), SIGNAL(textEdited(QString)), this, SLOT(onMysqlDataStorageEdited())); - connect(m_ui->m_txtMysqlPassword->lineEdit(), SIGNAL(textEdited(QString)), this, SLOT(onMysqlDataStorageEdited())); - connect(m_ui->m_txtMysqlUsername->lineEdit(), SIGNAL(textEdited(QString)), this, SLOT(onMysqlDataStorageEdited())); - connect(m_ui->m_cmbSelectToolBar, SIGNAL(currentIndexChanged(int)), m_ui->m_stackedToolbars, SLOT(setCurrentIndex(int))); - connect(m_ui->m_cmbDatabaseDriver, SIGNAL(currentIndexChanged(int)), this, SLOT(selectSqlBackend(int))); + connect(m_ui->m_btnDownloadsTargetDirectory, SIGNAL(clicked()), this, SLOT(selectDownloadsDirectory())); - connect(m_ui->m_checkMysqlShowPassword, SIGNAL(toggled(bool)), this, SLOT(switchMysqlPasswordVisiblity(bool))); + connect(m_ui->m_btnChangeMessagesFont, SIGNAL(clicked()), this, SLOT(changeMessagesFont())); + // Load all settings. loadGeneral(); loadDataStorage(); diff --git a/src/gui/dialogs/formsettings.ui b/src/gui/dialogs/formsettings.ui index 48607423c..e30a1d633 100755 --- a/src/gui/dialogs/formsettings.ui +++ b/src/gui/dialogs/formsettings.ui @@ -88,7 +88,7 @@ - 7 + 4 diff --git a/src/gui/settings/settingsdatabase.cpp b/src/gui/settings/settingsdatabase.cpp index 8a4820e71..c9b495e1a 100755 --- a/src/gui/settings/settingsdatabase.cpp +++ b/src/gui/settings/settingsdatabase.cpp @@ -1,18 +1,147 @@ #include "gui/settings/settingsdatabase.h" +#include "miscellaneous/databasefactory.h" +#include "definitions/definitions.h" +#include "miscellaneous/application.h" +#include "miscellaneous/textfactory.h" -SettingsDatabase::SettingsDatabase(QWidget *parent) - : QWidget(parent), m_ui(new Ui::SettingsDatabase) { + +SettingsDatabase::SettingsDatabase(Settings *settings, QWidget *parent) + : SettingsPanel(settings, parent), m_ui(new Ui::SettingsDatabase) { m_ui->setupUi(this); + + connect(m_ui->m_cmbDatabaseDriver, static_cast(&QComboBox::currentIndexChanged), this, &SettingsDatabase::selectSqlBackend); + connect(m_ui->m_checkMysqlShowPassword, &QCheckBox::toggled, this, &SettingsDatabase::switchMysqlPasswordVisiblity); + connect(m_ui->m_txtMysqlUsername->lineEdit(), &BaseLineEdit::textChanged, this, &SettingsDatabase::onMysqlUsernameChanged); + connect(m_ui->m_txtMysqlHostname->lineEdit(), &BaseLineEdit::textChanged, this, &SettingsDatabase::onMysqlHostnameChanged); + connect(m_ui->m_txtMysqlPassword->lineEdit(), &BaseLineEdit::textChanged, this, &SettingsDatabase::onMysqlPasswordChanged); + connect(m_ui->m_txtMysqlDatabase->lineEdit(), &BaseLineEdit::textChanged, this, &SettingsDatabase::onMysqlDatabaseChanged); + connect(m_ui->m_btnMysqlTestSetup, &QPushButton::clicked, this, &SettingsDatabase::mysqlTestConnection); + connect(m_ui->m_spinMysqlPort, &QSpinBox::editingFinished, this, &SettingsDatabase::requireRestart); + connect(m_ui->m_txtMysqlHostname->lineEdit(), &BaseLineEdit::textEdited, this, &SettingsDatabase::requireRestart); + connect(m_ui->m_txtMysqlPassword->lineEdit(), &BaseLineEdit::textEdited, this, &SettingsDatabase::requireRestart); + connect(m_ui->m_txtMysqlUsername->lineEdit(), &BaseLineEdit::textEdited, this, &SettingsDatabase::requireRestart); } SettingsDatabase::~SettingsDatabase() { delete m_ui; } +void SettingsDatabase::mysqlTestConnection() { + const DatabaseFactory::MySQLError error_code = qApp->database()->mysqlTestConnection(m_ui->m_txtMysqlHostname->lineEdit()->text(), + m_ui->m_spinMysqlPort->value(), + m_ui->m_txtMysqlDatabase->lineEdit()->text(), + m_ui->m_txtMysqlUsername->lineEdit()->text(), + m_ui->m_txtMysqlPassword->lineEdit()->text()); + const QString interpretation = qApp->database()->mysqlInterpretErrorCode(error_code); + + + switch (error_code) { + case DatabaseFactory::MySQLOk: + case DatabaseFactory::MySQLUnknownDatabase: + m_ui->m_lblMysqlTestResult->setStatus(WidgetWithStatus::Ok, interpretation, interpretation); + break; + + default: + m_ui->m_lblMysqlTestResult->setStatus(WidgetWithStatus::Error, interpretation, interpretation); + break; + } +} + +void SettingsDatabase::onMysqlHostnameChanged(const QString &new_hostname) { + if (new_hostname.isEmpty()) { + m_ui->m_txtMysqlHostname->setStatus(LineEditWithStatus::Warning, tr("Hostname is empty.")); + } + else { + m_ui->m_txtMysqlHostname->setStatus(LineEditWithStatus::Ok, tr("Hostname looks ok.")); + } +} + +void SettingsDatabase::onMysqlUsernameChanged(const QString &new_username) { + if (new_username.isEmpty()) { + m_ui->m_txtMysqlUsername->setStatus(LineEditWithStatus::Warning, tr("Username is empty.")); + } + else { + m_ui->m_txtMysqlUsername->setStatus(LineEditWithStatus::Ok, tr("Username looks ok.")); + } +} + +void SettingsDatabase::onMysqlPasswordChanged(const QString &new_password) { + if (new_password.isEmpty()) { + m_ui->m_txtMysqlPassword->setStatus(LineEditWithStatus::Warning, tr("Password is empty.")); + } + else { + m_ui->m_txtMysqlPassword->setStatus(LineEditWithStatus::Ok, tr("Password looks ok.")); + } +} + +void SettingsDatabase::onMysqlDatabaseChanged(const QString &new_database) { + if (new_database.isEmpty()) { + m_ui->m_txtMysqlDatabase->setStatus(LineEditWithStatus::Warning, tr("Working database is empty.")); + } + else { + m_ui->m_txtMysqlDatabase->setStatus(LineEditWithStatus::Ok, tr("Working database is ok.")); + } +} + +void SettingsDatabase::selectSqlBackend(int index) { + const QString selected_db_driver = m_ui->m_cmbDatabaseDriver->itemData(index).toString(); + + if (selected_db_driver == APP_DB_SQLITE_DRIVER) { + m_ui->m_stackedDatabaseDriver->setCurrentIndex(0); + } + else if (selected_db_driver == APP_DB_MYSQL_DRIVER) { + m_ui->m_stackedDatabaseDriver->setCurrentIndex(1); + } + else { + qWarning("GUI for given database driver '%s' is not available.", qPrintable(selected_db_driver)); + } +} + +void SettingsDatabase::switchMysqlPasswordVisiblity(bool visible) { + m_ui->m_txtMysqlPassword->lineEdit()->setEchoMode(visible ? QLineEdit::Normal : QLineEdit::Password); +} + void SettingsDatabase::loadSettings() { onBeginLoadSettings(); + m_ui->m_lblMysqlTestResult->setStatus(WidgetWithStatus::Information, tr("No connection test triggered so far."), tr("You did not executed any connection test yet.")); + + // Load SQLite. + m_ui->m_cmbDatabaseDriver->addItem(qApp->database()->humanDriverName(DatabaseFactory::SQLITE), APP_DB_SQLITE_DRIVER); + + // Load in-memory database status. + m_ui->m_checkSqliteUseInMemoryDatabase->setChecked(settings()->value(GROUP(Database), SETTING(Database::UseInMemory)).toBool()); + + if (QSqlDatabase::isDriverAvailable(APP_DB_MYSQL_DRIVER)) { + onMysqlHostnameChanged(QString()); + onMysqlUsernameChanged(QString()); + onMysqlPasswordChanged(QString()); + onMysqlDatabaseChanged(QString()); + + // Load MySQL. + m_ui->m_cmbDatabaseDriver->addItem(qApp->database()->humanDriverName(DatabaseFactory::MYSQL), APP_DB_MYSQL_DRIVER); + + // Setup placeholders. + m_ui->m_txtMysqlHostname->lineEdit()->setPlaceholderText(tr("Hostname of your MySQL server")); + m_ui->m_txtMysqlUsername->lineEdit()->setPlaceholderText(tr("Username to login with")); + m_ui->m_txtMysqlPassword->lineEdit()->setPlaceholderText(tr("Password for your username")); + m_ui->m_txtMysqlDatabase->lineEdit()->setPlaceholderText(tr("Working database which you have full access to.")); + + m_ui->m_txtMysqlHostname->lineEdit()->setText(settings()->value(GROUP(Database), SETTING(Database::MySQLHostname)).toString()); + m_ui->m_txtMysqlUsername->lineEdit()->setText(settings()->value(GROUP(Database), SETTING(Database::MySQLUsername)).toString()); + m_ui->m_txtMysqlPassword->lineEdit()->setText(TextFactory::decrypt(settings()->value(GROUP(Database), SETTING(Database::MySQLPassword)).toString())); + m_ui->m_txtMysqlDatabase->lineEdit()->setText(settings()->value(GROUP(Database), SETTING(Database::MySQLDatabase)).toString()); + m_ui->m_spinMysqlPort->setValue(settings()->value(GROUP(Database), SETTING(Database::MySQLPort)).toInt()); + + m_ui->m_checkMysqlShowPassword->setChecked(false); + } + + int index_current_backend = m_ui->m_cmbDatabaseDriver->findData(settings()->value(GROUP(Database), SETTING(Database::ActiveDriver)).toString()); + + if (index_current_backend >= 0) { + m_ui->m_cmbDatabaseDriver->setCurrentIndex(index_current_backend); + } onEndLoadSettings(); } @@ -20,6 +149,31 @@ void SettingsDatabase::loadSettings() { void SettingsDatabase::saveSettings() { onBeginSaveSettings(); + // Setup in-memory database status. + const bool original_inmemory = settings()->value(GROUP(Database), SETTING(Database::UseInMemory)).toBool(); + const bool new_inmemory = m_ui->m_checkSqliteUseInMemoryDatabase->isChecked(); + + // Save data storage settings. + QString original_db_driver = settings()->value(GROUP(Database), SETTING(Database::ActiveDriver)).toString(); + QString selected_db_driver = m_ui->m_cmbDatabaseDriver->itemData(m_ui->m_cmbDatabaseDriver->currentIndex()).toString(); + + // Save SQLite. + settings()->setValue(GROUP(Database), Database::UseInMemory, new_inmemory); + + if (QSqlDatabase::isDriverAvailable(APP_DB_MYSQL_DRIVER)) { + // Save MySQL. + settings()->setValue(GROUP(Database), Database::MySQLHostname, m_ui->m_txtMysqlHostname->lineEdit()->text()); + settings()->setValue(GROUP(Database), Database::MySQLUsername, m_ui->m_txtMysqlUsername->lineEdit()->text()); + settings()->setValue(GROUP(Database), Database::MySQLPassword, TextFactory::encrypt(m_ui->m_txtMysqlPassword->lineEdit()->text())); + settings()->setValue(GROUP(Database), Database::MySQLDatabase, m_ui->m_txtMysqlDatabase->lineEdit()->text()); + settings()->setValue(GROUP(Database), Database::MySQLPort, m_ui->m_spinMysqlPort->value()); + } + + settings()->setValue(GROUP(Database), Database::ActiveDriver, selected_db_driver); + + if (original_db_driver != selected_db_driver || original_inmemory != new_inmemory) { + requireRestart(); + } onEndSaveSettings(); } diff --git a/src/gui/settings/settingsdatabase.h b/src/gui/settings/settingsdatabase.h index b0c3c33a6..9bd420799 100755 --- a/src/gui/settings/settingsdatabase.h +++ b/src/gui/settings/settingsdatabase.h @@ -10,13 +10,21 @@ class SettingsDatabase : public SettingsPanel { Q_OBJECT public: - explicit SettingsDatabase(QWidget *parent = 0); + explicit SettingsDatabase(Settings *settings, QWidget *parent = 0); virtual ~SettingsDatabase(); void loadSettings(); void saveSettings(); private: + void mysqlTestConnection(); + void onMysqlHostnameChanged(const QString &new_hostname); + void onMysqlUsernameChanged(const QString &new_username); + void onMysqlPasswordChanged(const QString &new_password); + void onMysqlDatabaseChanged(const QString &new_database); + void selectSqlBackend(int index); + void switchMysqlPasswordVisiblity(bool visible); + Ui::SettingsDatabase *m_ui; }; diff --git a/src/gui/settings/settingsgeneral.cpp b/src/gui/settings/settingsgeneral.cpp index 961cfdb13..275fd7589 100755 --- a/src/gui/settings/settingsgeneral.cpp +++ b/src/gui/settings/settingsgeneral.cpp @@ -25,6 +25,10 @@ SettingsGeneral::SettingsGeneral(Settings *settings, QWidget *parent) : SettingsPanel(settings, parent), m_ui(new Ui::SettingsGeneral) { m_ui->setupUi(this); m_ui->m_checkAutostart->setText(m_ui->m_checkAutostart->text().arg(APP_NAME)); + + connect(m_ui->m_checkAutostart, &QCheckBox::stateChanged, this, &SettingsGeneral::dirtifySettings); + connect(m_ui->m_checkForUpdatesOnStart, &QCheckBox::stateChanged, this, &SettingsGeneral::dirtifySettings); + connect(m_ui->m_checkRemoveTrolltechJunk, &QCheckBox::stateChanged, this, &SettingsGeneral::dirtifySettings); } SettingsGeneral::~SettingsGeneral() { diff --git a/src/gui/settings/settingsgui.cpp b/src/gui/settings/settingsgui.cpp index 89885024b..dfccc9146 100755 --- a/src/gui/settings/settingsgui.cpp +++ b/src/gui/settings/settingsgui.cpp @@ -1,14 +1,205 @@ -#include "settingsgui.h" -#include "ui_settingsgui.h" +#include "gui/settings/settingsgui.h" -SettingsGui::SettingsGui(QWidget *parent) : - QWidget(parent), - ui(new Ui::SettingsGui) -{ - ui->setupUi(this); +#include "gui/systemtrayicon.h" +#include "miscellaneous/settings.h" +#include "miscellaneous/application.h" +#include "miscellaneous/iconfactory.h" +#include "gui/dialogs/formmain.h" +#include "gui/tabwidget.h" +#include "gui/feedmessageviewer.h" +#include "gui/feedstoolbar.h" +#include "gui/messagestoolbar.h" +#include "gui/statusbar.h" + + +SettingsGui::SettingsGui(Settings *settings, QWidget *parent) : SettingsPanel(settings, parent), m_ui(new Ui::SettingsGui) { + m_ui->setupUi(this); + + m_ui->m_editorMessagesToolbar->activeItemsWidget()->viewport()->installEventFilter(this); + m_ui->m_editorFeedsToolbar->activeItemsWidget()->viewport()->installEventFilter(this); + m_ui->m_editorMessagesToolbar->availableItemsWidget()->viewport()->installEventFilter(this); + m_ui->m_editorFeedsToolbar->availableItemsWidget()->viewport()->installEventFilter(this); + + m_ui->m_treeSkins->setColumnCount(4); + m_ui->m_treeSkins->setHeaderHidden(false); + m_ui->m_treeSkins->setHeaderLabels(QStringList() + << /*: Skin list name column. */ tr("Name") + << /*: Version column of skin list. */ tr("Version") + << tr("Author") + << tr("E-mail")); + + // Setup skins. + m_ui->m_treeSkins->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); + m_ui->m_treeSkins->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents); + m_ui->m_treeSkins->header()->setSectionResizeMode(2, QHeaderView::ResizeToContents); + m_ui->m_treeSkins->header()->setSectionResizeMode(3, QHeaderView::ResizeToContents); + + connect(m_ui->m_treeSkins, &QTreeWidget::currentItemChanged, this, &SettingsGui::onSkinSelected); + connect(m_ui->m_cmbSelectToolBar, static_cast(&QComboBox::currentIndexChanged), m_ui->m_stackedToolbars, &QStackedWidget::setCurrentIndex); } -SettingsGui::~SettingsGui() -{ - delete ui; +SettingsGui::~SettingsGui() { + delete m_ui; +} + +void SettingsGui::loadSettings() { + onBeginLoadSettings(); + + // Load settings of tray icon. + if (SystemTrayIcon::isSystemTrayAvailable()) { + 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_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_checkEnableNotifications->setChecked(settings()->value(GROUP(GUI), SETTING(GUI::EnableNotifications)).toBool()); + + // Load settings of icon theme. + const QString current_theme = qApp->icons()->currentIconTheme(); + + foreach (const QString &icon_theme_name, qApp->icons()->installedIconThemes()) { + if (icon_theme_name == APP_NO_THEME) { + // Add just "no theme" on other systems. + //: Label for disabling icon theme. + m_ui->m_cmbIconTheme->addItem(tr("no icon theme/system icon theme"), APP_NO_THEME); + } + else { + m_ui->m_cmbIconTheme->addItem(icon_theme_name, icon_theme_name); + } + } + + // Mark active theme. + if (current_theme == QSL(APP_NO_THEME)) { + // Because "no icon theme" lies at the index 0. + m_ui->m_cmbIconTheme->setCurrentIndex(0); + } + else { + m_ui->m_cmbIconTheme->setCurrentText(current_theme); + } + + // Load skin. + const QString selected_skin = qApp->skins()->selectedSkinName(); + + foreach (const Skin &skin, qApp->skins()->installedSkins()) { + QTreeWidgetItem *new_item = new QTreeWidgetItem(QStringList() << + skin.m_visibleName << + skin.m_version << + skin.m_author << + skin.m_email); + new_item->setData(0, Qt::UserRole, QVariant::fromValue(skin)); + + // Add this skin and mark it as active if its active now. + m_ui->m_treeSkins->addTopLevelItem(new_item); + + if (skin.m_baseName == selected_skin) { + m_ui->m_treeSkins->setCurrentItem(new_item); + m_ui->m_lblActiveContents->setText(skin.m_visibleName); + } + } + + if (m_ui->m_treeSkins->currentItem() == nullptr && + m_ui->m_treeSkins->topLevelItemCount() > 0) { + // Currently active skin is NOT available, select another one as selected + // if possible. + m_ui->m_treeSkins->setCurrentItem(m_ui->m_treeSkins->topLevelItem(0)); + } + + // Load tab settings. + m_ui->m_checkCloseTabsMiddleClick->setChecked(settings()->value(GROUP(GUI), SETTING(GUI::TabCloseMiddleClick)).toBool()); + m_ui->m_checkCloseTabsDoubleClick->setChecked(settings()->value(GROUP(GUI), SETTING(GUI::TabCloseDoubleClick)).toBool()); + m_ui->m_checkNewTabDoubleClick->setChecked(settings()->value(GROUP(GUI), SETTING(GUI::TabNewDoubleClick)).toBool()); + m_ui->m_hideTabBarIfOneTabVisible->setChecked(settings()->value(GROUP(GUI), SETTING(GUI::HideTabBarIfOnlyOneTab)).toBool()); + + // Load toolbar button style. + m_ui->m_cmbToolbarButtonStyle->addItem(tr("Icon only"), Qt::ToolButtonIconOnly); + m_ui->m_cmbToolbarButtonStyle->addItem(tr("Text only"), Qt::ToolButtonTextOnly); + m_ui->m_cmbToolbarButtonStyle->addItem(tr("Text beside icon"), Qt::ToolButtonTextBesideIcon); + m_ui->m_cmbToolbarButtonStyle->addItem(tr("Text under icon"), Qt::ToolButtonTextUnderIcon); + m_ui->m_cmbToolbarButtonStyle->addItem(tr("Follow OS style"), Qt::ToolButtonFollowStyle); + + m_ui->m_cmbToolbarButtonStyle->setCurrentIndex(m_ui->m_cmbToolbarButtonStyle->findData(settings()->value(GROUP(GUI), + SETTING(GUI::ToolbarStyle)).toInt())); + + // Load toolbars. + m_ui->m_editorFeedsToolbar->loadFromToolBar(qApp->mainForm()->tabWidget()->feedMessageViewer()->feedsToolBar()); + m_ui->m_editorMessagesToolbar->loadFromToolBar(qApp->mainForm()->tabWidget()->feedMessageViewer()->messagesToolBar()); + m_ui->m_editorStatusbar->loadFromToolBar(qApp->mainForm()->statusBar()); + + onEndLoadSettings(); +} + +void SettingsGui::saveSettings() { + onBeginSaveSettings(); + + // Save toolbar. + settings()->setValue(GROUP(GUI), GUI::ToolbarStyle, m_ui->m_cmbToolbarButtonStyle->itemData(m_ui->m_cmbToolbarButtonStyle->currentIndex())); + + // Save tray icon. + if (SystemTrayIcon::isSystemTrayAvailable()) { + settings()->setValue(GROUP(GUI), GUI::UseTrayIcon, m_ui->m_grpTray->isChecked()); + + if (m_ui->m_grpTray->isChecked()) { + qApp->showTrayIcon(); + } + else { + qApp->deleteTrayIcon(); + } + } + + 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::EnableNotifications, m_ui->m_checkEnableNotifications->isChecked()); + + // 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(); + qApp->icons()->setCurrentIconTheme(selected_icon_theme); + + // Check if icon theme was changed. + if (selected_icon_theme != original_icon_theme) { + requireRestart(); + } + + // Save and activate new skin. + if (m_ui->m_treeSkins->selectedItems().size() > 0) { + const Skin active_skin = m_ui->m_treeSkins->currentItem()->data(0, Qt::UserRole).value(); + + if (qApp->skins()->selectedSkinName() != active_skin.m_baseName) { + qApp->skins()->setCurrentSkinName(active_skin.m_baseName); + requireRestart(); + } + } + + // Save tab settings. + settings()->setValue(GROUP(GUI), GUI::TabCloseMiddleClick, m_ui->m_checkCloseTabsMiddleClick->isChecked()); + settings()->setValue(GROUP(GUI), GUI::TabCloseDoubleClick, m_ui->m_checkCloseTabsDoubleClick->isChecked()); + settings()->setValue(GROUP(GUI), GUI::TabNewDoubleClick, m_ui->m_checkNewTabDoubleClick->isChecked()); + settings()->setValue(GROUP(GUI), GUI::HideTabBarIfOnlyOneTab, m_ui->m_hideTabBarIfOneTabVisible->isChecked()); + + m_ui->m_editorFeedsToolbar->saveToolBar(); + m_ui->m_editorMessagesToolbar->saveToolBar(); + m_ui->m_editorStatusbar->saveToolBar(); + + qApp->mainForm()->tabWidget()->checkTabBarVisibility(); + qApp->mainForm()->tabWidget()->feedMessageViewer()->refreshVisualProperties(); + + onEndSaveSettings(); +} + +void SettingsGui::onSkinSelected(QTreeWidgetItem *current, QTreeWidgetItem *previous) { + Q_UNUSED(previous) + + if (current != nullptr) { + const Skin skin = current->data(0, Qt::UserRole).value(); + m_ui->m_lblSelectedContents->setText(skin.m_visibleName); + } } diff --git a/src/gui/settings/settingsgui.h b/src/gui/settings/settingsgui.h index 9c11c47d5..2ca305266 100755 --- a/src/gui/settings/settingsgui.h +++ b/src/gui/settings/settingsgui.h @@ -1,22 +1,26 @@ #ifndef SETTINGSGUI_H #define SETTINGSGUI_H -#include +#include "gui/settings/settingspanel.h" -namespace Ui { - class SettingsGui; -} +#include "ui_settingsgui.h" -class SettingsGui : public QWidget -{ + +class SettingsGui : public SettingsPanel { Q_OBJECT public: - explicit SettingsGui(QWidget *parent = 0); - ~SettingsGui(); + explicit SettingsGui(Settings *settings, QWidget *parent = 0); + virtual ~SettingsGui(); + + void loadSettings(); + void saveSettings(); + + private slots: + void onSkinSelected(QTreeWidgetItem *current, QTreeWidgetItem *previous); private: - Ui::SettingsGui *ui; + Ui::SettingsGui *m_ui; }; #endif // SETTINGSGUI_H diff --git a/src/gui/settings/settingslocalization.cpp b/src/gui/settings/settingslocalization.cpp index f52c1d2d7..a01c16cd7 100755 --- a/src/gui/settings/settingslocalization.cpp +++ b/src/gui/settings/settingslocalization.cpp @@ -1,14 +1,68 @@ -#include "settingslocalization.h" -#include "ui_settingslocalization.h" +#include "gui/settings/settingslocalization.h" -SettingsLocalization::SettingsLocalization(QWidget *parent) : - QWidget(parent), - ui(new Ui::SettingsLocalization) -{ - ui->setupUi(this); +#include "miscellaneous/localization.h" +#include "miscellaneous/settings.h" +#include "miscellaneous/application.h" +#include "miscellaneous/iconfactory.h" + + +SettingsLocalization::SettingsLocalization(Settings *settings, QWidget *parent) + : SettingsPanel(settings, parent), m_ui(new Ui::SettingsLocalization) { + m_ui->setupUi(this); + + m_ui->m_treeLanguages->setColumnCount(3); + m_ui->m_treeLanguages->setHeaderHidden(false); + m_ui->m_treeLanguages->setHeaderLabels(QStringList() + << /*: Language column of language list. */ tr("Language") + << /*: Lang. code column of language list. */ tr("Code") + << tr("Author")); + + // Setup languages. + m_ui->m_treeLanguages->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); + m_ui->m_treeLanguages->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents); + m_ui->m_treeLanguages->header()->setSectionResizeMode(2, QHeaderView::ResizeToContents); } -SettingsLocalization::~SettingsLocalization() -{ - delete ui; +SettingsLocalization::~SettingsLocalization() { + delete m_ui; +} + +void SettingsLocalization::loadSettings() { + onBeginLoadSettings(); + + foreach (const Language &language, qApp->localization()->installedLanguages()) { + QTreeWidgetItem *item = new QTreeWidgetItem(m_ui->m_treeLanguages); + item->setText(0, language.m_name); + item->setText(1, language.m_code); + item->setText(2, language.m_author); + item->setIcon(0, qApp->icons()->miscIcon(QString(FLAG_ICON_SUBFOLDER) + QDir::separator() + language.m_code)); + } + + QList matching_items = m_ui->m_treeLanguages->findItems(qApp->localization()->loadedLanguage(), Qt::MatchContains, 1); + + if (!matching_items.isEmpty()) { + m_ui->m_treeLanguages->setCurrentItem(matching_items[0]); + } + + onEndLoadSettings(); +} + +void SettingsLocalization::saveSettings() { + onBeginSaveSettings(); + + if (m_ui->m_treeLanguages->currentItem() == nullptr) { + qDebug("No localizations loaded in settings dialog, so no saving for them."); + return; + } + + const QString actual_lang = qApp->localization()->loadedLanguage(); + const QString new_lang = m_ui->m_treeLanguages->currentItem()->text(1); + + // Save prompt for restart if language has changed. + if (new_lang != actual_lang) { + requireRestart(); + settings()->setValue(GROUP(General), General::Language, new_lang); + } + + onEndSaveSettings(); } diff --git a/src/gui/settings/settingslocalization.h b/src/gui/settings/settingslocalization.h index f89cd1594..67e7577bc 100755 --- a/src/gui/settings/settingslocalization.h +++ b/src/gui/settings/settingslocalization.h @@ -1,22 +1,23 @@ #ifndef SETTINGSLOCALIZATION_H #define SETTINGSLOCALIZATION_H -#include +#include "gui/settings/settingspanel.h" -namespace Ui { - class SettingsLocalization; -} +#include "ui_settingslocalization.h" -class SettingsLocalization : public QWidget -{ + +class SettingsLocalization : public SettingsPanel { Q_OBJECT public: - explicit SettingsLocalization(QWidget *parent = 0); - ~SettingsLocalization(); + explicit SettingsLocalization(Settings *settings, QWidget *parent = 0); + virtual ~SettingsLocalization(); + + void loadSettings(); + void saveSettings(); private: - Ui::SettingsLocalization *ui; + Ui::SettingsLocalization *m_ui; }; #endif // SETTINGSLOCALIZATION_H diff --git a/src/gui/settings/settingspanel.cpp b/src/gui/settings/settingspanel.cpp index 47cc2e7d2..58cde75e7 100755 --- a/src/gui/settings/settingspanel.cpp +++ b/src/gui/settings/settingspanel.cpp @@ -21,7 +21,7 @@ SettingsPanel::SettingsPanel(Settings *settings, QWidget *parent) - : QWidget(parent), m_isDirty(false), m_isLoading(false), m_settings(settings) { + : QWidget(parent), m_requiresRestart(false), m_isDirty(false), m_isLoading(false), m_settings(settings) { } void SettingsPanel::onBeginLoadSettings() { @@ -30,6 +30,8 @@ void SettingsPanel::onBeginLoadSettings() { void SettingsPanel::onEndLoadSettings() { m_isLoading = false; + + setRequiresRestart(false); setIsDirty(false); } @@ -38,6 +40,7 @@ void SettingsPanel::onBeginSaveSettings() { void SettingsPanel::onEndSaveSettings() { setIsDirty(false); + setRequiresRestart(false); } void SettingsPanel::dirtifySettings() { @@ -47,6 +50,18 @@ void SettingsPanel::dirtifySettings() { } } +bool SettingsPanel::requiresRestart() const { + return m_requiresRestart; +} + +void SettingsPanel::setRequiresRestart(bool requiresRestart) { + m_requiresRestart = requiresRestart; +} + +void SettingsPanel::requireRestart() { + setRequiresRestart(true); +} + bool SettingsPanel::isDirty() const { return m_isDirty; } diff --git a/src/gui/settings/settingspanel.h b/src/gui/settings/settingspanel.h index 407f7be5a..50fa005d4 100755 --- a/src/gui/settings/settingspanel.h +++ b/src/gui/settings/settingspanel.h @@ -32,16 +32,15 @@ class SettingsPanel : public QWidget { virtual void loadSettings() = 0; virtual void saveSettings() = 0; + bool requiresRestart() const; + bool isDirty() const; + protected: void onBeginLoadSettings(); void onEndLoadSettings(); void onBeginSaveSettings(); void onEndSaveSettings(); - // These methods should not be probably called by subclasses. - bool isDirty() const; - void setIsDirty(bool is_dirty); - // Settings to use to save/load. Settings *settings() const; @@ -50,10 +49,16 @@ class SettingsPanel : public QWidget { // NOTE: This will be probably called by subclasses when user changes some stuff. void dirtifySettings(); + // These methods should not be probably called by subclasses. + void setIsDirty(bool is_dirty); + void setRequiresRestart(bool requiresRestart); + void requireRestart(); + signals: void settingsChanged(); private: + bool m_requiresRestart; bool m_isDirty; bool m_isLoading; Settings *m_settings; diff --git a/src/gui/settings/settingsshortcuts.cpp b/src/gui/settings/settingsshortcuts.cpp index c7ab5b77b..7a0ff774d 100755 --- a/src/gui/settings/settingsshortcuts.cpp +++ b/src/gui/settings/settingsshortcuts.cpp @@ -1,8 +1,12 @@ #include "gui/settings/settingsshortcuts.h" +#include "gui/dialogs/formmain.h" +#include "miscellaneous/application.h" +#include "dynamic-shortcuts/dynamicshortcuts.h" -SettingsShortcuts::SettingsShortcuts(QWidget *parent) - : QWidget(parent), m_ui(new Ui::SettingsShortcuts) { + +SettingsShortcuts::SettingsShortcuts(Settings *settings, QWidget *parent) + : SettingsPanel(settings, parent), m_ui(new Ui::SettingsShortcuts) { m_ui->setupUi(this); } @@ -12,14 +16,13 @@ SettingsShortcuts::~SettingsShortcuts() { void SettingsShortcuts::loadSettings() { onBeginLoadSettings(); - - + m_ui->m_shortcuts->populate(qApp->mainForm()->allActions()); onEndLoadSettings(); } void SettingsShortcuts::saveSettings() { onBeginSaveSettings(); - - + m_ui->m_shortcuts->updateShortcuts(); + DynamicShortcuts::save(qApp->mainForm()->allActions()); onEndSaveSettings(); } diff --git a/src/gui/settings/settingsshortcuts.h b/src/gui/settings/settingsshortcuts.h index bf66ba1a6..79f599111 100755 --- a/src/gui/settings/settingsshortcuts.h +++ b/src/gui/settings/settingsshortcuts.h @@ -10,7 +10,7 @@ class SettingsShortcuts : public SettingsPanel { Q_OBJECT public: - explicit SettingsShortcuts(QWidget *parent = 0); + explicit SettingsShortcuts(Settings *settings, QWidget *parent = 0); virtual ~SettingsShortcuts(); void loadSettings();