Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,15 @@ find_package(LibXml2 REQUIRED)

set(PROJECT_SOURCES
src/main.cpp
src/maindialog.cpp src/maindialog.h src/maindialog.ui
src/maindialog.cpp src/maindialog.h

src/layoutmodel.cpp src/layoutmodel.h

src/environment.cpp src/environment.h
src/settings.cpp src/settings.h
src/xml.cpp src/xml.h
src/find-themes.cpp src/find-themes.h
src/pair.h

src/appearance.cpp src/appearance.h src/appearance.ui
src/behaviour.cpp src/behaviour.h src/behaviour.ui
Expand Down
23 changes: 18 additions & 5 deletions src/behaviour.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#include "behaviour.h"
#include <QVectorIterator>
#include "find-themes.h"
#include "macros.h"
#include "pair.h"
#include "settings.h"
#include "./ui_behaviour.h"

Expand All @@ -17,13 +19,24 @@ Behaviour::~Behaviour()
void Behaviour::activate()
{
/* Placement Policy */
QStringList policies = { "", "Automatic", "Cascade", "Center", "Cursor" };
ui->placementPolicy->addItems(policies);
ui->placementPolicy->setCurrentIndex(
policies.indexOf(getStr("/labwc_config/placement/policy")));
QVector<QSharedPointer<Pair>> policies;
policies.append(QSharedPointer<Pair>(new Pair("automatic", tr("Automatic"))));
policies.append(QSharedPointer<Pair>(new Pair("cascade", tr("Cascade"))));
policies.append(QSharedPointer<Pair>(new Pair("center", tr("Center"))));
policies.append(QSharedPointer<Pair>(new Pair("cursor", tr("Cursor"))));

QString current = getStr("/labwc_config/placement/policy");
int index = -1;
foreach (auto policy, policies) {
ui->placementPolicy->addItem(policy.get()->description(), QVariant(policy.get()->value()));
++index;
if (current == policy.get()->value()) {
ui->placementPolicy->setCurrentIndex(index);
}
}
}

void Behaviour::onApply()
{
setStr("/labwc_config/placement/policy", TEXT(ui->placementPolicy));
setStr("/labwc_config/placement/policy", DATA(ui->placementPolicy));
}
5 changes: 3 additions & 2 deletions src/environment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,9 @@ int environmentGetInt(QString key)
continue;
}
if (line->key == key) {
// TODO: Not ideal
return atoi(line->value.toStdString().c_str());
bool success = false;
int ret = line->value.toInt(&success);
return success ? ret : -1;
}
}
return -1;
Expand Down
7 changes: 7 additions & 0 deletions src/macros.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,11 @@

#define TEXT(widget) widget->currentText().toLatin1().data()

/*
* Typically used when a widget like a QComboBox contains translated text
* which obviously would not be very good to feed to rc.xml and we therefore
* need the QVariant userdata instead.
*/
#define DATA(widget) widget->currentData().toString().toLatin1().data()

#endif // MACROS_H
115 changes: 100 additions & 15 deletions src/maindialog.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QStackedWidget>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>
#include <language.h>
#include <mouse.h>
#include "appearance.h"
#include "behaviour.h"

#include <QDebug>
#include <QDir>
#include <QFile>
Expand All @@ -11,41 +25,112 @@
#include "log.h"
#include "macros.h"
#include "maindialog.h"
#include "./ui_maindialog.h"
#include "xml.h"

