Apply table changes to the loaded data, and offer to save when closing the changed table.

This commit is contained in:
dfighter1985 2014-07-18 00:27:05 +02:00
parent 1df00cc8b3
commit 512aa4c867
2 changed files with 54 additions and 2 deletions

View file

@ -4,6 +4,7 @@
#include <QTableWidget> #include <QTableWidget>
#include <QFormLayout> #include <QFormLayout>
#include <QCloseEvent> #include <QCloseEvent>
#include <QMessageBox>
#include "nel/misc/diff_tool.h" #include "nel/misc/diff_tool.h"
@ -17,9 +18,12 @@ public:
UXTEditorPvt() UXTEditorPvt()
{ {
t = new QTableWidget(); t = new QTableWidget();
changed = false;
} }
QTableWidget *t; QTableWidget *t;
std::vector< STRING_MANAGER::TStringInfo > infos;
bool changed;
}; };
@ -30,6 +34,8 @@ CEditor( parent )
setAttribute( Qt::WA_DeleteOnClose ); setAttribute( Qt::WA_DeleteOnClose );
d_ptr = new UXTEditorPvt(); d_ptr = new UXTEditorPvt();
blockTableSignals( false );
} }
UXTEditor::~UXTEditor() UXTEditor::~UXTEditor()
@ -40,12 +46,16 @@ UXTEditor::~UXTEditor()
void UXTEditor::open( QString filename ) void UXTEditor::open( QString filename )
{ {
std::vector< STRING_MANAGER::TStringInfo > infos; std::vector< STRING_MANAGER::TStringInfo > &infos = d_ptr->infos;
infos.clear();
STRING_MANAGER::loadStringFile( filename.toUtf8().constData(), infos, true ); STRING_MANAGER::loadStringFile( filename.toUtf8().constData(), infos, true );
if( infos.size() == 0 ) if( d_ptr->infos.size() == 0 )
return; return;
blockTableSignals( true );
d_ptr->t->clear(); d_ptr->t->clear();
d_ptr->t->setColumnCount( 2 ); d_ptr->t->setColumnCount( 2 );
d_ptr->t->setRowCount( infos.size() ); d_ptr->t->setRowCount( infos.size() );
@ -71,6 +81,8 @@ void UXTEditor::open( QString filename )
d_ptr->t->resizeColumnsToContents(); d_ptr->t->resizeColumnsToContents();
blockTableSignals( false );
setWidget( d_ptr->t ); setWidget( d_ptr->t );
setCurrentFile( filename ); setCurrentFile( filename );
} }
@ -91,10 +103,38 @@ void UXTEditor::activateWindow()
void UXTEditor::closeEvent( QCloseEvent *e ) void UXTEditor::closeEvent( QCloseEvent *e )
{ {
if( d_ptr->changed )
{
int reply = QMessageBox::question( this,
tr( "Table changed" ),
tr( "The table has changed. Would you like to save your changes?" ),
QMessageBox::Yes,
QMessageBox::No
);
if( reply == QMessageBox::Yes )
save();
}
e->accept(); e->accept();
close(); close();
} }
void UXTEditor::onCellChanged( int row, int column )
{
QTableWidgetItem *item = d_ptr->t->item( row, column );
STRING_MANAGER::TStringInfo &info = d_ptr->infos[ row ];
if( column == 0 )
info.Identifier = item->text().toUtf8().constData();
else
if( column == 1 )
info.Text = item->text().toUtf8().constData();
d_ptr->changed = true;
}
void UXTEditor::setHeaderText( const QString &id, const QString &text ) void UXTEditor::setHeaderText( const QString &id, const QString &text )
{ {
QTableWidgetItem *h1 = new QTableWidgetItem( id ); QTableWidgetItem *h1 = new QTableWidgetItem( id );
@ -105,4 +145,12 @@ void UXTEditor::setHeaderText( const QString &id, const QString &text )
d_ptr->t->setHorizontalHeaderItem( 1, h2 ); d_ptr->t->setHorizontalHeaderItem( 1, h2 );
} }
void UXTEditor::blockTableSignals( bool block )
{
if( block )
disconnect( d_ptr->t, SIGNAL( cellChanged( int, int ) ), this, SLOT( onCellChanged( int, int ) ) );
else
connect( d_ptr->t, SIGNAL( cellChanged( int, int ) ), this, SLOT( onCellChanged( int, int ) ) );
}
} }

View file

@ -23,8 +23,12 @@ public:
protected: protected:
void closeEvent( QCloseEvent *e ); void closeEvent( QCloseEvent *e );
private Q_SLOTS:
void onCellChanged( int row, int column );
private: private:
void setHeaderText( const QString &id, const QString &text ); void setHeaderText( const QString &id, const QString &text );
void blockTableSignals( bool block = false );
UXTEditorPvt *d_ptr; UXTEditorPvt *d_ptr;
}; };