From b1258d48feeb703b7a1d12038d7221c6c58b49e1 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 12 Sep 2014 07:12:33 +0200 Subject: [PATCH] Added blau skin, some refactoring. --- resources/skins/base/blau.xml | 12 +++++ resources/skins/base/images/checkbox.png | Bin 0 -> 343 bytes resources/skins/base/images/down_arrow.png | Bin 0 -> 1008 bytes resources/text/CHANGELOG | 1 + src/gui/formmain.cpp | 53 --------------------- src/gui/formmain.h | 15 ++---- src/miscellaneous/application.cpp | 53 ++++++++++++++++++++- src/miscellaneous/application.h | 9 +++- 8 files changed, 75 insertions(+), 68 deletions(-) create mode 100644 resources/skins/base/blau.xml create mode 100644 resources/skins/base/images/checkbox.png create mode 100644 resources/skins/base/images/down_arrow.png diff --git a/resources/skins/base/blau.xml b/resources/skins/base/blau.xml new file mode 100644 index 000000000..c2c9d6083 --- /dev/null +++ b/resources/skins/base/blau.xml @@ -0,0 +1,12 @@ + + + blau + + Martin Rotter + rotter.martinos@gmail.com + + + PGh0bWw+DQogIDxoZWFkPg0KICAgIDxzdHlsZT4NCiAgICAgIGJvZHkgew0KICAgICAgICBtYXJnaW46IDBweDsNCiAgICAgICAgcGFkZGluZzogMHB4Ow0KICAgICAgfQ0KICAgIA0KICAgICAgcHJlIHsNCiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOw0KICAgICAgfQ0KDQogICAgICAuaGVhZGVydGV4dCB7DQogICAgICAgIGZvbnQtc2l6ZTogMjBweDsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsNCiAgICAgIH0NCg0KICAgICAgLmhlYWRlciB7DQogICAgICAgIGZvbnQtc2l6ZTogMTdweDsNCiAgICAgICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwJSxyZ2JhKDk5LDEzNSwyMjksMSkpLCBjb2xvci1zdG9wKDEwMCUscmdiYSg2NCwxMDksMjM2LDEpKSk7DQogICAgICAgIHBhZGRpbmc6IDZweDsNCiAgICAgICAgbWFyZ2luOiAwcHggYXV0bzsNCiAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICBib3JkZXI6IDAuNXB4IHNvbGlkIGJsYWNrOw0KICAgICAgfQ0KDQogICAgICAuaGVhZGVyIGEgew0KICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICB9DQoNCiAgICAgIC5jb250ZW50IHsNCiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGdyYXk7DQogICAgICAgIGZvbnQtc2l6ZTogMTZweDsNCgkJY29sb3I6ICNlZWVlZWU7DQogICAgICAgIG1hcmdpbjogMHB4IGF1dG87DQogICAgICAgIHBhZGRpbmc6IDZweDsNCiAgICAgICAgcGFkZGluZy10b3A6IDEycHg7DQogICAgICB9DQogICAgICANCiAgICAgIC5jb250YWluZXIgew0KCQlmb250LWZhbWlseTogIlRyZWJ1Y2hldCBNUyIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgZ3JheTsNCiAgICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7DQogICAgICAgIG1hcmdpbjogMTBweDsNCiAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAycHggMnB4IDE2cHggMHB4IHJnYmEoNTAsIDUwLCA1MCwgMC42Mik7DQogICAgICB9DQogICAgPC9zdHlsZT4NCiAgICA8dGl0bGU+DQogICAgICAlMQ0KICAgIDwvdGl0bGU+DQogIDwvaGVhZD4NCiAgPGJvZHk+DQogICAgJTINCiAgPC9ib2R5Pg0KPC9odG1sPg== + ICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+DQogICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXJ0ZXh0Ij4NCiAgICAgICAgICAlMQ0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgJTIgKCU1KQ0KICAgICAgICA8YnI+DQogICAgICAgIDxhIGhyZWY9IiUzIj4NCiAgICAgICAgICAlMw0KICAgICAgICA8L2E+DQogICAgICA8L2Rpdj4NCiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPg0KICAgICAgICAlNCANCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg== + LyogUVdpZGdldCAqLw0KUVdpZGdldCB7DQogIGNvbG9yOiAjY2NjY2NjOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzIzMjMyOw0KfQ0KDQpRV2lkZ2V0OjppdGVtOmhvdmVyIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogUUxpbmVhckdyYWRpZW50KCB4MTogMCwgeTE6IDAsIHgyOiAwLCB5MjogMSwgc3RvcDogMCAjNTY5ZGU1LCBzdG9wOiAxICM0YjhhYzkpOw0KICBjb2xvcjogIzAwMDAwMDsNCn0NCg0KUVdpZGdldDpkaXNhYmxlZCB7DQogIGNvbG9yOiAjNzc3Nzc3Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzIzMjMyOw0KfQ0KDQovKiBRVG9vbEJ1dHRvbiAqLw0KUVRvb2xCdXR0b24gLCBRVG9vbEJ1dHRvbjpkaXNhYmxlZCB7DQogIGJvcmRlcjogbm9uZTsNCiAgcGFkZGluZzogMHB4Ow0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCn0NCg0KUVRvb2xCdXR0b246aG92ZXIgew0KICBib3JkZXItcmFkaXVzOiAycHg7DQogIGJvcmRlcjogMXB4IHNvbGlkIGdyYXk7DQp9DQoNCi8qIFFTdGF0dXNCYXIgKi8NClFTdGF0dXNCYXIgUVRvb2xCdXR0b24gew0KICBtYXJnaW4tbGVmdDogNXB4Ow0KICBtYXJnaW4tcmlnaHQ6IDVweDsNCn0NCg0KUVN0YXR1c0Jhcjo6aXRlbSB7DQogIGJvcmRlcjogdHJhbnNwYXJlbnQ7DQp9DQoNCi8qIFFUb29sQmFyICovDQpRVG9vbEJhcjo6c2VwYXJhdG9yIHsNCiAgd2lkdGg6IDFweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzU5NTk1OTsNCg0KICBtYXJnaW4tbGVmdDogNXB4Ow0KICBtYXJnaW4tcmlnaHQ6IDVweDsNCn0NCg0KUVRvb2xCYXIgew0KICBwYWRkaW5nLWxlZnQ6IDVweDsNCiAgcGFkZGluZy1yaWdodDogNXB4Ow0KfQ0KDQovKiBRVG9vbFRpcCAqLw0KUVRvb2xUaXAgew0KICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzU2OWRlNTsNCiAgY29sb3I6IGJsYWNrOw0KICBib3JkZXItcmFkaXVzOiAxcHg7DQogIG9wYWNpdHk6IDIyMDsNCn0NCg0KLyogUU1lbnVCYXIgKi8NClFNZW51QmFyOjppdGVtIHsNCiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQNCn0NCg0KUU1lbnVCYXI6Oml0ZW06c2VsZWN0ZWQgew0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCiAgYm9yZGVyOiAxcHggc29saWQgIzU2OWRlNTsNCn0NCg0KUU1lbnVCYXI6Oml0ZW06cHJlc3NlZCB7DQogIGJhY2tncm91bmQ6ICM0NDQ7DQogIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7DQogIGJhY2tncm91bmQtY29sb3I6IFFMaW5lYXJHcmFkaWVudCggeDE6MCwgeTE6MCwgeDI6MCwgeTI6MSwgc3RvcDoxICMyMTIxMjEsIHN0b3A6MC40ICMzNDM0MzQgKTsNCiAgbWFyZ2luLWJvdHRvbTogLTFweDsNCiAgcGFkZGluZy1ib3R0b206IDFweDsNCn0NCg0KLyogUU1lbnUgKi8NClFNZW51IHsNCiAgYm9yZGVyOiAxcHggc29saWQgIzAwMDsNCn0NCg0KUU1lbnU6Oml0ZW0gew0KICBwYWRkaW5nOiAycHggMTBweCAycHggMjNweDsNCn0NCg0KUU1lbnU6Omljb24gew0KICBwYWRkaW5nLWxlZnQ6IDRweDsNCn0NCg0KUU1lbnU6Oml0ZW06c2VsZWN0ZWQgew0KICBjb2xvcjogIzAwMDAwMDsNCiAgYmFja2dyb3VuZC1jb2xvcjogUUxpbmVhckdyYWRpZW50KCB4MTogMCwgeTE6IDAsIHgyOiAwLCB5MjogMSwgc3RvcDogMCAjNTY5ZGU1LCBzdG9wOiAxICM0NDdjYjUpOw0KfQ0KDQpRTWVudTo6c2VwYXJhdG9yIHsNCiAgaGVpZ2h0OiAxcHg7DQogIGJhY2tncm91bmQtY29sb3I6ICM1OTU5NTk7DQogIGNvbG9yOiB3aGl0ZTsNCiAgbWFyZ2luLXRvcDogM3B4Ow0KICBtYXJnaW4tYm90dG9tOiAzcHg7DQogIG1hcmdpbi1sZWZ0OiA1cHg7DQogIG1hcmdpbi1yaWdodDogNXB4Ow0KfQ0KDQovKiBRUHVzaEJ1dHRvbiAqLw0KUVB1c2hCdXR0b24gew0KICBjb2xvcjogI2IxYjFiMTsNCiAgYmFja2dyb3VuZC1jb2xvcjogUUxpbmVhckdyYWRpZW50KCB4MTogMCwgeTE6IDAsIHgyOiAwLCB5MjogMSwgc3RvcDogMCAjNTY1NjU2LCBzdG9wOiAwLjEgIzUyNTI1Miwgc3RvcDogMC41ICM0ZTRlNGUsIHN0b3A6IDAuOSAjNGE0YTRhLCBzdG9wOiAxICM0NjQ2NDYpOw0KICBib3JkZXI6IDFweCBzb2xpZCAjMWUxZTFlOw0KICBib3JkZXItcmFkaXVzOiAxcHg7DQogIHBhZGRpbmc6IDNweDsNCiAgZm9udC1zaXplOiAxMnB4Ow0KICBwYWRkaW5nLWxlZnQ6IDZweDsNCiAgcGFkZGluZy1yaWdodDogNnB4Ow0KICBtaW4td2lkdGg6IDMwcHg7DQp9DQoNClFQdXNoQnV0dG9uOnByZXNzZWQgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiBRTGluZWFyR3JhZGllbnQoIHgxOiAwLCB5MTogMCwgeDI6IDAsIHkyOiAxLCBzdG9wOiAwICMyZDJkMmQsIHN0b3A6IDAuMSAjMmIyYjJiLCBzdG9wOiAwLjUgIzI5MjkyOSwgc3RvcDogMC45ICMyODI4MjgsIHN0b3A6IDEgIzI1MjUyNSkNCn0NCg0KLyogUUNvbWJvQm94ICovDQpRQ29tYm9Cb3ggew0KICBzZWxlY3Rpb24tYmFja2dyb3VuZC1jb2xvcjogIzU2OWRlNTsNCiAgYmFja2dyb3VuZC1jb2xvcjogUUxpbmVhckdyYWRpZW50KCB4MTogMCwgeTE6IDAsIHgyOiAwLCB5MjogMSwgc3RvcDogMCAjNTY1NjU2LCBzdG9wOiAwLjEgIzUyNTI1Miwgc3RvcDogMC41ICM0ZTRlNGUsIHN0b3A6IDAuOSAjNGE0YTRhLCBzdG9wOiAxICM0NjQ2NDYpOw0KICBib3JkZXI6IDFweCBzb2xpZCAjMWUxZTFlOw0KICBib3JkZXItcmFkaXVzOiAxcHg7DQogIHBhZGRpbmc6IDJweDsNCiAgcGFkZGluZy10b3A6IDFweDsNCiAgcGFkZGluZy1ib3R0b206IDFweDsNCiAgcGFkZGluZy1sZWZ0OiA0cHg7DQp9DQoNClFDb21ib0JveDpob3ZlciwgUVB1c2hCdXR0b246aG92ZXIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiBRTGluZWFyR3JhZGllbnQoIHgxOiAwLCB5MTogMCwgeDI6IDAsIHkyOiAxLCBzdG9wOiAwICM1NjlkZTUsIHN0b3A6IDEgIzQ0N2NiNSk7DQogIGNvbG9yOiBibGFjazsNCn0NCg0KUUNvbWJvQm94Om9uIHsNCiAgcGFkZGluZzogMXB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiBRTGluZWFyR3JhZGllbnQoIHgxOiAwLCB5MTogMCwgeDI6IDAsIHkyOiAxLCBzdG9wOiAwICMyZDJkMmQsIHN0b3A6IDAuMSAjMmIyYjJiLCBzdG9wOiAwLjUgIzI5MjkyOSwgc3RvcDogMC45ICMyODI4MjgsIHN0b3A6IDEgIzI1MjUyNSk7DQp9DQoNClFDb21ib0JveCBRQWJzdHJhY3RJdGVtVmlldyB7DQogIGJvcmRlcjogMXB4IHNvbGlkIFFMaW5lYXJHcmFkaWVudCggeDE6IDAsIHkxOiAwLCB4MjogMCwgeTI6IDEsIHN0b3A6IDAgIzU2OWRlNSwgc3RvcDogMSAjNDQ3Y2I1KTsNCiAgc2VsZWN0aW9uLWJhY2tncm91bmQtY29sb3I6IFFMaW5lYXJHcmFkaWVudCggeDE6IDAsIHkxOiAwLCB4MjogMCwgeTI6IDEsIHN0b3A6IDAgIzU2OWRlNSwgc3RvcDogMSAjNDQ3Y2I1KTsNCn0NCg0KUUNvbWJvQm94Ojpkcm9wLWRvd24gew0KICBzdWJjb250cm9sLW9yaWdpbjogcGFkZGluZzsNCiAgc3ViY29udHJvbC1wb3NpdGlvbjogdG9wIHJpZ2h0Ow0KICB3aWR0aDogMTVweDsNCiAgYm9yZGVyLWxlZnQtd2lkdGg6IDBweDsNCiAgYm9yZGVyLWxlZnQtY29sb3I6IGRhcmtncmF5Ow0KICBib3JkZXItbGVmdC1zdHlsZTogc29saWQ7DQogIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxcHg7DQogIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxcHg7DQp9DQoNClFDb21ib0JveDo6ZG93bi1hcnJvdyB7DQogIGltYWdlOiB1cmwoIyMvaW1hZ2VzL2Rvd25fYXJyb3cucG5nKQ0KfQ0KDQovKiBRU2Nyb2xsQmFyICovDQpRU2Nyb2xsQmFyOmhvcml6b250YWwgew0KICBib3JkZXI6IDFweCBzb2xpZCAjMjIyMjIyOw0KICBiYWNrZ3JvdW5kOiBRTGluZWFyR3JhZGllbnQoIHgxOiAwLCB5MTogMCwgeDI6IDAsIHkyOiAxLCBzdG9wOiAwLjAgIzEyMTIxMiwgc3RvcDogMC4yICMyODI4MjgsIHN0b3A6IDEgIzQ4NDg0OCk7DQogIGhlaWdodDogMTNweDsNCiAgbWFyZ2luOiAwcHggMTZweCAwIDE2cHg7DQp9DQoNClFTY3JvbGxCYXI6OmhhbmRsZTpob3Jpem9udGFsIHsNCiAgYmFja2dyb3VuZDogUUxpbmVhckdyYWRpZW50KCB4MTogMCwgeTE6IDAsIHgyOiAxLCB5MjogMCwgc3RvcDogMCAjNTY5ZGU1LCBzdG9wOiAwLjUgIzQ0N2NiNSwgc3RvcDogMSAjNTY5ZGU1KTsNCiAgbWluLWhlaWdodDogMjBweDsNCiAgYm9yZGVyLXJhZGl1czogMXB4Ow0KfQ0KDQpRU2Nyb2xsQmFyOjphZGQtbGluZTpob3Jpem9udGFsIHsNCiAgYm9yZGVyOiAxcHggc29saWQgIzFiMWIxOTsNCiAgYm9yZGVyLXJhZGl1czogMXB4Ow0KICBiYWNrZ3JvdW5kOiBRTGluZWFyR3JhZGllbnQoIHgxOiAwLCB5MTogMCwgeDI6IDEsIHkyOiAwLCBzdG9wOiAwICM1NjlkZTUsIHN0b3A6IDEgIzQ0N2NiNSk7DQogIHdpZHRoOiAxM3B4Ow0KICBzdWJjb250cm9sLXBvc2l0aW9uOiByaWdodDsNCiAgc3ViY29udHJvbC1vcmlnaW46IG1hcmdpbjsNCn0NCg0KUVNjcm9sbEJhcjo6c3ViLWxpbmU6aG9yaXpvbnRhbCB7DQogIGJvcmRlcjogMXB4IHNvbGlkICMxYjFiMTk7DQogIGJvcmRlci1yYWRpdXM6IDFweDsNCiAgYmFja2dyb3VuZDogUUxpbmVhckdyYWRpZW50KCB4MTogMCwgeTE6IDAsIHgyOiAxLCB5MjogMCwgc3RvcDogMCAjNTY5ZGU1LCBzdG9wOiAxICM0NDdjYjUpOw0KICB3aWR0aDogMTNweDsNCiAgc3ViY29udHJvbC1wb3NpdGlvbjogbGVmdDsNCiAgc3ViY29udHJvbC1vcmlnaW46IG1hcmdpbjsNCn0NCg0KUVNjcm9sbEJhcjo6cmlnaHQtYXJyb3c6aG9yaXpvbnRhbCwgUVNjcm9sbEJhcjo6bGVmdC1hcnJvdzpob3Jpem9udGFsIHsNCiAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7DQogIHdpZHRoOiAxcHg7DQogIGhlaWdodDogMXB4Ow0KICBiYWNrZ3JvdW5kOiB3aGl0ZTsNCn0NCg0KUVNjcm9sbEJhcjo6YWRkLXBhZ2U6aG9yaXpvbnRhbCwgUVNjcm9sbEJhcjo6c3ViLXBhZ2U6aG9yaXpvbnRhbCB7DQogIGJhY2tncm91bmQ6IG5vbmUNCn0NCg0KUVNjcm9sbEJhcjp2ZXJ0aWNhbCB7DQogIGJhY2tncm91bmQ6IFFMaW5lYXJHcmFkaWVudCggeDE6IDAsIHkxOiAwLCB4MjogMSwgeTI6IDAsIHN0b3A6IDAuMCAjMTIxMjEyLCBzdG9wOiAwLjIgIzI4MjgyOCwgc3RvcDogMSAjNDg0ODQ4KTsNCiAgd2lkdGg6IDEzcHg7DQogIG1hcmdpbjogMTZweCAwIDE2cHggMDsNCiAgYm9yZGVyOiAxcHggc29saWQgIzIyMjIyMjsNCn0NCg0KUVNjcm9sbEJhcjo6aGFuZGxlOnZlcnRpY2FsIHsNCiAgYmFja2dyb3VuZDogUUxpbmVhckdyYWRpZW50KCB4MTogMCwgeTE6IDAsIHgyOiAwLCB5MjogMSwgc3RvcDogMCAjNTY5ZGU1LCBzdG9wOiAwLjUgIzQ0N2NiNSwgc3RvcDogMSAjNTY5ZGU1KTsNCiAgbWluLWhlaWdodDogMjBweDsNCiAgYm9yZGVyLXJhZGl1czogMXB4Ow0KfQ0KUVNjcm9sbEJhcjo6YWRkLWxpbmU6dmVydGljYWwgew0KICBib3JkZXI6IDFweCBzb2xpZCAjMWIxYjE5Ow0KICBib3JkZXItcmFkaXVzOiAxcHg7DQogIGJhY2tncm91bmQ6IFFMaW5lYXJHcmFkaWVudCggeDE6IDAsIHkxOiAwLCB4MjogMCwgeTI6IDEsIHN0b3A6IDAgIzU2OWRlNSwgc3RvcDogMSAjNDQ3Y2I1KTsNCiAgaGVpZ2h0OiAxM3B4Ow0KICBzdWJjb250cm9sLXBvc2l0aW9uOiBib3R0b207DQogIHN1YmNvbnRyb2wtb3JpZ2luOiBtYXJnaW47DQp9DQoNClFTY3JvbGxCYXI6OnN1Yi1saW5lOnZlcnRpY2FsIHsNCiAgYm9yZGVyOiAxcHggc29saWQgIzFiMWIxOTsNCiAgYm9yZGVyLXJhZGl1czogMXB4Ow0KICBiYWNrZ3JvdW5kOiBRTGluZWFyR3JhZGllbnQoIHgxOiAwLCB5MTogMCwgeDI6IDAsIHkyOiAxLCBzdG9wOiAwICM1NjlkZTUsIHN0b3A6IDEgIzQ0N2NiNSk7DQogIGhlaWdodDogMTNweDsNCiAgc3ViY29udHJvbC1wb3NpdGlvbjogdG9wOw0KICBzdWJjb250cm9sLW9yaWdpbjogbWFyZ2luOw0KfQ0KDQpRU2Nyb2xsQmFyOjp1cC1hcnJvdzp2ZXJ0aWNhbCwgUVNjcm9sbEJhcjo6ZG93bi1hcnJvdzp2ZXJ0aWNhbCB7DQogIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOw0KICB3aWR0aDogMXB4Ow0KICBoZWlnaHQ6IDFweDsNCiAgYmFja2dyb3VuZDogd2hpdGU7DQp9DQoNClFTY3JvbGxCYXI6OmFkZC1wYWdlOnZlcnRpY2FsLCBRU2Nyb2xsQmFyOjpzdWItcGFnZTp2ZXJ0aWNhbCB7DQogIGJhY2tncm91bmQ6IG5vbmU7DQp9DQoNCi8qIFFTcGxpdHRlciAqLw0KUVNwbGl0dGVyOjpoYW5kbGUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjNGU0ZTRlOw0KfQ0KDQovKiBRSGVhZGVyVmlldyAqLw0KUUhlYWRlclZpZXcgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgY29sb3I6ICNjY2NjY2M7DQp9DQoNClFIZWFkZXJWaWV3OjpzZWN0aW9uIHsNCiAgbWluLWhlaWdodDogMjBweDsNCiAgYm9yZGVyOiAwLjUgcHggc29saWQgIzU5NTk1OTsNCiAgYm9yZGVyLXJpZ2h0OiAwLjUgc29saWQgIzcwNzA3MDsNCiAgYmFja2dyb3VuZC1jb2xvcjogUUxpbmVhckdyYWRpZW50KCB4MTogMCwgeTE6IDAsIHgyOiAwLCB5MjogMSwgc3RvcDogMCAjNTY1NjU2LCBzdG9wOiAwLjEgIzUyNTI1Miwgc3RvcDogMC41ICM0ZTRlNGUsIHN0b3A6IDAuOSAjNGE0YTRhLCBzdG9wOiAxICM0NjQ2NDYpOw0KfQ0KDQpRSGVhZGVyVmlldzo6c2VjdGlvbjpmaXJzdCB7DQogIHBhZGRpbmctbGVmdDogNHB4Ow0KICBwYWRkaW5nLXJpZ2h0OiAycHg7DQp9DQoNClFIZWFkZXJWaWV3OjpzZWN0aW9uOiFmaXJzdCB7DQogIHBhZGRpbmctbGVmdDogMnB4Ow0KICBwYWRkaW5nLXJpZ2h0OiAycHg7DQp9DQoNClFIZWFkZXJWaWV3OjpzZWN0aW9uOmhvdmVyIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogUUxpbmVhckdyYWRpZW50KCB4MTogMCwgeTE6IDAsIHgyOiAwLCB5MjogMSwgc3RvcDogMCAjNTY1NjU2LCBzdG9wOiAwLjEgIzUwNTA1MCwgc3RvcDogMC41ICM0ZTRlNGUsIHN0b3A6IDAuOSAjNDA0MDQwLCBzdG9wOiAxICM0MDQwNDApOw0KfQ0KDQovKiBRVHJlZVZpZXcgKi8NClFUcmVlVmlldzo6YnJhbmNoOmhhcy1zaWJsaW5nczohYWRqb2lucy1pdGVtICB7DQogIGJvcmRlci1pbWFnZTogdXJsKHFzcy9kdW1teS5wbmcpIDA7DQp9DQoNClFUcmVlVmlldzo6YnJhbmNoOmhhcy1zaWJsaW5nczphZGpvaW5zLWl0ZW0gew0KICBib3JkZXItaW1hZ2U6IHVybChxc3MvZHVtbXkucG5nKSAwOw0KfQ0KDQpRVHJlZVZpZXc6OmJyYW5jaDohaGFzLWNoaWxkcmVuOiFoYXMtc2libGluZ3M6YWRqb2lucy1pdGVtICB7DQogIGJvcmRlci1pbWFnZTogdXJsKHFzcy9kdW1teS5wbmcpIDA7DQp9DQoNClFUcmVlVmlldzo6YnJhbmNoOmhhcy1jaGlsZHJlbjohaGFzLXNpYmxpbmdzOmNsb3NlZCwNClFUcmVlVmlldzo6YnJhbmNoOmNsb3NlZDpoYXMtY2hpbGRyZW46aGFzLXNpYmxpbmdzICB7DQogIGJvcmRlci1pbWFnZTogbm9uZTsNCiAgaW1hZ2U6IHVybChxc3MvYnJhbmNoLWNsb3NlZC5wbmcpOw0KfQ0KDQpRVHJlZVZpZXc6OmJyYW5jaDpvcGVuOmhhcy1jaGlsZHJlbjohaGFzLXNpYmxpbmdzLA0KUVRyZWVWaWV3OjpicmFuY2g6b3BlbjpoYXMtY2hpbGRyZW46aGFzLXNpYmxpbmdzICB7DQogIGJvcmRlci1pbWFnZTogbm9uZTsNCiAgaW1hZ2U6IHVybChxc3MvYnJhbmNoLW9wZW4ucG5nKTsNCn0NCg0KUVRyZWVWaWV3OjppdGVtIHsNCiAgcGFkZGluZzogMXB4Ow0KfSANCg0KUVRyZWVWaWV3W2hpZGVUcmVlPSJ0cnVlIl06OmJyYW5jaDohaGFzLWNobGlkcmVuOmhhc1NpYmxpbmdzIHsNCiAgYm9yZGVyLWltYWdlOiBub25lOw0KICBpbWFnZTogbm9uZTsNCn0NCg0KUVRyZWVWaWV3OjppdGVtOnNlbGVjdGVkLCBRVHJlZVZpZXc6OmJyYW5jaDpzZWxlY3RlZCwgUVRyZWVWaWV3OjppdGVtOnNlbGVjdGVkOmFjdGl2ZSwgUVRyZWVWaWV3OjppdGVtOnNlbGVjdGVkOiFhY3RpdmUsIFFUcmVlVmlldzo6aXRlbTpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6IFFMaW5lYXJHcmFkaWVudCggeDE6IDAsIHkxOiAwLCB4MjogMCwgeTI6IDEsIHN0b3A6IDAgIzU2OWRlNSwgc3RvcDogMSAjNGI4YWM5KTsNCiAgY29sb3I6ICMwMDAwMDA7DQp9DQoNCi8qIFFMaXN0VmlldyAqLw0KUUxpc3RWaWV3ICB7DQogIHNob3ctZGVjb3JhdGlvbi1zZWxlY3RlZDogMTsNCn0NCiANClFMaXN0Vmlldzo6aXRlbTpzZWxlY3RlZCwgUUxpc3RWaWV3OjppdGVtOnNlbGVjdGVkOiFhY3RpdmUsIFFMaXN0Vmlldzo6aXRlbTpzZWxlY3RlZDphY3RpdmUsIFFMaXN0Vmlldzo6aXRlbTpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6IFFMaW5lYXJHcmFkaWVudCggeDE6IDAsIHkxOiAwLCB4MjogMCwgeTI6IDEsIHN0b3A6IDAgIzU2OWRlNSwgc3RvcDogMSAjNGI4YWM5KTsNCiAgY29sb3I6ICMwMDAwMDA7DQp9DQoNCi8qIFFUZXh0RWRpdCwgUVBsYWluVGV4dEVkaXQgKi8NClFUZXh0RWRpdDpmb2N1cywgUVBsYWluVGV4dEVkaXQ6Zm9jdXMsIFFMaW5lRWRpdDpmb2N1cyB7DQogIGJvcmRlcjogMXB4IHNvbGlkIFFMaW5lYXJHcmFkaWVudCggeDE6IDAsIHkxOiAwLCB4MjogMCwgeTI6IDEsIHN0b3A6IDAgIzU2OWRlNSwgc3RvcDogMSAjNDQ3Y2I1KQ0KfQ0KDQpRVGV4dEVkaXQsIFFQbGFpblRleHRFZGl0IHsNCiAgYmFja2dyb3VuZC1jb2xvcjogUUxpbmVhckdyYWRpZW50KCB4MTogMCwgeTE6IDAsIHgyOiAwLCB5MjogMSwgc3RvcDogMCAjNGQ0ZDRkLCBzdG9wOiAwICM2NDY0NjQsIHN0b3A6IDEgIzVkNWQ1ZCkNCn0NCg0KLyogUUxpbmVFZGl0ICovDQpRTGluZUVkaXQgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiBRTGluZWFyR3JhZGllbnQoIHgxOiAwLCB5MTogMCwgeDI6IDAsIHkyOiAxLCBzdG9wOiAwICM0ZDRkNGQsIHN0b3A6IDAgIzY0NjQ2NCwgc3RvcDogMSAjNWQ1ZDVkKTsNCiAgcGFkZGluZzogMXB4Ow0KICBib3JkZXItc3R5bGU6IHNvbGlkOw0KICBib3JkZXI6IDFweCBzb2xpZCAjNTk1OTU5Ow0KICBib3JkZXItcmFkaXVzOiAwcHg7DQp9DQoNCi8qIFFQcm9ncmVzc0JhciAqLw0KUVByb2dyZXNzQmFyIHsNCiAgYm9yZGVyOiB0cmFuc3BhcmVudDsNCiAgYm9yZGVyLXJhZGl1czogMXB4Ow0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQpRUHJvZ3Jlc3NCYXI6OmNodW5rIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogUUxpbmVhckdyYWRpZW50KCB4MTogMCwgeTE6IDAsIHgyOiAwLCB5MjogMSwgc3RvcDogMCAjNTY5ZGU1LCBzdG9wOiAxICM0YjhhYzkpOw0KICB3aWR0aDogM3B4Ow0KICBtYXJnaW46IDAuNXB4Ow0KfQ0KDQovKiBRQ2hlY2tCb3ggKi8NClFDaGVja0JveDo6aW5kaWNhdG9yIHsNCiAgY29sb3I6ICNiMWIxYjE7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMjMyMzI7DQogIGJvcmRlcjogMXB4IHNvbGlkICNiMWIxYjE7DQogIHdpZHRoOiA5cHg7DQogIGhlaWdodDogOXB4Ow0KfQ0KDQpRQ2hlY2tCb3g6OmluZGljYXRvcjpjaGVja2VkIHsNCiAgaW1hZ2U6IHVybCgjIy9pbWFnZXMvY2hlY2tib3gucG5nKQ0KfQ0KDQpRQ2hlY2tCb3g6OmluZGljYXRvcjpkaXNhYmxlZCB7DQogIGJvcmRlcjogMXB4IHNvbGlkICM0NDQNCn0NCg0KLyogUVJhZGlvQnV0dG9uICovDQpRUmFkaW9CdXR0b246OmluZGljYXRvcjpkaXNhYmxlZCB7DQogIGJvcmRlcjogMXB4IHNvbGlkICM0NDQNCn0NCg0KUVJhZGlvQnV0dG9uOjppbmRpY2F0b3Igew0KICBib3JkZXItcmFkaXVzOiA2cHgNCn0NCg0KUVJhZGlvQnV0dG9uOjppbmRpY2F0b3I6Y2hlY2tlZCwgUVJhZGlvQnV0dG9uOjppbmRpY2F0b3I6dW5jaGVja2VkIHsNCiAgY29sb3I6ICNiMWIxYjE7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMjMyMzI7DQogIGJvcmRlcjogMXB4IHNvbGlkICNiMWIxYjE7DQp9DQoNClFSYWRpb0J1dHRvbjo6aW5kaWNhdG9yOmNoZWNrZWQgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiBxcmFkaWFsZ3JhZGllbnQoIGN4OiAwLjUsIGN5OiAwLjUsIGZ4OiAwLjUsIGZ5OiAwLjUsIHJhZGl1czogMS4wLCBzdG9wOiAwLjI1ICM1NjlkZTUsIHN0b3A6IDAuMyAjMzIzMjMyICkNCn0NCg0KUVJhZGlvQnV0dG9uOjppbmRpY2F0b3I6aG92ZXIsIFFDaGVja0JveDo6aW5kaWNhdG9yOmhvdmVyIHsNCiAgYm9yZGVyOiAxcHggc29saWQgIzU2OWRlNQ0KfQ== + \ No newline at end of file diff --git a/resources/skins/base/images/checkbox.png b/resources/skins/base/images/checkbox.png new file mode 100644 index 0000000000000000000000000000000000000000..b4a9aa3b52dc02e6e117747a9ac9d9467526a4f7 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{!3Opi<85sDEfH31!Z9ZwBphB`o zkS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0x&hVR^>lFzskjx>x6!Y~ zL82x7y^qd`n>xG^0n*%uf2ox3~Sc{nxWy^uZGQQwlaH4B=bcp9+~j`r=91d+56tVKeegm>%ILf&*tpj ztMF5D-PEApI;Zz7ox<4oWVXeA8?B{sAN(I%*qQr&*6?6r*tM>DdeFP3#K>v=i!|0T zBrr1^oALM-14E(A`z_b}88)zfP|uo|?h?qt;BooOJU8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+Qb|NXRCwBASoP`3KNwv8o*~o!#E+}L zul~OJ`_PwYV}}0>g=_bI-1~9!hs?bH3=IDn7?^X;&b=Qw|3AZj28RC({}~kBEVlk< e_|Nd40Wbh+Uo2;I+U)xP0000 +
  • Re-introduced "blau" (dark) skin.
  • Import/export dialog now offers "Check/uncheck all items" button.
  • diff --git a/src/gui/formmain.cpp b/src/gui/formmain.cpp index 72fdcc556..c6d45e188 100755 --- a/src/gui/formmain.cpp +++ b/src/gui/formmain.cpp @@ -215,52 +215,6 @@ void FormMain::display() { Application::alert(this); } -void FormMain::onCommitData(QSessionManager &manager) { - qDebug("OS asked application to commit its data."); - - manager.setRestartHint(QSessionManager::RestartNever); - manager.release(); -} - -void FormMain::onSaveState(QSessionManager &manager) { - qDebug("OS asked application to save its state."); - - manager.setRestartHint(QSessionManager::RestartNever); - manager.release(); -} - -void FormMain::onAboutToQuit() { - // Make sure that we obtain close lock - // BEFORE even trying to quit the application. - bool locked_safely = qApp->closeLock()->tryLock(CLOSE_LOCK_TIMEOUT); - - qApp->processEvents(); - - qDebug("Cleaning up resources and saving application state."); - m_ui->m_tabWidget->feedMessageViewer()->quit(); - - if (qApp->settings()->value(APP_CFG_MESSAGES, "clear_read_on_exit", false).toBool()) { - m_ui->m_tabWidget->feedMessageViewer()->feedsView()->clearAllReadMessages(); - } - - qApp->database()->saveDatabase(); - saveSize(); - - if (locked_safely) { - // Application obtained permission to close - // in a safety way. - qDebug("Close lock was obtained safely."); - - // We locked the lock to exit peacefully, unlock it to avoid warnings. - qApp->closeLock()->unlock(); - } - else { - // Request for write lock timed-out. This means - // that some critical action can be processed right now. - qDebug("Close lock timed-out."); - } -} - void FormMain::setupIcons() { IconFactory *icon_theme_factory = qApp->icons(); @@ -375,10 +329,6 @@ void FormMain::createConnections() { connect(m_statusBar->fullscreenSwitcher(), SIGNAL(toggled(bool)), m_ui->m_actionFullscreen, SLOT(setChecked(bool))); connect(m_ui->m_actionFullscreen, SIGNAL(toggled(bool)), m_statusBar->fullscreenSwitcher(), SLOT(setChecked(bool))); - // Core connections. - connect(qApp, SIGNAL(commitDataRequest(QSessionManager&)), this, SLOT(onCommitData(QSessionManager&))); - connect(qApp, SIGNAL(saveStateRequest(QSessionManager&)), this, SLOT(onSaveState(QSessionManager&))); - // Menu "File" connections. connect(m_ui->m_actionExportFeeds, SIGNAL(triggered()), this, SLOT(exportFeeds())); connect(m_ui->m_actionImportFeeds, SIGNAL(triggered()), this, SLOT(importFeeds())); @@ -398,9 +348,6 @@ void FormMain::createConnections() { connect(m_ui->m_actionReportBugGitHub, SIGNAL(triggered()), this, SLOT(reportABugOnGitHub())); connect(m_ui->m_actionReportBugBitBucket, SIGNAL(triggered()), this, SLOT(reportABugOnBitBucket())); - // General connections. - connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(onAboutToQuit())); - // Menu "Web browser" connections. connect(m_ui->m_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(loadWebBrowserMenu(int))); diff --git a/src/gui/formmain.h b/src/gui/formmain.h index b4ee7f9a1..23ddd33c0 100755 --- a/src/gui/formmain.h +++ b/src/gui/formmain.h @@ -60,6 +60,10 @@ class FormMain : public QMainWindow { // for given actions. QList allActions(); + // Loads/saves visual state of the application. + void loadSize(); + void saveSize(); + protected: // Creates all needed menus and sets them up. void prepareMenus(); @@ -73,10 +77,6 @@ class FormMain : public QMainWindow { // Sets up proper icons for this widget. void setupIcons(); - // Loads/saves visual state of the application. - void loadSize(); - void saveSize(); - public slots: // Processes incoming message from another RSS Guard instance. void processExecutionMessage(const QString &message); @@ -97,13 +97,6 @@ class FormMain : public QMainWindow { void switchMainMenu(); protected slots: - // Last-minute reactors. - void onCommitData(QSessionManager &manager); - void onSaveState(QSessionManager &manager); - - // Used for last-minute actions. - void onAboutToQuit(); - // Loads web browser menu if user selects to change tabs. void loadWebBrowserMenu(int index); diff --git a/src/miscellaneous/application.cpp b/src/miscellaneous/application.cpp index 4bf4f4fba..acb2c07fb 100755 --- a/src/miscellaneous/application.cpp +++ b/src/miscellaneous/application.cpp @@ -23,6 +23,7 @@ #include "gui/messagebox.h" #include "gui/formmain.h" +#include #include @@ -31,6 +32,9 @@ Application::Application(const QString &id, int &argc, char **argv) m_closeLock(NULL), m_userActions(QList()), m_mainForm(NULL), m_trayIcon(NULL), m_settings(NULL), m_system(NULL), m_skins(NULL), m_localization(NULL), m_icons(NULL), m_database(NULL) { + connect(this, SIGNAL(aboutToQuit()), this, SLOT(onAboutToQuit())); + connect(this, SIGNAL(commitDataRequest(QSessionManager&)), this, SLOT(onCommitData(QSessionManager&))); + connect(this, SIGNAL(saveStateRequest(QSessionManager&)), this, SLOT(onSaveState(QSessionManager&))); } Application::~Application() { @@ -87,8 +91,7 @@ void Application::showGuiMessage(const QString& title, const QString& message, QSystemTrayIcon::MessageIcon message_type, QWidget *parent, int duration) { if (SystemTrayIcon::isSystemTrayActivated()) { - // TODO: Maybe show OSD instead if tray icon bubble, - // depending on settings. + // TODO: Maybe show OSD instead if tray icon bubble, depending on settings. trayIcon()->showMessage(title, message, message_type, duration); } else { @@ -96,3 +99,49 @@ void Application::showGuiMessage(const QString& title, const QString& message, MessageBox::show(parent, (QMessageBox::Icon) message_type, title, message); } } + +void Application::onCommitData(QSessionManager &manager) { + qDebug("OS asked application to commit its data."); + + manager.setRestartHint(QSessionManager::RestartNever); + manager.release(); +} + +void Application::onSaveState(QSessionManager &manager) { + qDebug("OS asked application to save its state."); + + manager.setRestartHint(QSessionManager::RestartNever); + manager.release(); +} + +void Application::onAboutToQuit() { + // Make sure that we obtain close lock + // BEFORE even trying to quit the application. + bool locked_safely = closeLock()->tryLock(CLOSE_LOCK_TIMEOUT); + + processEvents(); + + qDebug("Cleaning up resources and saving application state."); + mainForm()->tabWidget()->feedMessageViewer()->quit(); + + if (settings()->value(APP_CFG_MESSAGES, "clear_read_on_exit", false).toBool()) { + mainForm()->tabWidget()->feedMessageViewer()->feedsView()->clearAllReadMessages(); + } + + database()->saveDatabase(); + mainForm()->saveSize(); + + if (locked_safely) { + // Application obtained permission to close + // in a safety way. + qDebug("Close lock was obtained safely."); + + // We locked the lock to exit peacefully, unlock it to avoid warnings. + closeLock()->unlock(); + } + else { + // Request for write lock timed-out. This means + // that some critical action can be processed right now. + qDebug("Close lock timed-out."); + } +} diff --git a/src/miscellaneous/application.h b/src/miscellaneous/application.h index aac70f744..400a9dccc 100755 --- a/src/miscellaneous/application.h +++ b/src/miscellaneous/application.h @@ -125,8 +125,7 @@ class Application : public QtSingleApplication { #else QString temp_directory = QDesktopServices::storageLocation(QDesktopServices::TempLocation); #endif - - return temp_directory; + return temp_directory; } // Access to application tray icon. Always use this in cooperation with @@ -146,6 +145,12 @@ class Application : public QtSingleApplication { return static_cast(QCoreApplication::instance()); } + private slots: + // Last-minute reactors. + void onCommitData(QSessionManager &manager); + void onSaveState(QSessionManager &manager); + void onAboutToQuit(); + private: // This read-write lock is used by application on its close. // Application locks this lock for WRITING.