243 lines
8.0 KiB
C++
243 lines
8.0 KiB
C++
/* *********************************************************************** *
|
|
* XINX *
|
|
* Copyright (C) 2009 by Ulrich Van Den Hekke *
|
|
* ulrich.vdh@shadoware.org *
|
|
* *
|
|
* This program is free software: you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation, either version 3 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
|
* *********************************************************************** */
|
|
|
|
// Xinx header
|
|
#include "generixprojectdock.h"
|
|
#include "projectproperty/generixproject.h"
|
|
#include <editors/editormanager.h>
|
|
#include <editors/abstracteditor.h>
|
|
#include "configuration/configurationmanager.h"
|
|
|
|
// Qt header
|
|
#include <QFileInfo>
|
|
#include <QDir>
|
|
#include <QPainter>
|
|
|
|
/* Constante */
|
|
|
|
#define SEPARATOR_SIZE 4
|
|
|
|
/* BusinessViewListDelegate */
|
|
|
|
BusinessViewListDelegate::BusinessViewListDelegate(QObject * parent) : QItemDelegate(parent)
|
|
{
|
|
}
|
|
|
|
BusinessViewListDelegate::~BusinessViewListDelegate()
|
|
{
|
|
}
|
|
|
|
void BusinessViewListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
|
{
|
|
painter->save();
|
|
|
|
QStyleOptionViewItem myOption = option;
|
|
myOption.state |= QStyle::State_Enabled;
|
|
|
|
QFontMetrics metrics = painter->fontMetrics();
|
|
|
|
QStyleOptionViewItem titleOpt(myOption);
|
|
QFont titleFont(painter->font());
|
|
titleFont.setBold(true);
|
|
titleOpt.font = titleFont;
|
|
titleOpt.fontMetrics = QFontMetrics(titleFont);
|
|
|
|
QStyleOptionViewItem descOpt(myOption);
|
|
QFont descFont(painter->font());
|
|
descFont.setPointSize(descFont.pointSize() - 1);
|
|
descOpt.font = descFont;
|
|
descOpt.fontMetrics = QFontMetrics(descFont);
|
|
|
|
if (myOption.state & QStyle::State_Selected)
|
|
{
|
|
painter->fillRect(myOption.rect, myOption.palette.color(QPalette::Highlight));
|
|
}
|
|
else
|
|
{
|
|
if (index.row() % 2 != 0)
|
|
painter->fillRect(myOption.rect, myOption.palette.color(QPalette::AlternateBase));
|
|
else
|
|
painter->fillRect(myOption.rect, myOption.palette.color(QPalette::Base));
|
|
}
|
|
|
|
// Draw text
|
|
int maxTextLength = myOption.rect.width();
|
|
|
|
QString filename = index.model()->data(index, Qt::UserRole + 1).toString();
|
|
int configurationIndex = index.model()->data(index, Qt::UserRole + 0).toInt();
|
|
QString projectPath = index.model()->data(index, Qt::UserRole + 3).toString();
|
|
|
|
QString display = QString("%1 (%2)").arg(index.model()->data(index).toString()).arg(index.model()->data(index, Qt::UserRole + 2).toString());
|
|
QString description = (configurationIndex >= 0 ? QString("%1 - ").arg(configurationIndex) : QString()) + QDir(projectPath).relativeFilePath(filename);
|
|
|
|
if (myOption.state & QStyle::State_Selected)
|
|
painter->setPen(myOption.palette.color(QPalette::HighlightedText));
|
|
|
|
painter->setFont(titleFont);
|
|
display = titleOpt.fontMetrics.elidedText(display, Qt::ElideRight, maxTextLength);
|
|
|
|
|
|
|
|
painter->drawText(
|
|
SEPARATOR_SIZE,
|
|
SEPARATOR_SIZE + myOption.rect.top(),
|
|
titleOpt.fontMetrics.width(display),
|
|
titleOpt.fontMetrics.height(),
|
|
Qt::AlignLeft,
|
|
display);
|
|
|
|
painter->setFont(descFont);
|
|
description = descOpt.fontMetrics.elidedText(description, Qt::ElideRight, maxTextLength);
|
|
painter->drawText(
|
|
SEPARATOR_SIZE,
|
|
myOption.rect.height() - SEPARATOR_SIZE - descOpt.fontMetrics.height() + myOption.rect.top(),
|
|
descOpt.fontMetrics.width(description),
|
|
descOpt.fontMetrics.height(),
|
|
Qt::AlignLeft,
|
|
description);
|
|
|
|
painter->restore();
|
|
}
|
|
|
|
QSize BusinessViewListDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
|
|
{
|
|
Q_UNUSED(index);
|
|
|
|
QFont title(option.font);
|
|
title.setBold(true);
|
|
|
|
QFontMetrics titleMetrics(title);
|
|
QFontMetrics currentMetrics(option.font);
|
|
|
|
int height = titleMetrics.height() + currentMetrics.height() + SEPARATOR_SIZE;
|
|
height += SEPARATOR_SIZE * 2;
|
|
|
|
return QSize(200, height);
|
|
}
|
|
|
|
/* GenerixProjectDockImpl */
|
|
|
|
GenerixProjectDockImpl::GenerixProjectDockImpl(QWidget * parent) : QWidget(parent), m_editorIndex(-1)
|
|
{
|
|
setupUi(this);
|
|
setWindowTitle(tr("Generix Business View"));
|
|
setWindowIcon(QIcon(":/generix/images/logo_gce32.png"));
|
|
|
|
m_businessViewList->setItemDelegate(m_delegate = new BusinessViewListDelegate(m_businessViewList));
|
|
|
|
setProject(XinxProject::ProjectPtr());
|
|
|
|
connect(EditorManager::self(), SIGNAL(currentChanged(int)), this, SLOT(editorChanged(int)));
|
|
}
|
|
|
|
GenerixProjectDockImpl::~GenerixProjectDockImpl()
|
|
{
|
|
}
|
|
|
|
void GenerixProjectDockImpl::updateList()
|
|
{
|
|
QSharedPointer<GenerixProject> gnxProject = m_gnxProject.toStrongRef();
|
|
|
|
m_businessViewList->setEnabled(false);
|
|
if (gnxProject && ConfigurationManager::manager(gnxProject) && (m_editorIndex >= 0) && (m_editorIndex < EditorManager::self()->editorsCount()))
|
|
{
|
|
const QString editorFilename = EditorManager::self()->editor(m_editorIndex)->lastFileName();
|
|
|
|
m_filenameLabel->setText(tr("&Business view for file : \n%1").arg(QFileInfo(editorFilename).fileName()));
|
|
|
|
const QString filename = QDir(gnxProject->projectPath()).relativeFilePath(editorFilename);
|
|
|
|
QSharedPointer<GceConfiguration> interface = ConfigurationManager::manager(gnxProject)->getInterface();
|
|
m_businessViewList->clear();
|
|
if (interface)
|
|
{
|
|
foreach(const BusinessViewInformation information, interface->businessView(filename))
|
|
{
|
|
QListWidgetItem * item = new QListWidgetItem(information.businesViewName(), m_businessViewList);
|
|
item->setData(Qt::UserRole + 0, information.configurationNumber());
|
|
item->setData(Qt::UserRole + 1, information.configurationFileName());
|
|
item->setData(Qt::UserRole + 2, information.targetName());
|
|
item->setData(Qt::UserRole + 3, gnxProject->projectPath());
|
|
m_businessViewList->addItem(item);
|
|
m_businessViewList->setEnabled(true);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_filenameLabel->setText(QString());
|
|
m_businessViewList->clear();
|
|
}
|
|
}
|
|
|
|
void GenerixProjectDockImpl::setProject(XinxProject::ProjectPtr project)
|
|
{
|
|
QSharedPointer<GenerixProject> gnxProject = project.staticCast<GenerixProject>();
|
|
if (m_gnxProject.data() != gnxProject.data())
|
|
{
|
|
if (m_gnxProject && ConfigurationManager::manager(m_gnxProject))
|
|
{
|
|
ConfigurationManager::manager(m_gnxProject)->disconnect(this, SLOT(updateList()));
|
|
}
|
|
|
|
QSharedPointer<GenerixProject> newGnxProject;
|
|
if (ConfigurationManager::manager(gnxProject))
|
|
{
|
|
newGnxProject = gnxProject;
|
|
}
|
|
m_gnxProject = newGnxProject.toWeakRef();
|
|
|
|
m_prefixCombo->clear();
|
|
if (newGnxProject)
|
|
{
|
|
if (newGnxProject->prefixes().size())
|
|
{
|
|
m_prefixCombo->addItems(newGnxProject->prefixes());
|
|
m_prefixCombo->setCurrentIndex(m_prefixCombo->findText(newGnxProject->defaultPrefix()));
|
|
}
|
|
|
|
connect(ConfigurationManager::manager(newGnxProject), SIGNAL(changed()), this, SLOT(updateList()));
|
|
}
|
|
m_prefixCombo->setVisible(newGnxProject && (newGnxProject->prefixes().size() > 0));
|
|
m_prefixLabel->setVisible(newGnxProject && (newGnxProject->prefixes().size() > 0));
|
|
}
|
|
}
|
|
|
|
void GenerixProjectDockImpl::editorChanged(int index)
|
|
{
|
|
if (m_editorIndex != index)
|
|
{
|
|
m_editorIndex = index;
|
|
if ((index >= 0) && (index < EditorManager::self()->editorsCount()))
|
|
{
|
|
setProject(EditorManager::self()->editor(index)->project());
|
|
}
|
|
|
|
updateList();
|
|
}
|
|
}
|
|
|
|
|
|
void GenerixProjectDockImpl::on_m_prefixCombo_activated(QString text)
|
|
{
|
|
QSharedPointer<GenerixProject> gnxProject = m_gnxProject.toStrongRef();
|
|
if (gnxProject)
|
|
gnxProject->setDefaultPrefix(text);
|
|
}
|