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.
282 lines
8.1 KiB
282 lines
8.1 KiB
/* This file is part of the KDE project
|
|
Copyright (C) 2006 Jaroslaw Staniek <js@iidea.pl>
|
|
|
|
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 <qdom.h>
|
|
#include <qwidget.h>
|
|
#include <qlayout.h>
|
|
#include <qlabel.h>
|
|
#include <qsplitter.h>
|
|
#include <qmetaobject.h>
|
|
|
|
#include <kdebug.h>
|
|
#include <klocale.h>
|
|
#include <kpopupmenu.h>
|
|
#include <kmessagebox.h>
|
|
#include <kaccelmanager.h>
|
|
|
|
#include <koproperty/property.h>
|
|
|
|
#include "kexitabledesignercommands.h"
|
|
|
|
using namespace KexiTableDesignerCommands;
|
|
|
|
|
|
Command::Command(KexiTableDesignerView* view)
|
|
: KCommand()
|
|
, m_view(view)
|
|
{
|
|
}
|
|
|
|
Command::~Command()
|
|
{
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
|
|
ChangeFieldPropertyCommand::ChangeFieldPropertyCommand( KexiTableDesignerView* view,
|
|
const KoProperty::Set& set, const QCString& propertyName, const QVariant& oldValue, const QVariant& newValue,
|
|
KoProperty::Property::ListData* const oldListData, KoProperty::Property::ListData* const newListData)
|
|
: Command(view)
|
|
, m_alterTableAction(
|
|
propertyName=="name" ? oldValue.toString() : set.property("name").value().toString(),
|
|
propertyName, newValue, set["uid"].value().toInt())
|
|
, m_oldValue(oldValue)
|
|
// , m_fieldUID(set["uid"].value().toInt())
|
|
, m_oldListData( oldListData ? new KoProperty::Property::ListData(*oldListData) : 0 )
|
|
, m_listData( newListData ? new KoProperty::Property::ListData(*newListData) : 0 )
|
|
{
|
|
kexipluginsdbg << "ChangeFieldPropertyCommand: " << debugString() << endl;
|
|
}
|
|
|
|
ChangeFieldPropertyCommand::~ChangeFieldPropertyCommand()
|
|
{
|
|
delete m_oldListData;
|
|
delete m_listData;
|
|
}
|
|
|
|
QString ChangeFieldPropertyCommand::name() const
|
|
{
|
|
return i18n("Change \"%1\" property for table field from \"%2\" to \"%3\"")
|
|
.arg(m_alterTableAction.propertyName()).arg(m_oldValue.toString())
|
|
.arg(m_alterTableAction.newValue().toString());
|
|
}
|
|
|
|
QString ChangeFieldPropertyCommand::debugString()
|
|
{
|
|
QString s( name() );
|
|
if (m_oldListData || m_listData)
|
|
s += QString("\nAnd list data from [%1]\n to [%2]")
|
|
.arg( m_oldListData ?
|
|
QString("%1 -> %2")
|
|
.arg(m_oldListData->keysAsStringList().join(",")).arg(m_oldListData->names.join(","))
|
|
: QString("<NONE>"))
|
|
.arg( m_listData ?
|
|
QString("%1 -> %2")
|
|
.arg(m_listData->keysAsStringList().join(",")).arg(m_listData->names.join(","))
|
|
: QString("<NONE>"));
|
|
return s + QString(" (UID=%1)").arg(m_alterTableAction.uid());
|
|
}
|
|
|
|
void ChangeFieldPropertyCommand::execute()
|
|
{
|
|
m_view->changeFieldProperty(
|
|
m_alterTableAction.uid(),
|
|
m_alterTableAction.propertyName().latin1(),
|
|
m_alterTableAction.newValue(), m_listData );
|
|
}
|
|
|
|
void ChangeFieldPropertyCommand::unexecute()
|
|
{
|
|
m_view->changeFieldProperty(
|
|
m_alterTableAction.uid(),
|
|
m_alterTableAction.propertyName().latin1(),
|
|
m_oldValue, m_oldListData );
|
|
}
|
|
|
|
KexiDB::AlterTableHandler::ActionBase* ChangeFieldPropertyCommand::createAction()
|
|
{
|
|
if (m_alterTableAction.propertyName()=="subType") {//skip these properties
|
|
return 0;
|
|
}
|
|
return new KexiDB::AlterTableHandler::ChangeFieldPropertyAction( m_alterTableAction );
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
|
|
RemoveFieldCommand::RemoveFieldCommand( KexiTableDesignerView* view, int fieldIndex,
|
|
const KoProperty::Set* set)
|
|
: Command(view)
|
|
, m_alterTableAction( set ? (*set)["name"].value().toString() : QString::null,
|
|
set ? (*set)["uid"].value().toInt() : -1 )
|
|
, m_set( set ? new KoProperty::Set(*set /*deep copy*/) : 0 )
|
|
, m_fieldIndex(fieldIndex)
|
|
{
|
|
}
|
|
|
|
RemoveFieldCommand::~RemoveFieldCommand()
|
|
{
|
|
delete m_set;
|
|
}
|
|
|
|
QString RemoveFieldCommand::name() const
|
|
{
|
|
if (m_set)
|
|
return i18n("Remove table field \"%1\"").arg(m_alterTableAction.fieldName());
|
|
|
|
return QString("Remove empty row at position %1").arg(m_fieldIndex);
|
|
}
|
|
|
|
void RemoveFieldCommand::execute()
|
|
{
|
|
// m_view->deleteField( m_fieldIndex );
|
|
m_view->deleteRow( m_fieldIndex );
|
|
}
|
|
|
|
void RemoveFieldCommand::unexecute()
|
|
{
|
|
m_view->insertEmptyRow(m_fieldIndex);
|
|
if (m_set)
|
|
m_view->insertField( m_fieldIndex, *m_set );
|
|
}
|
|
|
|
QString RemoveFieldCommand::debugString()
|
|
{
|
|
if (!m_set)
|
|
return name();
|
|
|
|
return name() + "\nAT ROW " + QString::number(m_fieldIndex)
|
|
+ ", FIELD: " + (*m_set)["caption"].value().toString()
|
|
+ QString(" (UID=%1)").arg(m_alterTableAction.uid());
|
|
}
|
|
|
|
KexiDB::AlterTableHandler::ActionBase* RemoveFieldCommand::createAction()
|
|
{
|
|
return new KexiDB::AlterTableHandler::RemoveFieldAction( m_alterTableAction );
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
|
|
InsertFieldCommand::InsertFieldCommand( KexiTableDesignerView* view,
|
|
int fieldIndex/*, const KexiDB::Field& field*/, const KoProperty::Set& set )
|
|
: Command(view)
|
|
, m_alterTableAction(0) //fieldIndex, new KexiDB::Field(field) /*deep copy*/)
|
|
, m_set( set ) //? new KoProperty::Set(*set) : 0 )
|
|
{
|
|
KexiDB::Field *f = view->buildField( m_set );
|
|
if (f)
|
|
m_alterTableAction = new KexiDB::AlterTableHandler::InsertFieldAction(
|
|
fieldIndex, f, set["uid"].value().toInt());
|
|
else //null action
|
|
m_alterTableAction = new KexiDB::AlterTableHandler::InsertFieldAction(true);
|
|
}
|
|
|
|
InsertFieldCommand::~InsertFieldCommand()
|
|
{
|
|
delete m_alterTableAction;
|
|
}
|
|
|
|
QString InsertFieldCommand::name() const
|
|
{
|
|
return i18n("Insert table field \"%1\"").arg(m_set["caption"].value().toString());
|
|
}
|
|
|
|
void InsertFieldCommand::execute()
|
|
{
|
|
m_view->insertField( m_alterTableAction->index(), /*m_alterTableAction.field(),*/ m_set );
|
|
}
|
|
|
|
void InsertFieldCommand::unexecute()
|
|
{
|
|
m_view->clearRow( m_alterTableAction->index() );//m_alterTableAction.index() );
|
|
}
|
|
|
|
KexiDB::AlterTableHandler::ActionBase* InsertFieldCommand::createAction()
|
|
{
|
|
return new KexiDB::AlterTableHandler::InsertFieldAction(*m_alterTableAction);
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
|
|
ChangePropertyVisibilityCommand::ChangePropertyVisibilityCommand( KexiTableDesignerView* view,
|
|
const KoProperty::Set& set, const QCString& propertyName, bool visible)
|
|
: Command(view)
|
|
, m_alterTableAction(set.property("name").value().toString(), propertyName, visible, set["uid"].value().toInt())
|
|
// , m_fieldUID(set["uid"].value().toInt())
|
|
, m_oldVisibility( set.property(propertyName).isVisible() )
|
|
{
|
|
kexipluginsdbg << "ChangePropertyVisibilityCommand: " << debugString() << endl;
|
|
}
|
|
|
|
ChangePropertyVisibilityCommand::~ChangePropertyVisibilityCommand()
|
|
{
|
|
}
|
|
|
|
QString ChangePropertyVisibilityCommand::name() const
|
|
{
|
|
return QString("[internal] Change \"%1\" visibility from \"%2\" to \"%3\"")
|
|
.arg(m_alterTableAction.propertyName())
|
|
.arg(m_oldVisibility ? "true" : "false")
|
|
.arg(m_alterTableAction.newValue().toBool() ? "true" : "false");
|
|
}
|
|
|
|
void ChangePropertyVisibilityCommand::execute()
|
|
{
|
|
m_view->changePropertyVisibility(
|
|
m_alterTableAction.uid(),
|
|
m_alterTableAction.propertyName().latin1(),
|
|
m_alterTableAction.newValue().toBool() );
|
|
}
|
|
|
|
void ChangePropertyVisibilityCommand::unexecute()
|
|
{
|
|
m_view->changePropertyVisibility(
|
|
m_alterTableAction.uid(),
|
|
m_alterTableAction.propertyName().latin1(),
|
|
m_oldVisibility );
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
|
|
InsertEmptyRowCommand::InsertEmptyRowCommand( KexiTableDesignerView* view, int row )
|
|
: Command(view)
|
|
, m_alterTableAction(true) //unused, null action
|
|
, m_row(row)
|
|
{
|
|
}
|
|
|
|
InsertEmptyRowCommand::~InsertEmptyRowCommand()
|
|
{
|
|
}
|
|
|
|
QString InsertEmptyRowCommand::name() const
|
|
{
|
|
return QString("Insert empty row at position %1").arg(m_row);
|
|
}
|
|
|
|
void InsertEmptyRowCommand::execute()
|
|
{
|
|
m_view->insertEmptyRow( m_row );
|
|
}
|
|
|
|
void InsertEmptyRowCommand::unexecute()
|
|
{
|
|
// let's assume the row is empty...
|
|
m_view->deleteRow( m_row );
|
|
}
|
|
|