From 2e320f66f4f3c831dcfd232b33da0e6ab6dd7dd0 Mon Sep 17 00:00:00 2001 From: Robert Bieber Date: Tue, 15 Jun 2010 06:54:58 +0000 Subject: Theme Editor: Changed color to colour in preferences. Made parse tree viewer alternate line colors and auto-scroll/expand with cursor in editor window. Implemented TabContent abstract class so that more than just skin documents can be loaded in tabs. Made SkinDocument implement TabContent. Began implementing ConfigDocument for editing configuration files. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26851 a1c6a512-1295-4272-9138-f99709370657 --- utils/themeeditor/editorwindow.cpp | 94 ++++++++++++++++++++++++++++++++------ 1 file changed, 80 insertions(+), 14 deletions(-) (limited to 'utils/themeeditor/editorwindow.cpp') diff --git a/utils/themeeditor/editorwindow.cpp b/utils/themeeditor/editorwindow.cpp index 93cf3641f0..3603b24af1 100644 --- a/utils/themeeditor/editorwindow.cpp +++ b/utils/themeeditor/editorwindow.cpp @@ -40,14 +40,14 @@ EditorWindow::EditorWindow(QWidget *parent) : setupMenus(); } -void EditorWindow::loadTabFromFile(QString fileName) +void EditorWindow::loadTabFromSkinFile(QString fileName) { /* Checking to see if the file is already open */ for(int i = 0; i < ui->editorTabs->count(); i++) { - SkinDocument* current = dynamic_cast + TabContent* current = dynamic_cast (ui->editorTabs->widget(i)); - if(current->getFile() == fileName) + if(current->file() == fileName) { ui->editorTabs->setCurrentIndex(i); return; @@ -61,6 +61,27 @@ void EditorWindow::loadTabFromFile(QString fileName) } +void EditorWindow::loadConfigTab(ConfigDocument* doc) +{ + for(int i = 0; i < ui->editorTabs->count(); i++) + { + TabContent* current = dynamic_cast + (ui->editorTabs->widget(i)); + if(current->file() == doc->file()) + { + ui->editorTabs->setCurrentIndex(i); + doc->deleteLater(); + return; + } + } + + addTab(doc); + ui->editorTabs->setCurrentWidget(doc); + + QObject::connect(doc, SIGNAL(titleChanged(QString)), + this, SLOT(tabTitleChanged(QString))); +} + void EditorWindow::loadSettings() { @@ -153,16 +174,19 @@ void EditorWindow::setupMenus() this, SLOT(openProject())); } -void EditorWindow::addTab(SkinDocument *doc) +void EditorWindow::addTab(TabContent *doc) { - ui->editorTabs->addTab(doc, doc->getTitle()); + ui->editorTabs->addTab(doc, doc->title()); /* Connecting to title change events */ QObject::connect(doc, SIGNAL(titleChanged(QString)), this, SLOT(tabTitleChanged(QString))); + QObject::connect(doc, SIGNAL(lineChanged(int)), + this, SLOT(lineChanged(int))); /* Connecting to settings change events */ - doc->connectPrefs(prefs); + if(doc->type() == TabContent::Skin) + dynamic_cast(doc)->connectPrefs(prefs); } @@ -175,7 +199,9 @@ void EditorWindow::newTab() void EditorWindow::shiftTab(int index) { - if(index < 0) + TabContent* widget = dynamic_cast + (ui->editorTabs->currentWidget()); + if(index < 0 || widget->type() != TabContent::Skin) { ui->parseTree->setModel(0); ui->actionSave_Document->setEnabled(false); @@ -187,8 +213,7 @@ void EditorWindow::shiftTab(int index) else { /* Syncing the tree view and the status bar */ - SkinDocument* doc = dynamic_cast - (ui->editorTabs->currentWidget()); + SkinDocument* doc = dynamic_cast(widget); ui->parseTree->setModel(doc->getModel()); parseStatus->setText(doc->getStatus()); @@ -197,12 +222,15 @@ void EditorWindow::shiftTab(int index) ui->actionClose_Document->setEnabled(true); ui->actionToolbarSave->setEnabled(true); ui->fromTree->setEnabled(true); + + sizeColumns(); + } } bool EditorWindow::closeTab(int index) { - SkinDocument* widget = dynamic_cast + TabContent* widget = dynamic_cast (ui->editorTabs->widget(index)); if(widget->requestClose()) { @@ -222,13 +250,13 @@ void EditorWindow::closeCurrent() void EditorWindow::saveCurrent() { if(ui->editorTabs->currentIndex() >= 0) - dynamic_cast(ui->editorTabs->currentWidget())->save(); + dynamic_cast(ui->editorTabs->currentWidget())->save(); } void EditorWindow::saveCurrentAs() { if(ui->editorTabs->currentIndex() >= 0) - dynamic_cast(ui->editorTabs->currentWidget())->saveAs(); + dynamic_cast(ui->editorTabs->currentWidget())->saveAs(); } void EditorWindow::openFile() @@ -248,7 +276,7 @@ void EditorWindow::openFile() QString current = fileNames[i]; - loadTabFromFile(current); + loadTabFromSkinFile(current); /* And setting the new default directory */ current.chop(current.length() - current.lastIndexOf('/') - 1); @@ -292,7 +320,7 @@ void EditorWindow::openProject() void EditorWindow::tabTitleChanged(QString title) { - SkinDocument* sender = dynamic_cast(QObject::sender()); + TabContent* sender = dynamic_cast(QObject::sender()); ui->editorTabs->setTabText(ui->editorTabs->indexOf(sender), title); } @@ -334,6 +362,44 @@ void EditorWindow::updateCurrent() (ui->editorTabs->currentWidget())->genCode(); } +void EditorWindow::lineChanged(int line) +{ + ui->parseTree->collapseAll(); + ParseTreeModel* model = dynamic_cast + (ui->parseTree->model()); + expandLine(model, QModelIndex(), line); + sizeColumns(); + +} + +void EditorWindow::expandLine(ParseTreeModel* model, QModelIndex parent, + int line) +{ + for(int i = 0; i < model->rowCount(parent); i++) + { + QModelIndex data = model->index(i, ParseTreeModel::lineColumn, parent); + QModelIndex recurse = model->index(i, 0, parent); + + expandLine(model, recurse, line); + + if(model->data(data, Qt::DisplayRole) == line) + { + ui->parseTree->expand(parent); + ui->parseTree->expand(data); + ui->parseTree->scrollTo(parent, QAbstractItemView::PositionAtTop); + } + + } +} + +void EditorWindow::sizeColumns() +{ + /* Setting the column widths */ + ui->parseTree->resizeColumnToContents(ParseTreeModel::lineColumn); + ui->parseTree->resizeColumnToContents(ParseTreeModel::typeColumn); + ui->parseTree->resizeColumnToContents(ParseTreeModel::valueColumn); +} + EditorWindow::~EditorWindow() { delete ui; -- cgit v1.2.3