Implemented saving and loading settings

Visibility of toolbar, toolbar location, size of window, width of
table headers. Fixes #6
develop
tastytea 2018-11-03 12:59:49 +01:00
parent 096c74c4cc
commit 5163b4adbb
No known key found for this signature in database
GPG Key ID: CFC39497F1B26E07
10 changed files with 212 additions and 74 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "xdgcfg"]
path = xdgcfg
url = https://schlomp.space/tastytea/xdgcfg.git

View File

@ -1,6 +1,6 @@
cmake_minimum_required (VERSION 3.6) cmake_minimum_required (VERSION 3.6)
project (whyblocked project (whyblocked
VERSION 0.11.1 VERSION 0.12.0
LANGUAGES CXX LANGUAGES CXX
) )
@ -15,6 +15,7 @@ pkg_check_modules(SQLITE3 sqlite3)
find_package(Qt5Core CONFIG REQUIRED) find_package(Qt5Core CONFIG REQUIRED)
if(NOT WITHOUT_GUI) if(NOT WITHOUT_GUI)
find_package(Qt5Widgets CONFIG REQUIRED) find_package(Qt5Widgets CONFIG REQUIRED)
pkg_check_modules(LIBCONFIG REQUIRED libconfig++)
endif() endif()
set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD 14)
@ -29,9 +30,11 @@ set(CMAKE_AUTOUIC ON)
include_directories(${PROJECT_BINARY_DIR}) include_directories(${PROJECT_BINARY_DIR})
include_directories(${LIBXDG_BASEDIR_INCLUDE_DIRS}) include_directories(${LIBXDG_BASEDIR_INCLUDE_DIRS})
include_directories(${SQLITE3_INCLUDE_DIRS}) include_directories(${SQLITE3_INCLUDE_DIRS})
include_directories(${LIBCONFIG_INCLUDE_DIRS})
link_directories(${LIBXDG_BASEDIR_LIBRARY_DIRS}) link_directories(${LIBXDG_BASEDIR_LIBRARY_DIRS})
link_directories(${SQLITE3_LIBRARY_DIRS}) link_directories(${SQLITE3_LIBRARY_DIRS})
link_directories(${LIBCONFIG_LIBRARY_DIRS})
# Write version in header # Write version in header
configure_file ( configure_file (
@ -42,13 +45,17 @@ configure_file (
set(COMMON_LIBRARIES set(COMMON_LIBRARIES
${LIBXDG_BASEDIR_LIBRARIES} vsqlitepp stdc++fs) ${LIBXDG_BASEDIR_LIBRARIES} vsqlitepp stdc++fs)
add_executable(whyblocked src/interface_text.cpp src/whyblocked.cpp) add_executable(whyblocked
src/interface_text.cpp src/whyblocked.cpp)
target_link_libraries(whyblocked ${COMMON_LIBRARIES} Qt5::Core) target_link_libraries(whyblocked ${COMMON_LIBRARIES} Qt5::Core)
install(TARGETS whyblocked DESTINATION ${CMAKE_INSTALL_BINDIR}) install(TARGETS whyblocked DESTINATION ${CMAKE_INSTALL_BINDIR})
if(NOT WITHOUT_GUI) if(NOT WITHOUT_GUI)
add_executable(whyblocked-gui src/interface_qt.cpp src/whyblocked.cpp) add_executable(whyblocked-gui
target_link_libraries(whyblocked-gui ${COMMON_LIBRARIES} Qt5::Widgets) src/interface_qt.cpp src/whyblocked.cpp src/xdgcfg.cpp)
target_link_libraries(whyblocked-gui
${COMMON_LIBRARIES} Qt5::Widgets
${LIBCONFIG_LIBRARIES} stdc++fs)
install(TARGETS whyblocked-gui DESTINATION ${CMAKE_INSTALL_BINDIR}) install(TARGETS whyblocked-gui DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES de.tastytea.Whyblocked.desktop DESTINATION install(FILES de.tastytea.Whyblocked.desktop DESTINATION

View File

@ -18,22 +18,136 @@
#include <array> #include <array>
#include <QMessageBox> #include <QMessageBox>
#include <QDebug> #include <QDebug>
#include <iostream>
#include <QTranslator> #include <QTranslator>
#include <QLibraryInfo> #include <QLibraryInfo>
#include <QtCore/qmimedata.h> #include <QtCore/qmimedata.h>
#include <libconfig.h++>
#include "version.hpp" #include "version.hpp"
#include "whyblocked.hpp" #include "whyblocked.hpp"
#include "interface_qt.hpp" #include "interface_qt.hpp"
MainWindow::MainWindow(QMainWindow *parent) : QMainWindow(parent) MainWindow::MainWindow(QMainWindow *parent)
: QMainWindow(parent)
, _config("whyblocked.cfg")
, _headersize({ 250, 125, 125 })
{ {
setupUi(this); setupUi(this);
_model = new QStandardItemModel; _model = new QStandardItemModel;
tableview->setModel(_model); tableview->setModel(_model);
if (_config.read() == 0)
{
libconfig::Setting &root = _config.get_cfg().getRoot();
string key;
key = "size";
if (root.exists(key) && root[key.c_str()].isArray())
{
this->resize(root[key.c_str()][0], root[key.c_str()][1]);
}
key = "toolbar_position";
if (root.exists(key))
{
const string value = root[key.c_str()].c_str();
if (value == "top")
{
this->removeToolBar(toolbar);
this->addToolBar(Qt::TopToolBarArea, toolbar);
}
else if (value == "right")
{
this->removeToolBar(toolbar);
this->addToolBar(Qt::RightToolBarArea, toolbar);
}
else if (value == "bottom")
{
this->removeToolBar(toolbar);
this->addToolBar(Qt::BottomToolBarArea, toolbar);
}
else if (value == "left")
{
this->removeToolBar(toolbar);
this->addToolBar(Qt::LeftToolBarArea, toolbar);
}
}
key = "toolbar_visible";
if (root.exists(key))
{
toolbar->setVisible(root[key.c_str()]);
}
key = "table_headers";
if (root.exists(key) && root[key.c_str()].isArray())
{
const libconfig::Setting &value = root[key.c_str()];
_headersize = { value[0], value[1], value[2] };
}
}
populate_tableview(); populate_tableview();
} }
MainWindow::~MainWindow()
{
libconfig::Setting &root = _config.get_cfg().getRoot();
// We can't add an element that already exists, so we delete it beforehand.
for (const string &key :
{ "size", "toolbar_position", "toolbar_visible", "table_headers" })
{
if (root.exists(key))
{
root.remove(key);
}
}
libconfig::Setting &size = root.add("size", libconfig::Setting::TypeArray);
size.add(libconfig::Setting::TypeInt) = this->width();
size.add(libconfig::Setting::TypeInt) = this->height();
libconfig::Setting &pos = root.add("toolbar_position",
libconfig::Setting::TypeString);
if (toolbar->orientation() == Qt::Orientation::Horizontal)
{
if (toolbar-> geometry().top() < 100)
{
pos = "top";
}
else
{
pos = "bottom";
}
}
else
{
if (toolbar->geometry().left() == 0)
{
pos = "left";
}
else
{
pos = "right";
}
}
root.add("toolbar_visible", libconfig::Setting::TypeBoolean)
= !toolbar->isHidden();
libconfig::Setting &headers = root.add("table_headers",
libconfig::Setting::TypeArray);
headers.add(libconfig::Setting::TypeInt) =
tableview->horizontalHeader()->sectionSize(0);
headers.add(libconfig::Setting::TypeInt) =
tableview->horizontalHeader()->sectionSize(1);
headers.add(libconfig::Setting::TypeInt) =
tableview->horizontalHeader()->sectionSize(2);
_config.write();
}
void MainWindow::populate_tableview() void MainWindow::populate_tableview()
{ {
_model->clear(); _model->clear();
@ -43,7 +157,9 @@ void MainWindow::populate_tableview()
tr("Blocked/Silenced"), tr("Blocked/Silenced"),
tr("Reason") tr("Reason")
}); });
tableview->horizontalHeader()->resizeSection(0, 250); tableview->horizontalHeader()->resizeSection(0, _headersize[0]);
tableview->horizontalHeader()->resizeSection(1, _headersize[1]);
tableview->horizontalHeader()->resizeSection(2, _headersize[2]);
result_view result; result_view result;
if (database::view(result)) if (database::view(result))

View File

@ -18,10 +18,13 @@
#define INTERFACE_QT_HPP #define INTERFACE_QT_HPP
#include <string> #include <string>
#include <memory>
#include <array>
#include <QMainWindow> #include <QMainWindow>
#include <QStandardItemModel> #include <QStandardItemModel>
#include <QDialog> #include <QDialog>
#include <QtGui/qevent.h> #include <QtGui/qevent.h>
#include "xdgcfg.hpp"
#include "ui_whyblocked.h" #include "ui_whyblocked.h"
#include "ui_whyblocked_add.h" #include "ui_whyblocked_add.h"
@ -41,6 +44,7 @@ class MainWindow : public QMainWindow, private Ui::MainWindow
public: public:
explicit MainWindow(QMainWindow *parent = nullptr); explicit MainWindow(QMainWindow *parent = nullptr);
~MainWindow();
void add_row(const QString &user, const int &blocked, void add_row(const QString &user, const int &blocked,
const QString &reason); const QString &reason);
@ -53,6 +57,8 @@ private:
void dropEvent(QDropEvent *event); void dropEvent(QDropEvent *event);
QStandardItemModel *_model; QStandardItemModel *_model;
xdgcfg _config;
std::array<int, 3> _headersize;
private slots: private slots:
void add(); void add();

View File

@ -100,6 +100,9 @@
<property name="windowTitle"> <property name="windowTitle">
<string>Toolbar</string> <string>Toolbar</string>
</property> </property>
<property name="floatable">
<bool>false</bool>
</property>
<attribute name="toolBarArea"> <attribute name="toolBarArea">
<enum>TopToolBarArea</enum> <enum>TopToolBarArea</enum>
</attribute> </attribute>

1
src/xdgcfg.cpp Symbolic link
View File

@ -0,0 +1 @@
../xdgcfg/src/xdgcfg.cpp

1
src/xdgcfg.hpp Symbolic link
View File

@ -0,0 +1 @@
../xdgcfg/src/xdgcfg.hpp

View File

@ -69,12 +69,12 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="262"/> <location filename="../src/interface_qt.cpp" line="378"/>
<source>Insert receipt here.</source> <source>Insert receipt here.</source>
<translation>Beleg hier einfügen.</translation> <translation>Beleg hier einfügen.</translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="297"/> <location filename="../src/interface_qt.cpp" line="413"/>
<source>Added %1 to database.</source> <source>Added %1 to database.</source>
<translation>%1 zur Datenbank hinzugefügt.</translation> <translation>%1 zur Datenbank hinzugefügt.</translation>
</message> </message>
@ -102,158 +102,158 @@
<translation>Werkzeugleiste</translation> <translation>Werkzeugleiste</translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="128"/> <location filename="../src/whyblocked.ui" line="131"/>
<source>&amp;Database</source> <source>&amp;Database</source>
<translation>&amp;Datenbank</translation> <translation>&amp;Datenbank</translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="138"/> <location filename="../src/whyblocked.ui" line="141"/>
<source>&amp;Help</source> <source>&amp;Help</source>
<translation>&amp;Hilfe</translation> <translation>&amp;Hilfe</translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="151"/> <location filename="../src/whyblocked.ui" line="154"/>
<source>&amp;Add</source> <source>&amp;Add</source>
<translation>&amp;Hinzufügen</translation> <translation>&amp;Hinzufügen</translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="154"/> <location filename="../src/whyblocked.ui" line="157"/>
<source>Add user or instance</source> <source>Add user or instance</source>
<translation>Benutzer oder Instanz hinzufügen</translation> <translation>Benutzer oder Instanz hinzufügen</translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="157"/> <location filename="../src/whyblocked.ui" line="160"/>
<source>Ctrl+N</source> <source>Ctrl+N</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="166"/> <location filename="../src/whyblocked.ui" line="169"/>
<source>Re&amp;move</source> <source>Re&amp;move</source>
<translation>Ent&amp;fernen</translation> <translation>Ent&amp;fernen</translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="169"/> <location filename="../src/whyblocked.ui" line="172"/>
<source>Remove user or instance</source> <source>Remove user or instance</source>
<translation>Benutzer oder Instanz entfernen</translation> <translation>Benutzer oder Instanz entfernen</translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="172"/> <location filename="../src/whyblocked.ui" line="175"/>
<source>Del</source> <source>Del</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="181"/> <location filename="../src/whyblocked.ui" line="184"/>
<source>&amp;About</source> <source>&amp;About</source>
<translation>&amp;Über</translation> <translation>&amp;Über</translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="184"/> <location filename="../src/whyblocked.ui" line="187"/>
<source>About this application</source> <source>About this application</source>
<translation>Über dieses Programm</translation> <translation>Über dieses Programm</translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="193"/> <location filename="../src/whyblocked.ui" line="196"/>
<source>&amp;Reload</source> <source>&amp;Reload</source>
<translation>Neu &amp;laden</translation> <translation>Neu &amp;laden</translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="196"/> <location filename="../src/whyblocked.ui" line="199"/>
<source>Reload database</source> <source>Reload database</source>
<translation>Datenbank neu laden</translation> <translation>Datenbank neu laden</translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="199"/> <location filename="../src/whyblocked.ui" line="202"/>
<source>Ctrl+R</source> <source>Ctrl+R</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="208"/> <location filename="../src/whyblocked.ui" line="211"/>
<source>&amp;Quit</source> <source>&amp;Quit</source>
<translation>&amp;Beenden</translation> <translation>&amp;Beenden</translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="211"/> <location filename="../src/whyblocked.ui" line="214"/>
<source>Quit application</source> <source>Quit application</source>
<translation>Programm beenden</translation> <translation>Programm beenden</translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="214"/> <location filename="../src/whyblocked.ui" line="217"/>
<source>Ctrl+Q</source> <source>Ctrl+Q</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="223"/> <location filename="../src/whyblocked.ui" line="226"/>
<source>&amp;Edit</source> <source>&amp;Edit</source>
<translation>B&amp;earbeiten</translation> <translation>B&amp;earbeiten</translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="226"/> <location filename="../src/whyblocked.ui" line="229"/>
<location filename="../src/interface_qt.cpp" line="95"/> <location filename="../src/interface_qt.cpp" line="211"/>
<source>Edit entry</source> <source>Edit entry</source>
<translation>Eintrag bearbeiten</translation> <translation>Eintrag bearbeiten</translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="42"/> <location filename="../src/interface_qt.cpp" line="156"/>
<source>User/Instance</source> <source>User/Instance</source>
<translation>Benutzer/Instanz</translation> <translation>Benutzer/Instanz</translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="43"/> <location filename="../src/interface_qt.cpp" line="157"/>
<source>Blocked/Silenced</source> <source>Blocked/Silenced</source>
<translation>Blockiert/Gedämpft</translation> <translation>Blockiert/Gedämpft</translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="44"/> <location filename="../src/interface_qt.cpp" line="158"/>
<source>Reason</source> <source>Reason</source>
<translation>Begründung</translation> <translation>Begründung</translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="59"/> <location filename="../src/interface_qt.cpp" line="175"/>
<source>Database loaded.</source> <source>Database loaded.</source>
<translation>Datenbank geladen.</translation> <translation>Datenbank geladen.</translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="69"/> <location filename="../src/interface_qt.cpp" line="185"/>
<source>blocked</source> <source>blocked</source>
<translation>blockiert</translation> <translation>blockiert</translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="73"/> <location filename="../src/interface_qt.cpp" line="189"/>
<source>silenced</source> <source>silenced</source>
<translation>gedämpft</translation> <translation>gedämpft</translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="89"/> <location filename="../src/interface_qt.cpp" line="205"/>
<source>Invalid selection</source> <source>Invalid selection</source>
<translation>Ungültige Auswahl</translation> <translation>Ungültige Auswahl</translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="90"/> <location filename="../src/interface_qt.cpp" line="206"/>
<source>Please select only 1 entry to edit.</source> <source>Please select only 1 entry to edit.</source>
<translation>Bitte nur 1 Eintrag zum bearbeiten auswählen.</translation> <translation>Bitte nur 1 Eintrag zum bearbeiten auswählen.</translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="127"/> <location filename="../src/interface_qt.cpp" line="243"/>
<source>Removed %1 from database.</source> <source>Removed %1 from database.</source>
<translation>%1 aus der Datenbank gelöscht.</translation> <translation>%1 aus der Datenbank gelöscht.</translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="135"/> <location filename="../src/interface_qt.cpp" line="251"/>
<source>Select data to remove.</source> <source>Select data to remove.</source>
<translation>Wähle Daten zum löschen aus.</translation> <translation>Wähle Daten zum löschen aus.</translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="141"/> <location filename="../src/interface_qt.cpp" line="257"/>
<source>About Whyblocked</source> <source>About Whyblocked</source>
<translation>Über Whyblocked</translation> <translation>Über Whyblocked</translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="142"/> <location filename="../src/interface_qt.cpp" line="258"/>
<source>&lt;p&gt;&lt;b&gt;Whyblocked&lt;/b&gt; %1&lt;/p&gt;&lt;p&gt;Reminds you why you blocked someone.&lt;/p&gt;&lt;p&gt;Sourcecode: &lt;a href=&quot;https://schlomp.space/tastytea/whyblocked&quot;&gt;https://schlomp.space/tastytea/whyblocked&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;small&gt;Copyright © 2018 &lt;a href=&quot;mailto:tastytea@tastytea.de&quot;&gt;tastytea&lt;/a&gt;.&lt;br&gt;Licence GPLv3: &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot;&gt;GNU GPL version 3&lt;/a&gt;.&lt;br&gt;This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions.&lt;/small&gt;&lt;/p&gt;</source> <source>&lt;p&gt;&lt;b&gt;Whyblocked&lt;/b&gt; %1&lt;/p&gt;&lt;p&gt;Reminds you why you blocked someone.&lt;/p&gt;&lt;p&gt;Sourcecode: &lt;a href=&quot;https://schlomp.space/tastytea/whyblocked&quot;&gt;https://schlomp.space/tastytea/whyblocked&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;small&gt;Copyright © 2018 &lt;a href=&quot;mailto:tastytea@tastytea.de&quot;&gt;tastytea&lt;/a&gt;.&lt;br&gt;Licence GPLv3: &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot;&gt;GNU GPL version 3&lt;/a&gt;.&lt;br&gt;This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions.&lt;/small&gt;&lt;/p&gt;</source>
<translation>&lt;p&gt;&lt;b&gt;Whyblocked&lt;/b&gt; %1&lt;/p&gt;&lt;p&gt;Erinnert dich, warum du jemanden blockiertest.&lt;/p&gt;&lt;p&gt;Quelltext: &lt;a href=&quot;https://schlomp.space/tastytea/whyblocked&quot;&gt;https://schlomp.space/tastytea/whyblocked&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;small&gt;Copyright © 2018 &lt;a href=&quot;mailto:tastytea@tastytea.de&quot;&gt;tastytea&lt;/a&gt;.&lt;br&gt;Lizenz GPLv3: &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot;&gt;GNU GPL version 3&lt;/a&gt;.&lt;br&gt;Für dieses Programm besteht KEINERLEI GARANTIE. Dies ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen.&lt;/small&gt;&lt;/p&gt;</translation> <translation>&lt;p&gt;&lt;b&gt;Whyblocked&lt;/b&gt; %1&lt;/p&gt;&lt;p&gt;Erinnert dich, warum du jemanden blockiertest.&lt;/p&gt;&lt;p&gt;Quelltext: &lt;a href=&quot;https://schlomp.space/tastytea/whyblocked&quot;&gt;https://schlomp.space/tastytea/whyblocked&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;small&gt;Copyright © 2018 &lt;a href=&quot;mailto:tastytea@tastytea.de&quot;&gt;tastytea&lt;/a&gt;.&lt;br&gt;Lizenz GPLv3: &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot;&gt;GNU GPL version 3&lt;/a&gt;.&lt;br&gt;Für dieses Programm besteht KEINERLEI GARANTIE. Dies ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen.&lt;/small&gt;&lt;/p&gt;</translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="165"/> <location filename="../src/interface_qt.cpp" line="281"/>
<source>Receipts:</source> <source>Receipts:</source>
<translation>Belege:</translation> <translation>Belege:</translation>
</message> </message>

View File

@ -69,12 +69,12 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="262"/> <location filename="../src/interface_qt.cpp" line="378"/>
<source>Insert receipt here.</source> <source>Insert receipt here.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="297"/> <location filename="../src/interface_qt.cpp" line="413"/>
<source>Added %1 to database.</source> <source>Added %1 to database.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -102,158 +102,158 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="128"/> <location filename="../src/whyblocked.ui" line="131"/>
<source>&amp;Database</source> <source>&amp;Database</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="138"/> <location filename="../src/whyblocked.ui" line="141"/>
<source>&amp;Help</source> <source>&amp;Help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="151"/> <location filename="../src/whyblocked.ui" line="154"/>
<source>&amp;Add</source> <source>&amp;Add</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="154"/> <location filename="../src/whyblocked.ui" line="157"/>
<source>Add user or instance</source> <source>Add user or instance</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="157"/> <location filename="../src/whyblocked.ui" line="160"/>
<source>Ctrl+N</source> <source>Ctrl+N</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="166"/> <location filename="../src/whyblocked.ui" line="169"/>
<source>Re&amp;move</source> <source>Re&amp;move</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="169"/> <location filename="../src/whyblocked.ui" line="172"/>
<source>Remove user or instance</source> <source>Remove user or instance</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="172"/> <location filename="../src/whyblocked.ui" line="175"/>
<source>Del</source> <source>Del</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="181"/> <location filename="../src/whyblocked.ui" line="184"/>
<source>&amp;About</source> <source>&amp;About</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="184"/> <location filename="../src/whyblocked.ui" line="187"/>
<source>About this application</source> <source>About this application</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="193"/> <location filename="../src/whyblocked.ui" line="196"/>
<source>&amp;Reload</source> <source>&amp;Reload</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="196"/> <location filename="../src/whyblocked.ui" line="199"/>
<source>Reload database</source> <source>Reload database</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="199"/> <location filename="../src/whyblocked.ui" line="202"/>
<source>Ctrl+R</source> <source>Ctrl+R</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="208"/> <location filename="../src/whyblocked.ui" line="211"/>
<source>&amp;Quit</source> <source>&amp;Quit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="211"/> <location filename="../src/whyblocked.ui" line="214"/>
<source>Quit application</source> <source>Quit application</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="214"/> <location filename="../src/whyblocked.ui" line="217"/>
<source>Ctrl+Q</source> <source>Ctrl+Q</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="223"/> <location filename="../src/whyblocked.ui" line="226"/>
<source>&amp;Edit</source> <source>&amp;Edit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/whyblocked.ui" line="226"/> <location filename="../src/whyblocked.ui" line="229"/>
<location filename="../src/interface_qt.cpp" line="95"/> <location filename="../src/interface_qt.cpp" line="211"/>
<source>Edit entry</source> <source>Edit entry</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="42"/> <location filename="../src/interface_qt.cpp" line="156"/>
<source>User/Instance</source> <source>User/Instance</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="43"/> <location filename="../src/interface_qt.cpp" line="157"/>
<source>Blocked/Silenced</source> <source>Blocked/Silenced</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="44"/> <location filename="../src/interface_qt.cpp" line="158"/>
<source>Reason</source> <source>Reason</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="59"/> <location filename="../src/interface_qt.cpp" line="175"/>
<source>Database loaded.</source> <source>Database loaded.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="69"/> <location filename="../src/interface_qt.cpp" line="185"/>
<source>blocked</source> <source>blocked</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="73"/> <location filename="../src/interface_qt.cpp" line="189"/>
<source>silenced</source> <source>silenced</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="89"/> <location filename="../src/interface_qt.cpp" line="205"/>
<source>Invalid selection</source> <source>Invalid selection</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="90"/> <location filename="../src/interface_qt.cpp" line="206"/>
<source>Please select only 1 entry to edit.</source> <source>Please select only 1 entry to edit.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="127"/> <location filename="../src/interface_qt.cpp" line="243"/>
<source>Removed %1 from database.</source> <source>Removed %1 from database.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="135"/> <location filename="../src/interface_qt.cpp" line="251"/>
<source>Select data to remove.</source> <source>Select data to remove.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="141"/> <location filename="../src/interface_qt.cpp" line="257"/>
<source>About Whyblocked</source> <source>About Whyblocked</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="142"/> <location filename="../src/interface_qt.cpp" line="258"/>
<source>&lt;p&gt;&lt;b&gt;Whyblocked&lt;/b&gt; %1&lt;/p&gt;&lt;p&gt;Reminds you why you blocked someone.&lt;/p&gt;&lt;p&gt;Sourcecode: &lt;a href=&quot;https://schlomp.space/tastytea/whyblocked&quot;&gt;https://schlomp.space/tastytea/whyblocked&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;small&gt;Copyright © 2018 &lt;a href=&quot;mailto:tastytea@tastytea.de&quot;&gt;tastytea&lt;/a&gt;.&lt;br&gt;Licence GPLv3: &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot;&gt;GNU GPL version 3&lt;/a&gt;.&lt;br&gt;This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions.&lt;/small&gt;&lt;/p&gt;</source> <source>&lt;p&gt;&lt;b&gt;Whyblocked&lt;/b&gt; %1&lt;/p&gt;&lt;p&gt;Reminds you why you blocked someone.&lt;/p&gt;&lt;p&gt;Sourcecode: &lt;a href=&quot;https://schlomp.space/tastytea/whyblocked&quot;&gt;https://schlomp.space/tastytea/whyblocked&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;small&gt;Copyright © 2018 &lt;a href=&quot;mailto:tastytea@tastytea.de&quot;&gt;tastytea&lt;/a&gt;.&lt;br&gt;Licence GPLv3: &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot;&gt;GNU GPL version 3&lt;/a&gt;.&lt;br&gt;This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions.&lt;/small&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/interface_qt.cpp" line="165"/> <location filename="../src/interface_qt.cpp" line="281"/>
<source>Receipts:</source> <source>Receipts:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

1
xdgcfg Submodule

@ -0,0 +1 @@
Subproject commit 6c0976baa74f959ed3218af56e56ff58202a5a05