You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
5.1 KiB
158 lines
5.1 KiB
/***************************************************************************
|
|
kxe_viewattributes.cpp - description
|
|
-------------------
|
|
begin : Thu Nov 22 2001
|
|
copyright : (C) 2001, 2002, 2003 by The KXMLEditor Team
|
|
email : lvanek@users.sourceforge.net
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* 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 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#include "kxe_viewattributes.h"
|
|
|
|
#include "kxeattributedialog.h"
|
|
|
|
#include <kmessagebox.h>
|
|
#include <kdebug.h>
|
|
#include <klocale.h>
|
|
|
|
KXE_ViewAttributes::KXE_ViewAttributes( QWidget * pParent, const char * pszName )
|
|
: QTable( 0, 3, pParent, pszName )
|
|
{
|
|
horizontalHeader()->setLabel( 0, i18n("Namespace") );
|
|
horizontalHeader()->setLabel( 1, i18n("Name") );
|
|
horizontalHeader()->setLabel( 2, i18n("Value") );
|
|
|
|
setColumnReadOnly( 0, true );
|
|
setColumnReadOnly( 1, true );
|
|
setColumnReadOnly( 2, true );
|
|
|
|
connect( this, SIGNAL(valueChanged(int,int)), this, SLOT(slotItemRenamedInplace(int,int)) );
|
|
}
|
|
|
|
QDomAttr KXE_ViewAttributes::getSelectedAttribute() const
|
|
{
|
|
if ( currentRow() == -1 )
|
|
return QDomAttr();
|
|
|
|
if ( m_domElement.attributes().item(currentRow()).isAttr() )
|
|
{
|
|
return m_domElement.attributes().item(currentRow()).toAttr();
|
|
}
|
|
else
|
|
return QDomAttr();
|
|
}
|
|
|
|
void KXE_ViewAttributes::setReadWrite( bool fReadWrite )
|
|
{
|
|
setColumnReadOnly( 1, ! fReadWrite );
|
|
setColumnReadOnly( 2, ! fReadWrite );
|
|
|
|
if ( fReadWrite )
|
|
connect( this, SIGNAL(contextMenuRequested(int,int,const QPoint&)), this, SLOT(slotContextMenuRequested(int,int,const QPoint&)) );
|
|
else
|
|
disconnect( this, SIGNAL(contextMenuRequested(int,int,const QPoint&)), this, SLOT(slotContextMenuRequested(int,int,const QPoint&)) );
|
|
}
|
|
|
|
void KXE_ViewAttributes::slotContextMenuRequested( int nRow, int nCol, const QPoint & pos )
|
|
{
|
|
nCol = nCol;
|
|
QString szMenuName = ( nRow == -1 ) ? "popupXmlAttributes" : "popupXmlAttribute";
|
|
emit sigContextMenuRequested( szMenuName, pos );
|
|
}
|
|
|
|
void KXE_ViewAttributes::slotChange( const QDomElement & element )
|
|
{
|
|
m_domElement = element;
|
|
|
|
uint iLength = m_domElement.attributes().length();
|
|
setNumRows( iLength );
|
|
|
|
if ( iLength > 0 )
|
|
{
|
|
for ( uint iRow = 0; iRow < iLength; iRow++ )
|
|
{
|
|
QDomNode node = m_domElement.attributes().item(iRow);
|
|
if ( node.isAttr() )
|
|
{
|
|
setText( iRow, 0, node.toAttr().namespaceURI() );
|
|
setText( iRow, 1, node.toAttr().name() );
|
|
setText( iRow, 2, node.toAttr().value() );
|
|
adjustRow( iRow );
|
|
}
|
|
else
|
|
kdError() << "KXE_ViewAttributes::slotChange: node is not an attribute (but should be)" << endl;
|
|
}
|
|
|
|
adjustColumn(0);
|
|
adjustColumn(1);
|
|
adjustColumn(2);
|
|
}
|
|
}
|
|
|
|
void KXE_ViewAttributes::slotItemRenamedInplace( int nRow, int nCol )
|
|
{
|
|
if ( nCol < 1) // only attributes names and values are changeable
|
|
{
|
|
kdError() << "KXMLEditor " << k_funcinfo << " column " << nCol << " should be unchangeable" << endl;
|
|
return;
|
|
}
|
|
|
|
QDomNode node = m_domElement.attributes().item(nRow);
|
|
if ( node.isAttr() )
|
|
{ if (nCol == 1)
|
|
{
|
|
// check if name is OK
|
|
QString strMessage = KXEAttributeDialog::checkName(text(nRow,nCol));
|
|
if(strMessage.length() > 0)
|
|
{
|
|
// restore old name
|
|
setText( nRow, 1, node.toAttr().name() ); // set old name
|
|
KMessageBox::sorry(this, strMessage);
|
|
return;
|
|
}
|
|
|
|
// check, if new name not exists in attributes list
|
|
if(m_domElement.attributes().contains(text(nRow,nCol)) == false)
|
|
{
|
|
if ( node.toAttr().name() != text(nRow,nCol) ) // only if the name really was changed
|
|
{
|
|
emit sigAttributeNameChangedInplace(node.toAttr(), text(nRow,nCol) );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
KMessageBox::sorry(this, i18n("Attribute name already exists !"));
|
|
setText( nRow, 1, node.toAttr().name() ); // set old name
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( node.toAttr().value() != text(nRow,nCol) ) // only if the value really was changed
|
|
{
|
|
// check if value is OK
|
|
QString strMessage = KXEAttributeDialog::checkValue(text(nRow,nCol));
|
|
if(strMessage.length() > 0)
|
|
{
|
|
// restore old value
|
|
setText( nRow, 2, node.toAttr().value() ); // set old value
|
|
KMessageBox::sorry(this, strMessage);
|
|
return;
|
|
}
|
|
|
|
emit sigAttributeValueChangedInplace( node.toAttr(), text(nRow, nCol) );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
kdError() << "KXMLEditor " << k_funcinfo << " node is not an attribute (but should be)" << endl;
|
|
}
|