Remember and synchronize entry column sizes.

Closes #159
This commit is contained in:
Felix Geyer 2014-05-17 12:51:16 +02:00
parent a25b28ffee
commit e776de8eeb
4 changed files with 113 additions and 18 deletions

View file

@ -24,28 +24,16 @@ DatabaseWidgetStateSync::DatabaseWidgetStateSync(QObject* parent)
: QObject(parent)
, m_activeDbWidget(Q_NULLPTR)
{
QVariantList variantList = config()->get("GUI/SplitterState").toList();
Q_FOREACH (const QVariant& var, variantList) {
bool ok;
int size = var.toInt(&ok);
if (ok) {
m_splitterSizes.append(size);
}
else {
m_splitterSizes.clear();
break;
}
}
m_splitterSizes = variantToIntList(config()->get("GUI/SplitterState"));
m_columnSizesList = variantToIntList(config()->get("GUI/EntryListColumnSizes"));
m_columnSizesSearch = variantToIntList(config()->get("GUI/EntrySearchColumnSizes"));
}
DatabaseWidgetStateSync::~DatabaseWidgetStateSync()
{
QVariantList variantList;
Q_FOREACH (int size, m_splitterSizes) {
variantList.append(size);
}
config()->set("GUI/SplitterState", variantList);
config()->set("GUI/SplitterState", intListToVariant(m_splitterSizes));
config()->set("GUI/EntryListColumnSizes", intListToVariant(m_columnSizesList));
config()->set("GUI/EntrySearchColumnSizes", intListToVariant(m_columnSizesSearch));
}
void DatabaseWidgetStateSync::setActive(DatabaseWidget* dbWidget)
@ -61,8 +49,35 @@ void DatabaseWidgetStateSync::setActive(DatabaseWidget* dbWidget)
m_activeDbWidget->setSplitterSizes(m_splitterSizes);
}
if (m_activeDbWidget->isGroupSelected()) {
restoreListView();
}
else {
restoreSearchView();
}
connect(m_activeDbWidget, SIGNAL(splitterSizesChanged()),
SLOT(updateSplitterSizes()));
connect(m_activeDbWidget, SIGNAL(entryColumnSizesChanged()),
SLOT(updateColumnSizes()));
connect(m_activeDbWidget, SIGNAL(listModeActivated()),
SLOT(restoreListView()));
connect(m_activeDbWidget, SIGNAL(searchModeActivated()),
SLOT(restoreSearchView()));
}
}
void DatabaseWidgetStateSync::restoreListView()
{
if (!m_columnSizesList.isEmpty()) {
m_activeDbWidget->setEntryViewHeaderSizes(m_columnSizesList);
}
}
void DatabaseWidgetStateSync::restoreSearchView()
{
if (!m_columnSizesSearch.isEmpty()) {
m_activeDbWidget->setEntryViewHeaderSizes(m_columnSizesSearch);
}
}
@ -70,3 +85,44 @@ void DatabaseWidgetStateSync::updateSplitterSizes()
{
m_splitterSizes = m_activeDbWidget->splitterSizes();
}
void DatabaseWidgetStateSync::updateColumnSizes()
{
if (m_activeDbWidget->isGroupSelected()) {
m_columnSizesList = m_activeDbWidget->entryHeaderViewSizes();
}
else {
m_columnSizesSearch = m_activeDbWidget->entryHeaderViewSizes();
}
}
QList<int> DatabaseWidgetStateSync::variantToIntList(const QVariant& variant)
{
QVariantList list = variant.toList();
QList<int> result;
Q_FOREACH (const QVariant& var, list) {
bool ok;
int size = var.toInt(&ok);
if (ok) {
result.append(size);
}
else {
result.clear();
break;
}
}
return result;
}
QVariant DatabaseWidgetStateSync::intListToVariant(const QList<int>& list)
{
QVariantList result;
Q_FOREACH (int value, list) {
result.append(value);
}
return result;
}