mirror of
https://bitbucket.org/smil3y/kde-extraapps.git
synced 2025-02-26 20:03:10 +00:00
207 lines
5.5 KiB
C++
207 lines
5.5 KiB
C++
![]() |
/* This file is part of KDevelop
|
||
|
Copyright 2007 Andreas Pakulat <apaku@gmx.de>
|
||
|
|
||
|
This library is free software; you can redistribute it and/or
|
||
|
modify it under the terms of the GNU Library General Public
|
||
|
License as published by the Free Software Foundation; either
|
||
|
version 2 of the License, or (at your option) any later version.
|
||
|
|
||
|
This library 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
|
||
|
Library General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU Library General Public License
|
||
|
along with this library; see the file COPYING.LIB. If not, write to
|
||
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||
|
Boston, MA 02110-1301, USA.
|
||
|
*/
|
||
|
|
||
|
#include "environmentgroupmodel.h"
|
||
|
#include <QtCore/QVariant>
|
||
|
#include <QtCore/QStringList>
|
||
|
#include <QtCore/QModelIndex>
|
||
|
|
||
|
#include <kdebug.h>
|
||
|
#include <KLocalizedString>
|
||
|
|
||
|
namespace KDevelop
|
||
|
{
|
||
|
|
||
|
EnvironmentGroupModel::EnvironmentGroupModel()
|
||
|
: QAbstractTableModel()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
int EnvironmentGroupModel::rowCount( const QModelIndex& parent ) const
|
||
|
{
|
||
|
if( parent.isValid() )
|
||
|
return 0;
|
||
|
if( !m_currentGroup.isEmpty() )
|
||
|
return m_varsByIndex.count();
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int EnvironmentGroupModel::columnCount( const QModelIndex& parent ) const
|
||
|
{
|
||
|
if( parent.isValid() )
|
||
|
return 0;
|
||
|
return 2;
|
||
|
}
|
||
|
|
||
|
Qt::ItemFlags EnvironmentGroupModel::flags( const QModelIndex& idx ) const
|
||
|
{
|
||
|
if( !idx.isValid() || m_currentGroup.isEmpty() )
|
||
|
{
|
||
|
return Qt::NoItemFlags ;
|
||
|
}
|
||
|
return ( Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled );
|
||
|
}
|
||
|
|
||
|
QVariant EnvironmentGroupModel::data( const QModelIndex& idx, int role ) const
|
||
|
{
|
||
|
if( !idx.isValid()
|
||
|
|| m_currentGroup.isEmpty()
|
||
|
|| idx.row() < 0 || idx.row() >= rowCount()
|
||
|
|| idx.column() < 0 || idx.column() >= columnCount(QModelIndex()) )
|
||
|
{
|
||
|
return QVariant();
|
||
|
}
|
||
|
|
||
|
const QString variable = m_varsByIndex[idx.row()];
|
||
|
if (role == VariableRole) {
|
||
|
return variable;
|
||
|
} else if (role == ValueRole) {
|
||
|
return variables( m_currentGroup ).value(variable);
|
||
|
} else if (role == Qt::DisplayRole || role == Qt::EditRole) {
|
||
|
if(idx.column() == 0) {
|
||
|
return variable;
|
||
|
} else {
|
||
|
return variables( m_currentGroup ).value(variable);
|
||
|
}
|
||
|
}
|
||
|
return QVariant();
|
||
|
}
|
||
|
|
||
|
QVariant EnvironmentGroupModel::headerData( int section, Qt::Orientation orientation, int role ) const
|
||
|
{
|
||
|
if( section < 0 || section >= columnCount(QModelIndex()) || m_currentGroup.isEmpty()
|
||
|
|| orientation != Qt::Horizontal || role != Qt::DisplayRole )
|
||
|
{
|
||
|
return QVariant();
|
||
|
}
|
||
|
if( section == 0 )
|
||
|
{
|
||
|
return i18n( "Variable" );
|
||
|
} else
|
||
|
{
|
||
|
return i18n( "Value" );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool EnvironmentGroupModel::setData( const QModelIndex& idx, const QVariant& data, int role )
|
||
|
{
|
||
|
if( !idx.isValid() || m_currentGroup.isEmpty()
|
||
|
|| idx.row() < 0 || idx.row() >= rowCount()
|
||
|
|| idx.column() < 0 || idx.column() >= columnCount(QModelIndex()) )
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if (role == Qt::EditRole) {
|
||
|
if (idx.column() == 0) {
|
||
|
const QString oldVariable = m_varsByIndex[idx.row()];
|
||
|
const QString value = variables(m_currentGroup).take(oldVariable);
|
||
|
const QString newVariable = data.toString();
|
||
|
variables(m_currentGroup).insert(newVariable, value);
|
||
|
m_varsByIndex[idx.row()] = newVariable;
|
||
|
} else {
|
||
|
variables(m_currentGroup).insert(m_varsByIndex[idx.row()], data.toString());
|
||
|
}
|
||
|
emit dataChanged(idx, idx);
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
QModelIndex EnvironmentGroupModel::addVariable( const QString& var, const QString& value )
|
||
|
{
|
||
|
const int pos = m_varsByIndex.indexOf(var);
|
||
|
if (pos != -1) {
|
||
|
return index(pos, 0, QModelIndex()); // No duplicates
|
||
|
}
|
||
|
|
||
|
const int insertPos = rowCount();
|
||
|
beginInsertRows( QModelIndex(), insertPos, insertPos );
|
||
|
m_varsByIndex << var;
|
||
|
variables( m_currentGroup ).insert( var, value );
|
||
|
endInsertRows();
|
||
|
return index(insertPos, 0, QModelIndex());
|
||
|
}
|
||
|
|
||
|
void EnvironmentGroupModel::removeGroup( const QString& grp )
|
||
|
{
|
||
|
if( groups().contains( grp ) )
|
||
|
{
|
||
|
EnvironmentGroupList::removeGroup( grp );
|
||
|
setCurrentGroup(defaultGroup());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void EnvironmentGroupModel::removeVariables(const QStringList& variables)
|
||
|
{
|
||
|
foreach (const QString& variable, variables) {
|
||
|
removeVariable(variable);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void EnvironmentGroupModel::removeVariable(const QString& variable)
|
||
|
{
|
||
|
if (m_currentGroup.isEmpty())
|
||
|
return;
|
||
|
|
||
|
const int pos = m_varsByIndex.indexOf(variable);
|
||
|
if (pos == -1)
|
||
|
return;
|
||
|
|
||
|
beginRemoveRows(QModelIndex(), pos, pos);
|
||
|
m_varsByIndex.removeAt(pos);
|
||
|
variables(m_currentGroup).remove(variable);
|
||
|
endRemoveRows();
|
||
|
}
|
||
|
|
||
|
void EnvironmentGroupModel::setCurrentGroup( const QString& group )
|
||
|
{
|
||
|
if( group.isEmpty() )
|
||
|
return;
|
||
|
m_currentGroup = group;
|
||
|
m_varsByIndex.clear();
|
||
|
|
||
|
foreach( const QString &var, variables( m_currentGroup ).keys() )
|
||
|
{
|
||
|
m_varsByIndex << var;
|
||
|
}
|
||
|
reset();
|
||
|
}
|
||
|
|
||
|
void EnvironmentGroupModel::changeDefaultGroup( const QString& grp )
|
||
|
{
|
||
|
if( !grp.isEmpty() )
|
||
|
setDefaultGroup( grp );
|
||
|
}
|
||
|
|
||
|
void EnvironmentGroupModel::loadFromConfig( KConfig* cfg )
|
||
|
{
|
||
|
loadSettings( cfg );
|
||
|
setCurrentGroup(defaultGroup());
|
||
|
}
|
||
|
|
||
|
|
||
|
void EnvironmentGroupModel::saveToConfig( KConfig* cfg )
|
||
|
{
|
||
|
saveSettings( cfg );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
#include "moc_environmentgroupmodel.cpp"
|