From c272144867f94dc7e99f8333bec5dd052878ecd8 Mon Sep 17 00:00:00 2001 From: Robert Bieber Date: Thu, 15 Jul 2010 21:39:09 +0000 Subject: Theme Editor: Added New Project feature git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27439 a1c6a512-1295-4272-9138-f99709370657 --- utils/themeeditor/gui/editorwindow.cpp | 192 ++++++++++++++++++++++++++------- 1 file changed, 152 insertions(+), 40 deletions(-) (limited to 'utils/themeeditor/gui/editorwindow.cpp') diff --git a/utils/themeeditor/gui/editorwindow.cpp b/utils/themeeditor/gui/editorwindow.cpp index 247109cc19..043c08badd 100644 --- a/utils/themeeditor/gui/editorwindow.cpp +++ b/utils/themeeditor/gui/editorwindow.cpp @@ -24,12 +24,16 @@ #include "ui_editorwindow.h" #include "rbfontcache.h" #include "rbtextcache.h" +#include "newprojectdialog.h" #include #include #include #include +#include #include +#include +#include EditorWindow::EditorWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::EditorWindow), parseTreeSelection(0) @@ -200,6 +204,8 @@ void EditorWindow::setupMenus() /* Connecting the document management actions */ QObject::connect(ui->actionNew_Document, SIGNAL(triggered()), this, SLOT(newTab())); + QObject::connect(ui->actionNew_Project, SIGNAL(triggered()), + this, SLOT(newProject())); QObject::connect(ui->actionToolbarNew, SIGNAL(triggered()), this, SLOT(newTab())); @@ -261,6 +267,93 @@ void EditorWindow::newTab() ui->editorTabs->setCurrentWidget(doc); } +void EditorWindow::newProject() +{ + NewProjectDialog dialog(this); + if(dialog.exec() == QDialog::Rejected) + return; + + /* Assembling the new project if the dialog was accepted */ + NewProjectDialog::NewProjectInfo info = dialog.results(); + + QDir path(info.path); + if(!path.exists()) + { + QMessageBox::warning(this, tr("Error Creating Project"), tr("Error:" + " Project directory does not exist")); + return; + } + + if(path.exists(info.name)) + { + QMessageBox::warning(this, tr("Error Creating Project"), tr("Error:" + " Project directory already exists")); + return; + } + + if(!path.mkdir(info.name)) + { + QMessageBox::warning(this, tr("Error Creating Project"), tr("Error:" + " Project directory not writeable")); + return; + } + + path.cd(info.name); + + /* Making standard directories */ + path.mkdir("fonts"); + path.mkdir("icons"); + path.mkdir("backdrops"); + + /* Adding the desired wps documents */ + path.mkdir("wps"); + path.cd("wps"); + + if(info.sbs) + createFile(path.filePath(info.name + ".sbs"), tr("# SBS Document\n")); + if(info.wps) + createFile(path.filePath(info.name + ".wps"), tr("# WPS Document\n")); + if(info.fms) + createFile(path.filePath(info.name + ".fms"), tr("# FMS Document\n")); + if(info.rsbs) + createFile(path.filePath(info.name + ".rsbs"), tr("# RSBS Document\n")); + if(info.rwps) + createFile(path.filePath(info.name + ".rwps"), tr("# RWPS Document\n")); + if(info.rfms) + createFile(path.filePath(info.name + ".rfms"), tr("# RFMS Document\n")); + + path.mkdir(info.name); + + path.cdUp(); + + /* Adding the config file */ + path.mkdir("themes"); + path.cd("themes"); + + /* Generating the config file */ + QString config = tr("# Config file for ") + info.name + "\n"; + QString wpsBase = "/.rockbox/wps/"; + if(info.sbs) + config.append("sbs: " + wpsBase + info.name + ".sbs\n"); + if(info.wps) + config.append("wps: " + wpsBase + info.name + ".wps\n"); + if(info.fms) + config.append("fms: " + wpsBase + info.name + ".fms\n"); + if(info.rsbs) + config.append("rsbs: " + wpsBase + info.name + ".rsbs\n"); + if(info.rwps) + config.append("rwps: " + wpsBase + info.name + ".rwps\n"); + if(info.rfms) + config.append("rfms: " + wpsBase + info.name + ".rfms\n"); + + + createFile(path.filePath(info.name + ".cfg"), + config); + + /* Opening the new project */ + loadProjectFile(path.filePath(info.name + ".cfg")); +} + void EditorWindow::shiftTab(int index) { TabContent* widget = dynamic_cast @@ -424,47 +517,8 @@ void EditorWindow::openProject() fileName = QFileDialog::getOpenFileName(this, tr("Open Project"), directory, ProjectModel::fileFilter()); - if(QFile::exists(fileName)) - { - - if(project) - project->deleteLater(); - - ui->actionClose_Project->setEnabled(true); - - project = new ProjectModel(fileName, this); - ui->projectTree->setModel(project); - - if(project->getSetting("#screenwidth") != "") - deviceConfig->setData("screenwidth", - project->getSetting("#screenwidth")); - if(project->getSetting("#screenheight") != "") - deviceConfig->setData("screenheight", - project->getSetting("#screenheight")); - - QObject::connect(ui->projectTree, SIGNAL(activated(QModelIndex)), - project, SLOT(activated(QModelIndex))); - - fileName.chop(fileName.length() - fileName.lastIndexOf('/') - 1); - settings.setValue("defaultDirectory", fileName); - - for(int i = 0; i < ui->editorTabs->count(); i++) - { - TabContent* doc = dynamic_cast - (ui->editorTabs->widget(i)); - if(doc->type() == TabContent::Skin) - { - dynamic_cast(doc)->setProject(project); - if(i == ui->editorTabs->currentIndex()) - { - viewer->setScene(dynamic_cast(doc)->scene()); - } - } - } - - } - settings.endGroup(); + loadProjectFile(fileName); } @@ -657,3 +711,61 @@ void EditorWindow::sizeColumns() ui->parseTree->resizeColumnToContents(ParseTreeModel::typeColumn); ui->parseTree->resizeColumnToContents(ParseTreeModel::valueColumn); } + +void EditorWindow::loadProjectFile(QString fileName) +{ + QSettings settings; + settings.beginGroup("ProjectModel"); + + if(QFile::exists(fileName)) + { + if(project) + project->deleteLater(); + + ui->actionClose_Project->setEnabled(true); + + project = new ProjectModel(fileName, this); + ui->projectTree->setModel(project); + + if(project->getSetting("#screenwidth") != "") + deviceConfig->setData("screenwidth", + project->getSetting("#screenwidth")); + if(project->getSetting("#screenheight") != "") + deviceConfig->setData("screenheight", + project->getSetting("#screenheight")); + + QObject::connect(ui->projectTree, SIGNAL(activated(QModelIndex)), + project, SLOT(activated(QModelIndex))); + + fileName.chop(fileName.length() - fileName.lastIndexOf('/') - 1); + settings.setValue("defaultDirectory", fileName); + + for(int i = 0; i < ui->editorTabs->count(); i++) + { + TabContent* doc = dynamic_cast + (ui->editorTabs->widget(i)); + if(doc->type() == TabContent::Skin) + { + dynamic_cast(doc)->setProject(project); + if(i == ui->editorTabs->currentIndex()) + { + viewer->setScene(dynamic_cast(doc)->scene()); + } + } + } + + } + + settings.endGroup(); + +} + +void EditorWindow::createFile(QString filename, QString contents) +{ + QFile fout(filename); + fout.open(QFile::WriteOnly); + + fout.write(contents.toAscii()); + + fout.close(); +} -- cgit v1.2.3