MainDialog::MainDialog(QWidget *parent) : QDialog(parent), ui(new Ui::MainDialog)
MainDialog::MainDialog(QWidget *parent) : QDialog(parent)
{
ui->setupUi(this);
ui->list->setFixedWidth(ui->list->sizeHintForColumn(0) + 2 * ui->list->frameWidth());
QObject::connect(ui->buttonBox, &QDialogButtonBox::clicked, [&](QAbstractButton *button) {
if (ui->buttonBox->standardButton(button) == QDialogButtonBox::Apply) {
resize(640, 480);

QVBoxLayout *verticalLayout = new QVBoxLayout(this);
verticalLayout->setContentsMargins(6, 6, 6, 6);

QWidget *widget = new QWidget(this);

QHBoxLayout *horizontalLayout = new QHBoxLayout(widget);
horizontalLayout->setContentsMargins(6, 6, 6, 6);

// List Widget on the Left
QListWidget *list = new QListWidget(widget);

QListWidgetItem *item0 = new QListWidgetItem(list);
item0->setIcon(QIcon::fromTheme("applications-graphics"));
item0->setText(tr("Appearance"));

QListWidgetItem *item1 = new QListWidgetItem(list);
item1->setIcon(QIcon::fromTheme("preferences-desktop"));
item1->setText(tr("Behaviour"));

QListWidgetItem *item2 = new QListWidgetItem(list);
item2->setIcon(QIcon::fromTheme("input-mouse"));
item2->setText(tr("Mouse & Touchpad"));

QListWidgetItem *item3 = new QListWidgetItem(list);
item3->setIcon(QIcon::fromTheme("preferences-desktop-locale"));
item3->setText(tr("Language & Region"));

QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(list->sizePolicy().hasHeightForWidth());
list->setSizePolicy(sizePolicy);
list->setSizeAdjustPolicy(QAbstractScrollArea::SizeAdjustPolicy::AdjustToContents);
list->setCurrentRow(0);
list->setFixedWidth(list->sizeHintForColumn(0) + 2 * list->frameWidth());

horizontalLayout->addWidget(list);

// The stack containing all the pages
QStackedWidget *stack = new QStackedWidget(widget);

m_pageAppearance = new Appearance();
stack->addWidget(m_pageAppearance);

m_pageBehaviour = new Behaviour();
stack->addWidget(m_pageBehaviour);

m_pageMouse = new Mouse();
stack->addWidget(m_pageMouse);

m_pageLanguage = new Language();
stack->addWidget(m_pageLanguage);

horizontalLayout->addWidget(stack);

verticalLayout->addWidget(widget);

m_buttonBox = new QDialogButtonBox(this);
m_buttonBox->setOrientation(Qt::Orientation::Horizontal);
m_buttonBox->setStandardButtons(QDialogButtonBox::StandardButton::Apply
| QDialogButtonBox::StandardButton::Close);
m_buttonBox->setCenterButtons(false);

verticalLayout->addWidget(m_buttonBox);

// Change pages when list items are clicked
QObject::connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int)));

// Close Button
QObject::connect(m_buttonBox, SIGNAL(rejected()), this, SLOT(reject()));

// Apply Button
QObject::connect(m_buttonBox, &QDialogButtonBox::clicked, [&](QAbstractButton *button) {
if (m_buttonBox->standardButton(button) == QDialogButtonBox::Apply) {
onApply();
}
});

activate();
}

MainDialog::~MainDialog()
{
delete ui;
xml_finish();
}

void MainDialog::activate()
{
ui->pageAppearance->activate();
ui->pageBehaviour->activate();
ui->pageMouse->activate();
ui->pageLanguage->activate();
m_pageAppearance->activate();
m_pageBehaviour->activate();
m_pageMouse->activate();
m_pageLanguage->activate();
}

void MainDialog::onApply()
{
ui->pageAppearance->onApply();
ui->pageBehaviour->onApply();
ui->pageMouse->onApply();
ui->pageLanguage->onApply();
m_pageAppearance->onApply();
m_pageBehaviour->onApply();
m_pageMouse->onApply();
m_pageLanguage->onApply();

// TODO: Get filename in a more consistent way - share common code with main.cpp
std::string config_home = std::getenv("HOME") + std::string("/.config/labwc");
Expand Down
17 changes: 11 additions & 6 deletions src/maindialog.h
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#ifndef MAINDIALOG_H
#define MAINDIALOG_H
#include <QDialog>
#include <QDialogButtonBox>
#include "settings.h"

QT_BEGIN_NAMESPACE
namespace Ui {
class MainDialog;
}
QT_END_NAMESPACE
class Appearance;
class Behaviour;
class Mouse;
class Language;

class MainDialog : public QDialog
{
Expand All @@ -20,6 +20,11 @@ class MainDialog : public QDialog

private:
void onApply();
Ui::MainDialog *ui;

QDialogButtonBox *m_buttonBox;
Appearance *m_pageAppearance;
Behaviour *m_pageBehaviour;
Mouse *m_pageMouse;
Language *m_pageLanguage;
};
#endif // MAINDIALOG_H
Loading