swaymux/mainwindow.cpp
2024-03-12 11:48:43 +01:00

97 lines
3.6 KiB
C++

#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include "tree/SwayTreeModel.h"
#include "Keys/HelpKeyListener.h"
#include "Keys/CloseHelpKeyListener.h"
#include "Keys/CreateWorkspaceKeyListener.h"
#include "Keys/CloseSwaymuxKeyListener.h"
#include "Keys/SwitchToKeybindListener.h"
#include "Keys/PrevOutputKeyListener.h"
#include "Keys/NextOutputKeyListener.h"
#include "Keys/CloseKeyListener.h"
#include "Keys/MoveToScratchpadKeyListener.h"
#include "Keys/RestoreKeyListener.h"
#include "Keys/ToggleDetailsKeyListener.h"
#include <QTimer>
#include <iostream>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
model = new SwayTreeModel(ui->treeView);
ui->statusbar->showMessage(QString::fromStdString("Press ? for keybind listing"));
ui->treeView->setSelectionMode(QAbstractItemView::ExtendedSelection);
updateModel();
swayTreeKeyHandler = new KeyHandler();
swayTreeKeyHandler->addListener(new HelpKeyListener(ui->help_page));
swayTreeKeyHandler->addListener(new CloseSwaymuxKeyListener());
swayTreeKeyHandler->addListener(new CreateWorkspaceKeyListener(this));
swayTreeKeyHandler->addListener(new SwitchToKeybindListener(model, ui->treeView));
swayTreeKeyHandler->addListener(new PrevOutputKeyListener(model, ui->treeView));
swayTreeKeyHandler->addListener(new NextOutputKeyListener(model, ui->treeView));
swayTreeKeyHandler->addListener(new CloseKeyListener(this));
swayTreeKeyHandler->addListener(new MoveToScratchpadKeyListener(this));
swayTreeKeyHandler->addListener(new RestoreKeyListener(this));
swayTreeKeyHandler->addListener(new ToggleDetailsKeyListener(this));
closeHelpKeyHandler = new KeyHandler(ui->tree_page);
closeHelpKeyHandler->addListener(new CloseHelpKeyListener(ui->tree_page));
ui->stackedWidget->setCurrentWidget(ui->tree_page);
ui->treeView->installEventFilter(swayTreeKeyHandler);
ui->tableView->setModel(swayTreeKeyHandler);
ui->tableView->resizeColumnsToContents();
ui->tableView->installEventFilter(closeHelpKeyHandler);
ui->windowDetails->hide();
selChanged();
connect( ui->treeView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
this, SLOT(selChanged()), Qt::DirectConnection ) ;
}
MainWindow::~MainWindow() {
delete ui;
delete model;
delete swayTreeKeyHandler;
delete closeHelpKeyHandler;
}
void MainWindow::updateModel() const {
ui->windowDetails->setModel(nullptr);
ui->treeView->setModel(nullptr);
auto *focused = model->getRoot() == nullptr ? nullptr : model->getRoot()->findFocused();
int id;
if (focused != nullptr)
id = focused->node.id;
model->generateRoot();
if (focused == nullptr)
focused = model->getRoot()->findFocused();
else
focused = model->getRoot()->findById(id);
if (focused != nullptr)
focused->node.focused = true;
ui->treeView->setModel(model);
ui->treeView->expandAll();
ui->treeView->selectionModel()->setCurrentIndex(model->findIndexByNode(focused), QItemSelectionModel::ClearAndSelect);
for (int c = 0; c < model->columnCount(); ++c)
ui->treeView->resizeColumnToContents(c);
selChanged();
}
void MainWindow::selChanged() const {
auto current = ui->treeView->selectionModel()->currentIndex();
auto *selected = model->getSelectedNode(current);
ui->windowDetails->setModel(nullptr);
ui->windowDetails->setModel(&selected->node);
ui->windowDetails->resizeColumnsToContents();
ui->windowDetails->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
}