openscad/src/launchingscreen.cc

146 lines
4.2 KiB
C++

#include <QFileInfo>
#include <QSettings>
#include <QListWidgetItem>
#include "openscad.h"
#include "launchingscreen.h"
#include "ui_launchingscreen.h"
#include "UIUtils.h"
LaunchingScreen *LaunchingScreen::inst = NULL;
LaunchingScreen *LaunchingScreen::getDialog() {
return LaunchingScreen::inst;
}
// Called (possibly multiple times) by EventFilter on MacOS, e.g.
// when the user opens files from Finder.
void LaunchingScreen::openFile(const QString &filename)
{
QVariant v(filename);
this->checkOpen(v);
this->done(QDialog::Accepted);
}
LaunchingScreen::LaunchingScreen(QWidget *parent) : QDialog(parent)
{
LaunchingScreen::inst = this;
setupUi(this);
this->setStyleSheet("QDialog {background-image:url(':/icons/background.png')} QPushButton {color:white;}");
this->versionNumberLabel->setText("OpenSCAD " + QString::fromStdString(openscad_displayversionnumber));
QStringList recentFiles = UIUtils::recentFiles();
for (int a = 0;a < recentFiles.size();a++) {
QFileInfo fileInfo(recentFiles[a]);
QListWidgetItem *item = new QListWidgetItem(fileInfo.fileName());
item->setData(Qt::ToolTipRole, fileInfo.canonicalPath());
item->setData(Qt::UserRole, fileInfo.canonicalFilePath());
this->recentList->addItem(item);
}
foreach(const QString &category, UIUtils::exampleCategories())
{
QFileInfoList examples = UIUtils::exampleFiles(category);
QTreeWidgetItem *categoryItem = new QTreeWidgetItem(QStringList(gettext(category.toStdString().c_str())));
foreach(const QFileInfo &example, examples)
{
QTreeWidgetItem *exampleItem = new QTreeWidgetItem(QStringList(example.fileName()));
exampleItem->setData(0, Qt::UserRole, example.canonicalFilePath());
categoryItem->addChild(exampleItem);
}
this->treeWidget->addTopLevelItem(categoryItem);
}
connect(this->pushButtonNew, SIGNAL(clicked()), this, SLOT(accept()));
connect(this->pushButtonOpen, SIGNAL(clicked()), this, SLOT(openUserFile()));
connect(this->pushButtonHelp, SIGNAL(clicked()), this, SLOT(openUserManualURL()));
connect(this->recentList->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(enableRecentButton(const QModelIndex &, const QModelIndex &)));
connect(this->recentList, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(openRecent()));
connect(this->treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(enableExampleButton(QTreeWidgetItem *, QTreeWidgetItem *)));
connect(this->treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *,int)), this, SLOT(openExample()));
connect(this->openRecentButton, SIGNAL(clicked()), this, SLOT(openRecent()));
connect(this->openExampleButton, SIGNAL(clicked()), this, SLOT(openExample()));
connect(this->checkBox, SIGNAL(toggled(bool)), this, SLOT(checkboxState(bool)));
}
LaunchingScreen::~LaunchingScreen()
{
LaunchingScreen::inst = NULL;
}
QStringList LaunchingScreen::selectedFiles()
{
return this->files;
}
void LaunchingScreen::enableRecentButton(const QModelIndex &, const QModelIndex &)
{
this->openRecentButton->setEnabled(true);
this->openRecentButton->setDefault(true);
}
void LaunchingScreen::openRecent()
{
QListWidgetItem *item = this->recentList->currentItem();
if (item == NULL) {
return;
}
checkOpen(item->data(Qt::UserRole));
}
void LaunchingScreen::enableExampleButton(QTreeWidgetItem *current, QTreeWidgetItem *)
{
const bool enable = current->childCount() == 0;
this->openExampleButton->setEnabled(enable);
this->openExampleButton->setDefault(true);
}
void LaunchingScreen::openExample()
{
QTreeWidgetItem *item = this->treeWidget->currentItem();
if (item == NULL) {
return;
}
checkOpen(item->data(0, Qt::UserRole));
}
void LaunchingScreen::checkOpen(const QVariant &data)
{
const QString path = data.toString();
if (path.isEmpty()) {
return;
}
this->files.append(path);
accept();
}
void LaunchingScreen::openUserFile()
{
QFileInfo fileInfo = UIUtils::openFile(this);
if (fileInfo.exists()) {
this->files.append(fileInfo.canonicalFilePath());
accept();
}
}
void LaunchingScreen::checkboxState(bool state)
{
QSettings settings;
settings.setValue("launcher/showOnStartup", !state);
}
void LaunchingScreen::openUserManualURL()
{
UIUtils::openUserManualURL();
}