This commit is contained in:
kaetemi 2014-08-19 15:38:16 +02:00
parent 8fab3ccce1
commit 02e8f6e956
14 changed files with 1799 additions and 1799 deletions

View file

@ -1,50 +1,50 @@
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
${LIBXML2_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR}
${QT_INCLUDES}) ${QT_INCLUDES})
FILE(GLOB SRC *.cpp *.h) FILE(GLOB SRC *.cpp *.h)
SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin.h SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin.h
${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_manager.h ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_manager.h
${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_spec.h) ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_spec.h)
SET(OVQT_TILE_EDITOR_PLUGIN_HDR SET(OVQT_TILE_EDITOR_PLUGIN_HDR
tile_model.h tile_model.h
tile_editor_main_window.h tile_editor_main_window.h
tile_editor_plugin.h tile_editor_plugin.h
land_edit_dialog.h) land_edit_dialog.h)
SET(OVQT_TILE_EDITOR_PLUGIN_UIS SET(OVQT_TILE_EDITOR_PLUGIN_UIS
tile_editor_main_window.ui tile_editor_main_window.ui
land_edit_dialog.ui) land_edit_dialog.ui)
SET(OVQT_PLUG_TILE_EDITOR_RCS tile_editor.qrc) SET(OVQT_PLUG_TILE_EDITOR_RCS tile_editor.qrc)
SET(QT_USE_QTGUI TRUE) SET(QT_USE_QTGUI TRUE)
SET(QT_USE_QTOPENGL TRUE) SET(QT_USE_QTOPENGL TRUE)
QT4_WRAP_CPP(OVQT_TILE_EDITOR_PLUGIN_MOC_SRC ${OVQT_TILE_EDITOR_PLUGIN_HDR}) QT4_WRAP_CPP(OVQT_TILE_EDITOR_PLUGIN_MOC_SRC ${OVQT_TILE_EDITOR_PLUGIN_HDR})
QT4_ADD_RESOURCES( OVQT_PLUG_TILE_EDITOR_RC_SRCS ${OVQT_PLUG_TILE_EDITOR_RCS}) QT4_ADD_RESOURCES( OVQT_PLUG_TILE_EDITOR_RC_SRCS ${OVQT_PLUG_TILE_EDITOR_RCS})
QT4_WRAP_UI(OVQT_TILE_EDITOR_PLUGIN_UI_HDRS ${OVQT_TILE_EDITOR_PLUGIN_UIS}) QT4_WRAP_UI(OVQT_TILE_EDITOR_PLUGIN_UI_HDRS ${OVQT_TILE_EDITOR_PLUGIN_UIS})
SOURCE_GROUP(QtGeneratedUiHdr FILES ${OVQT_TILE_EDITOR_PLUGIN_UI_HDRS}) SOURCE_GROUP(QtGeneratedUiHdr FILES ${OVQT_TILE_EDITOR_PLUGIN_UI_HDRS})
SOURCE_GROUP(QtGeneratedMocSrc FILES ${OVQT_TILE_EDITOR_PLUGIN_MOC_SRC} ${OVQT_PLUG_TILE_EDITOR_RC_SRCS}) SOURCE_GROUP(QtGeneratedMocSrc FILES ${OVQT_TILE_EDITOR_PLUGIN_MOC_SRC} ${OVQT_PLUG_TILE_EDITOR_RC_SRCS})
SOURCE_GROUP("Tile Editor Plugin" FILES ${SRC}) SOURCE_GROUP("Tile Editor Plugin" FILES ${SRC})
SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC}) SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC})
ADD_LIBRARY(studio_plugin_tile_editor MODULE ${SRC} ${OVQT_TILE_EDITOR_PLUGIN_MOC_SRC} ${OVQT_PLUG_TILE_EDITOR_RC_SRCS} ${OVQT_EXT_SYS_SRC} ${OVQT_TILE_EDITOR_PLUGIN_UI_HDRS}) ADD_LIBRARY(studio_plugin_tile_editor MODULE ${SRC} ${OVQT_TILE_EDITOR_PLUGIN_MOC_SRC} ${OVQT_PLUG_TILE_EDITOR_RC_SRCS} ${OVQT_EXT_SYS_SRC} ${OVQT_TILE_EDITOR_PLUGIN_UI_HDRS})
TARGET_LINK_LIBRARIES(studio_plugin_tile_editor studio_plugin_core nelmisc ${QT_LIBRARIES}) TARGET_LINK_LIBRARIES(studio_plugin_tile_editor studio_plugin_core nelmisc ${QT_LIBRARIES})
IF(WITH_STLPORT) IF(WITH_STLPORT)
TARGET_LINK_LIBRARIES(studio_plugin_tile_editor ${CMAKE_THREAD_LIBS_INIT}) TARGET_LINK_LIBRARIES(studio_plugin_tile_editor ${CMAKE_THREAD_LIBS_INIT})
ENDIF(WITH_STLPORT) ENDIF(WITH_STLPORT)
NL_DEFAULT_PROPS(studio_plugin_tile_editor "Tools: Studio Plugin: Tile Editor") NL_DEFAULT_PROPS(studio_plugin_tile_editor "Tools: Studio Plugin: Tile Editor")
NL_ADD_RUNTIME_FLAGS(studio_plugin_tile_editor) NL_ADD_RUNTIME_FLAGS(studio_plugin_tile_editor)
NL_ADD_LIB_SUFFIX(studio_plugin_tile_editor) NL_ADD_LIB_SUFFIX(studio_plugin_tile_editor)
ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} -DQT_PLUGIN -DQT_SHARED ${QT_DEFINITIONS}) ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} -DQT_PLUGIN -DQT_SHARED ${QT_DEFINITIONS})
INSTALL(TARGETS studio_plugin_tile_editor LIBRARY DESTINATION lib RUNTIME DESTINATION bin ARCHIVE DESTINATION lib COMPONENT tools3d) INSTALL(TARGETS studio_plugin_tile_editor LIBRARY DESTINATION lib RUNTIME DESTINATION bin ARCHIVE DESTINATION lib COMPONENT tools3d)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/studio_plugin_tile_editor.xml DESTINATION ${OVQT_PLUGIN_SPECS_DIR} COMPONENT tools3d) INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/studio_plugin_tile_editor.xml DESTINATION ${OVQT_PLUGIN_SPECS_DIR} COMPONENT tools3d)

View file

@ -1,105 +1,105 @@
// Ryzom Core Studio - Tile Editor plugin // Ryzom Core Studio - Tile Editor plugin
// Copyright (C) 2010 Winch Gate Property Limited // Copyright (C) 2010 Winch Gate Property Limited
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as // it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the // published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version. // License, or (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details. // GNU Affero General Public License for more details.
// //
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "land_edit_dialog.h" #include "land_edit_dialog.h"
LandEditDialog::LandEditDialog( QWidget *parent ) : LandEditDialog::LandEditDialog( QWidget *parent ) :
QDialog( parent ) QDialog( parent )
{ {
setupUi( this ); setupUi( this );
setupConnections(); setupConnections();
} }
LandEditDialog::~LandEditDialog() LandEditDialog::~LandEditDialog()
{ {
} }
void LandEditDialog::getSelectedTileSets( QStringList &l ) const void LandEditDialog::getSelectedTileSets( QStringList &l ) const
{ {
int c = tilesetLV->count(); int c = tilesetLV->count();
for( int i = 0; i < c; i++ ) for( int i = 0; i < c; i++ )
{ {
l.push_back( tilesetLV->item( i )->text() ); l.push_back( tilesetLV->item( i )->text() );
} }
} }
void LandEditDialog::setSelectedTileSets( QStringList &l ) void LandEditDialog::setSelectedTileSets( QStringList &l )
{ {
tilesetLV->clear(); tilesetLV->clear();
QStringListIterator itr( l ); QStringListIterator itr( l );
while( itr.hasNext() ) while( itr.hasNext() )
{ {
tilesetLV->addItem( itr.next() ); tilesetLV->addItem( itr.next() );
} }
} }
void LandEditDialog::setTileSets( const QStringList &l ) void LandEditDialog::setTileSets( const QStringList &l )
{ {
tilesetCB->clear(); tilesetCB->clear();
QStringListIterator itr( l ); QStringListIterator itr( l );
while( itr.hasNext() ) while( itr.hasNext() )
{ {
tilesetCB->addItem( itr.next() ); tilesetCB->addItem( itr.next() );
} }
} }
void LandEditDialog::setupConnections() void LandEditDialog::setupConnections()
{ {
connect( okButton, SIGNAL( clicked( bool ) ), this, SLOT( onOkClicked() ) ); connect( okButton, SIGNAL( clicked( bool ) ), this, SLOT( onOkClicked() ) );
connect( cancelButton, SIGNAL( clicked( bool ) ), this, SLOT( onCancelClicked() ) ); connect( cancelButton, SIGNAL( clicked( bool ) ), this, SLOT( onCancelClicked() ) );
connect( addButton, SIGNAL( clicked( bool ) ), this, SLOT( onAddClicked() ) ); connect( addButton, SIGNAL( clicked( bool ) ), this, SLOT( onAddClicked() ) );
connect( removeButton, SIGNAL( clicked( bool ) ), this, SLOT( onRemoveClicked() ) ); connect( removeButton, SIGNAL( clicked( bool ) ), this, SLOT( onRemoveClicked() ) );
} }
void LandEditDialog::onOkClicked() void LandEditDialog::onOkClicked()
{ {
accept(); accept();
} }
void LandEditDialog::onCancelClicked() void LandEditDialog::onCancelClicked()
{ {
reject(); reject();
} }
void LandEditDialog::onAddClicked() void LandEditDialog::onAddClicked()
{ {
if( tilesetCB->currentIndex() < 0 ) if( tilesetCB->currentIndex() < 0 )
return; return;
QString text = tilesetCB->currentText(); QString text = tilesetCB->currentText();
int c = tilesetLV->count(); int c = tilesetLV->count();
for( int i = 0; i < c; i++ ) for( int i = 0; i < c; i++ )
{ {
if( text == tilesetLV->item( i )->text() ) if( text == tilesetLV->item( i )->text() )
return; return;
} }
tilesetLV->addItem( text ); tilesetLV->addItem( text );
} }
void LandEditDialog::onRemoveClicked() void LandEditDialog::onRemoveClicked()
{ {
if( tilesetLV->currentItem() == NULL ) if( tilesetLV->currentItem() == NULL )
return; return;
QListWidgetItem *item = tilesetLV->currentItem(); QListWidgetItem *item = tilesetLV->currentItem();
delete item; delete item;
} }

View file

@ -1,51 +1,51 @@
// Ryzom Core Studio - Tile Editor plugin // Ryzom Core Studio - Tile Editor plugin
// Copyright (C) 2010 Winch Gate Property Limited // Copyright (C) 2010 Winch Gate Property Limited
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as // it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the // published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version. // License, or (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details. // GNU Affero General Public License for more details.
// //
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef LAND_EDIT_DLG_H #ifndef LAND_EDIT_DLG_H
#define LAND_EDIT_DLG_H #define LAND_EDIT_DLG_H
#include "ui_land_edit_dialog.h" #include "ui_land_edit_dialog.h"
#include <QStringList> #include <QStringList>
class LandEditDialog : public QDialog, public Ui::LandEditDialog class LandEditDialog : public QDialog, public Ui::LandEditDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
LandEditDialog( QWidget *parent = NULL ); LandEditDialog( QWidget *parent = NULL );
~LandEditDialog(); ~LandEditDialog();
void getSelectedTileSets( QStringList &l ) const; void getSelectedTileSets( QStringList &l ) const;
void setSelectedTileSets( QStringList &l ); void setSelectedTileSets( QStringList &l );
void setTileSets( const QStringList &l ); void setTileSets( const QStringList &l );
private: private:
void setupConnections(); void setupConnections();
private Q_SLOTS: private Q_SLOTS:
void onOkClicked(); void onOkClicked();
void onCancelClicked(); void onCancelClicked();
void onAddClicked(); void onAddClicked();
void onRemoveClicked(); void onRemoveClicked();
}; };
#endif #endif

View file

@ -1,10 +1,10 @@
<plugin-spec> <plugin-spec>
<library-name>studio_plugin_tile_editor</library-name> <library-name>studio_plugin_tile_editor</library-name>
<name>TileEditor</name> <name>TileEditor</name>
<version>1.0</version> <version>1.0</version>
<vendor>Ryzom Core</vendor> <vendor>Ryzom Core</vendor>
<description>Tile bank editing plugin.</description> <description>Tile bank editing plugin.</description>
<dependencies> <dependencies>
<dependency plugin-name="Core" version="0.8"/> <dependency plugin-name="Core" version="0.8"/>
</dependencies> </dependencies>
</plugin-spec> </plugin-spec>

File diff suppressed because it is too large Load diff

View file

@ -1,102 +1,102 @@
// Ryzom Core Studio - Tile Editor plugin // Ryzom Core Studio - Tile Editor plugin
// Copyright (C) 2010 Winch Gate Property Limited // Copyright (C) 2010 Winch Gate Property Limited
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as // it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the // published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version. // License, or (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details. // GNU Affero General Public License for more details.
// //
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef TILE_BANK_H #ifndef TILE_BANK_H
#define TILE_BANK_H #define TILE_BANK_H
#include <QString> #include <QString>
#include <QStringList> #include <QStringList>
#include <QVariant> #include <QVariant>
#include <QList> #include <QList>
#include "tile_constants.h" #include "tile_constants.h"
#include "tile_images.h" #include "tile_images.h"
namespace NLMISC namespace NLMISC
{ {
class IStream; class IStream;
} }
class TileBankPvt; class TileBankPvt;
class TileBank class TileBank
{ {
public: public:
TileBank(); TileBank();
~TileBank(); ~TileBank();
void addTileSet( const QString &name ); void addTileSet( const QString &name );
void removeTileSet( int idx ); void removeTileSet( int idx );
void renameTileSet( int idx, const QString &newName ); void renameTileSet( int idx, const QString &newName );
void getTileSets( QStringList &l ); void getTileSets( QStringList &l );
void addLand( const QString &name ); void addLand( const QString &name );
void removeLand( int idx ); void removeLand( int idx );
void getLands( QStringList &l ); void getLands( QStringList &l );
void setLandSets( int idx, const QStringList &l ); void setLandSets( int idx, const QStringList &l );
void getLandSets( int idx, QStringList &l ); void getLandSets( int idx, QStringList &l );
bool addTile( int setIdx, const QString &name, const QVariant &pixmap, TileConstants::TTileChannel channel, TileConstants::TNodeTileType type ); bool addTile( int setIdx, const QString &name, const QVariant &pixmap, TileConstants::TTileChannel channel, TileConstants::TNodeTileType type );
void removeTile( int ts, int type, int tile ); void removeTile( int ts, int type, int tile );
bool setTile( int tileset, int tile, const QString &name, const QVariant &pixmap, TileConstants::TTileChannel channel, TileConstants::TNodeTileType type ); bool setTile( int tileset, int tile, const QString &name, const QVariant &pixmap, TileConstants::TTileChannel channel, TileConstants::TNodeTileType type );
void replaceImage( int ts, int type, int tile, TileConstants::TTileChannel channel, const QString &name, const QVariant &pixmap ); void replaceImage( int ts, int type, int tile, TileConstants::TTileChannel channel, const QString &name, const QVariant &pixmap );
void clearImage( int ts, int type, int tile, TileConstants::TTileChannel channel ); void clearImage( int ts, int type, int tile, TileConstants::TTileChannel channel );
int getTileCount( int tileSet, TileConstants::TNodeTileType type ); int getTileCount( int tileSet, TileConstants::TNodeTileType type );
int getRealTileId( int tileSet, TileConstants::TNodeTileType type, int tileIdInSet ); int getRealTileId( int tileSet, TileConstants::TNodeTileType type, int tileIdInSet );
void getTileImages( int tileSet, TileConstants::TNodeTileType type, int tileId, TileImages &images ); void getTileImages( int tileSet, TileConstants::TNodeTileType type, int tileId, TileImages &images );
void getTileImages( int tileSet, TileConstants::TNodeTileType type, QList< TileImages > &l ); void getTileImages( int tileSet, TileConstants::TNodeTileType type, QList< TileImages > &l );
void setVegetation( int tileSet, const QString &vegetation ); void setVegetation( int tileSet, const QString &vegetation );
QString getVegetation( int tileSet ) const; QString getVegetation( int tileSet ) const;
void setOriented( int tileSet, bool b ); void setOriented( int tileSet, bool b );
bool getOriented( int tileSet ) const; bool getOriented( int tileSet ) const;
void setSurfaceData( int tileSet, unsigned long data ); void setSurfaceData( int tileSet, unsigned long data );
unsigned long getSurfaceData( int tileSet ) const; unsigned long getSurfaceData( int tileSet ) const;
void setTexturePath( const QString &path ); void setTexturePath( const QString &path );
QString getTexturePath() const; QString getTexturePath() const;
void setRotation( int rotation ); void setRotation( int rotation );
void serial( NLMISC::IStream &f ); void serial( NLMISC::IStream &f );
bool hasError() const{ return m_hasError; } bool hasError() const{ return m_hasError; }
QString getLastError() const{ return m_lastError; } QString getLastError() const{ return m_lastError; }
void resetError(){ void resetError(){
m_hasError = false; m_hasError = false;
m_lastError = ""; m_lastError = "";
} }
void setError( const QString &msg ) void setError( const QString &msg )
{ {
m_hasError = true; m_hasError = true;
m_lastError = msg; m_lastError = msg;
} }
private: private:
TileBankPvt *m_pvt; TileBankPvt *m_pvt;
QString m_lastError; QString m_lastError;
bool m_hasError; bool m_hasError;
int m_rotation; int m_rotation;
}; };
#endif #endif

View file

@ -1,43 +1,43 @@
// Ryzom Core Studio - Tile Editor plugin // Ryzom Core Studio - Tile Editor plugin
// Copyright (C) 2010 Winch Gate Property Limited // Copyright (C) 2010 Winch Gate Property Limited
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as // it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the // published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version. // License, or (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details. // GNU Affero General Public License for more details.
// //
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef TILE_CONSTANTS_H #ifndef TILE_CONSTANTS_H
#define TILE_CONSTANTS_H #define TILE_CONSTANTS_H
namespace TileConstants namespace TileConstants
{ {
enum TTileChannel enum TTileChannel
{ {
TileDiffuse = 0, TileDiffuse = 0,
TileAdditive = 1, TileAdditive = 1,
TileAlpha = 2, TileAlpha = 2,
TileChannelCount = 3 TileChannelCount = 3
}; };
enum TNodeTileType enum TNodeTileType
{ {
Tile128 = 0, Tile128 = 0,
Tile256 = 1, Tile256 = 1,
TileTransition = 2, TileTransition = 2,
TileDisplacement = 3, TileDisplacement = 3,
TileNodeTypeCount = 4 TileNodeTypeCount = 4
}; };
} }
#endif #endif

View file

@ -1,40 +1,40 @@
// Ryzom Core Studio - Tile Editor plugin // Ryzom Core Studio - Tile Editor plugin
// Copyright (C) 2010 Winch Gate Property Limited // Copyright (C) 2010 Winch Gate Property Limited
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as // it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the // published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version. // License, or (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details. // GNU Affero General Public License for more details.
// //
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef TILE_IMAGES_H #ifndef TILE_IMAGES_H
#define TILE_IMAGES_H #define TILE_IMAGES_H
#include <QString> #include <QString>
struct TileImages struct TileImages
{ {
QString diffuse; QString diffuse;
QString additive; QString additive;
QString alpha; QString alpha;
void clear() void clear()
{ {
diffuse.clear(); diffuse.clear();
additive.clear(); additive.clear();
alpha.clear(); alpha.clear();
} }
}; };
#endif #endif

View file

@ -1,122 +1,122 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/> // Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// Copyright (C) 2010 Winch Gate Property Limited // Copyright (C) 2010 Winch Gate Property Limited
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as // it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the // published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version. // License, or (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details. // GNU Affero General Public License for more details.
// //
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <QtGui/QtGui> #include <QtGui/QtGui>
#include <nel/misc/debug.h> #include <nel/misc/debug.h>
#include "tile_item_delegate.h" #include "tile_item_delegate.h"
#include "tile_model.h" #include "tile_model.h"
TileItemDelegate::TileItemDelegate() TileItemDelegate::TileItemDelegate()
{ {
m_zoomFactor = ZoomNormal; m_zoomFactor = ZoomNormal;
m_imageHint = 128; m_imageHint = 128;
} }
TileItemDelegate::~TileItemDelegate() TileItemDelegate::~TileItemDelegate()
{ {
} }
void TileItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const void TileItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{ {
QStyledItemDelegate::paint(painter,option,index); QStyledItemDelegate::paint(painter,option,index);
painter->save(); painter->save();
QFont font = QApplication::font(); QFont font = QApplication::font();
//font.setBold(true); //font.setBold(true);
//SubFont.setWeight(SubFont.weight()-2); //SubFont.setWeight(SubFont.weight()-2);
QFontMetrics fm(font); QFontMetrics fm(font);
QPixmap tile = qvariant_cast<QPixmap>(index.data(TileModel::TilePixmapRole)); QPixmap tile = qvariant_cast<QPixmap>(index.data(TileModel::TilePixmapRole));
QString tileFileText = qvariant_cast<QString>(index.data(TileModel::TileFilenameRole)); QString tileFileText = qvariant_cast<QString>(index.data(TileModel::TileFilenameRole));
QString tileIdText = qvariant_cast<QString>(index.data(TileModel::TileIndexRole)); QString tileIdText = qvariant_cast<QString>(index.data(TileModel::TileIndexRole));
QSize tileSize = tile.size(); QSize tileSize = tile.size();
//QRect headerRect = option.rect; //QRect headerRect = option.rect;
QRect rect(option.rect); QRect rect(option.rect);
//QRect tileRect(option.rect); //QRect tileRect(option.rect);
int textHeight = fm.height(); int textHeight = fm.height();
int iconPosModX = PIXMAP_MARGIN + (tile.width() / 2); int iconPosModX = PIXMAP_MARGIN + (tile.width() / 2);
int iconPosModY = (option.rect.height() - tile.height()) / 2; int iconPosModY = (option.rect.height() - tile.height()) / 2;
painter->drawPixmap(rect.adjusted(iconPosModX, iconPosModY, iconPosModX, iconPosModY).topLeft(), tile); painter->drawPixmap(rect.adjusted(iconPosModX, iconPosModY, iconPosModX, iconPosModY).topLeft(), tile);
//tileRect.setRight(tileSize.width()+30); //tileRect.setRight(tileSize.width()+30);
//tileRect.setTop(tileRect.top()+5); //tileRect.setTop(tileRect.top()+5);
//headerRect.setLeft(tileRect.right()); //headerRect.setLeft(tileRect.right());
//subheaderRect.setLeft(tileRect.right()); //subheaderRect.setLeft(tileRect.right());
//headerRect.setTop(headerRect.top()+5); //headerRect.setTop(headerRect.top()+5);
//headerRect.setBottom(headerRect.top()+fm.height()); //headerRect.setBottom(headerRect.top()+fm.height());
//subheaderRect.setTop(headerRect.bottom()+2); //subheaderRect.setTop(headerRect.bottom()+2);
//painter->drawPixmap(targetrect, pixmap, sourcerect) //painter->drawPixmap(targetrect, pixmap, sourcerect)
//painter->drawPixmap(QPoint(iconRect.right()/2,iconRect.top()/2),icon.pixmap(iconsize.width(),iconsize.height())); //painter->drawPixmap(QPoint(iconRect.right()/2,iconRect.top()/2),icon.pixmap(iconsize.width(),iconsize.height()));
//painter->drawPixmap(QPoint(tileRect.left()+tileSize.width()/2+2,tileRect.top()+tileSize.height()/2+3),tile); //painter->drawPixmap(QPoint(tileRect.left()+tileSize.width()/2+2,tileRect.top()+tileSize.height()/2+3),tile);
//painter->setFont(font); //painter->setFont(font);
//painter->drawText(headerRect,headerText); //painter->drawText(headerRect,headerText);
//painter->setFont(SubFont); //painter->setFont(SubFont);
//painter->drawText(subheaderRect.left(),subheaderRect.top()+17,subText); //painter->drawText(subheaderRect.left(),subheaderRect.top()+17,subText);
painter->restore(); painter->restore();
} }
QSize TileItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index ) const QSize TileItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index ) const
{ {
QPixmap tile = qvariant_cast<QPixmap>(index.data(TileModel::TilePixmapRole)); QPixmap tile = qvariant_cast<QPixmap>(index.data(TileModel::TilePixmapRole));
QSize tileSize = tile.size(); QSize tileSize = tile.size();
QFont font = QApplication::font(); QFont font = QApplication::font();
QFontMetrics fm(font); QFontMetrics fm(font);
return(QSize(tileSize.width()+(2*PIXMAP_MARGIN), tileSize.height()+fm.height()+(2*PIXMAP_MARGIN))); return(QSize(tileSize.width()+(2*PIXMAP_MARGIN), tileSize.height()+fm.height()+(2*PIXMAP_MARGIN)));
} }
TileItemDelegate::TZoomFactor TileItemDelegate::getZoomFactor() TileItemDelegate::TZoomFactor TileItemDelegate::getZoomFactor()
{ {
return m_zoomFactor; return m_zoomFactor;
} }
void TileItemDelegate::setZoomFactor(TileItemDelegate::TZoomFactor zoomFactor) void TileItemDelegate::setZoomFactor(TileItemDelegate::TZoomFactor zoomFactor)
{ {
m_zoomFactor = zoomFactor; m_zoomFactor = zoomFactor;
} }
// SLOTS // SLOTS
void TileItemDelegate::currentTab(int index) void TileItemDelegate::currentTab(int index)
{ {
if(index == 1) if(index == 1)
{ {
nlinfo("switching delegate to 1 or 256"); nlinfo("switching delegate to 1 or 256");
m_imageHint = 256; m_imageHint = 256;
} }
else else
{ {
nlinfo("switching delegate to 0,2,3 or 128"); nlinfo("switching delegate to 0,2,3 or 128");
m_imageHint = 128; m_imageHint = 128;
} }
} }

View file

@ -1,42 +1,42 @@
// Ryzom Core Studio - Tile Editor plugin // Ryzom Core Studio - Tile Editor plugin
// Copyright (C) 2010 Winch Gate Property Limited // Copyright (C) 2010 Winch Gate Property Limited
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as // it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the // published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version. // License, or (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details. // GNU Affero General Public License for more details.
// //
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "tilebank_loader.h" #include "tilebank_loader.h"
#include "tile_model.h" #include "tile_model.h"
#include "nel/misc/file.h" #include "nel/misc/file.h"
TileBankLoader::TileBankLoader() TileBankLoader::TileBankLoader()
{ {
} }
TileBankLoader::~TileBankLoader() TileBankLoader::~TileBankLoader()
{ {
} }
bool TileBankLoader::load( const char *filename, TileModel *model ) bool TileBankLoader::load( const char *filename, TileModel *model )
{ {
NLMISC::CIFile file; NLMISC::CIFile file;
if( !file.open( filename, false ) ) if( !file.open( filename, false ) )
return false; return false;
model->serial( file ); model->serial( file );
file.close(); file.close();
return true; return true;
} }

View file

@ -1,35 +1,35 @@
// Ryzom Core Studio - Tile Editor plugin // Ryzom Core Studio - Tile Editor plugin
// Copyright (C) 2010 Winch Gate Property Limited // Copyright (C) 2010 Winch Gate Property Limited
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as // it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the // published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version. // License, or (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details. // GNU Affero General Public License for more details.
// //
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef TILEBANK_LOADER_H #ifndef TILEBANK_LOADER_H
#define TILEBANK_LOADER_H #define TILEBANK_LOADER_H
class TileModel; class TileModel;
class TileBankLoader class TileBankLoader
{ {
public: public:
TileBankLoader(); TileBankLoader();
~TileBankLoader(); ~TileBankLoader();
bool load( const char *filename, TileModel *model ); bool load( const char *filename, TileModel *model );
private: private:
}; };
#endif #endif

View file

@ -1,48 +1,48 @@
// Ryzom Core Studio - Tile Editor plugin // Ryzom Core Studio - Tile Editor plugin
// Copyright (C) 2010 Winch Gate Property Limited // Copyright (C) 2010 Winch Gate Property Limited
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as // it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the // published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version. // License, or (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details. // GNU Affero General Public License for more details.
// //
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "tilebank_saver.h" #include "tilebank_saver.h"
#include "tile_model.h" #include "tile_model.h"
#include "tile_item.h" #include "tile_item.h"
#include "nel/3d/tile_bank.h" #include "nel/3d/tile_bank.h"
#include "nel/misc/file.h" #include "nel/misc/file.h"
TileBankSaver::TileBankSaver() TileBankSaver::TileBankSaver()
{ {
} }
TileBankSaver::~TileBankSaver() TileBankSaver::~TileBankSaver()
{ {
} }
bool TileBankSaver::save( const char *fileName, TileModel* model ) bool TileBankSaver::save( const char *fileName, TileModel* model )
{ {
// Save to file // Save to file
NLMISC::COFile f; NLMISC::COFile f;
bool b = f.open( fileName, false, false, false ); bool b = f.open( fileName, false, false, false );
if( !b ) if( !b )
return false; return false;
model->serial( f ); model->serial( f );
f.flush(); f.flush();
f.close(); f.close();
return true; return true;
} }

View file

@ -1,39 +1,39 @@
// Ryzom Core Studio - Tile Editor plugin // Ryzom Core Studio - Tile Editor plugin
// Copyright (C) 2010 Winch Gate Property Limited // Copyright (C) 2010 Winch Gate Property Limited
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as // it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the // published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version. // License, or (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details. // GNU Affero General Public License for more details.
// //
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef TILEBANK_SAVER_H #ifndef TILEBANK_SAVER_H
#define TILEBANK_SAVER_H #define TILEBANK_SAVER_H
#include <QString> #include <QString>
#include <QList> #include <QList>
class TileModel; class TileModel;
class TileBankSaver class TileBankSaver
{ {
public: public:
TileBankSaver(); TileBankSaver();
~TileBankSaver(); ~TileBankSaver();
bool save( const char *filename, TileModel* model ); bool save( const char *filename, TileModel* model );
private: private:
}; };
#endif #endif

View file

@ -1,472 +1,472 @@
// Ryzom Core Studio - Translation Manager Plugin // Ryzom Core Studio - Translation Manager Plugin
// Copyright (C) 2010 Winch Gate Property Limited // Copyright (C) 2010 Winch Gate Property Limited
// //
// This program is free software: you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as // it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the // published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version. // License, or (at your option) any later version.
// //
// This program is distributed in the hope that it will be useful, // This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details. // GNU Affero General Public License for more details.
// //
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "translation_manager_constants.h" #include "translation_manager_constants.h"
#include "uxt_editor.h" #include "uxt_editor.h"
#include <QTableWidget> #include <QTableWidget>
#include <QFormLayout> #include <QFormLayout>
#include <QCloseEvent> #include <QCloseEvent>
#include <QContextMenuEvent> #include <QContextMenuEvent>
#include <QMessageBox> #include <QMessageBox>
#include <QMenu> #include <QMenu>
#include <QFileDialog> #include <QFileDialog>
#include <QFile> #include <QFile>
#include <QTextStream> #include <QTextStream>
#include "nel/misc/diff_tool.h" #include "nel/misc/diff_tool.h"
#include "nel/misc/i18n.h" #include "nel/misc/i18n.h"
namespace namespace
{ {
QString getLang( const QString &fn ) QString getLang( const QString &fn )
{ {
QString lang = fn; QString lang = fn;
int idx = lang.lastIndexOf( '/' ); int idx = lang.lastIndexOf( '/' );
if( idx == -1 ) if( idx == -1 )
return ""; return "";
lang = lang.mid( idx + 1 ); lang = lang.mid( idx + 1 );
idx = lang.lastIndexOf( '.' ); idx = lang.lastIndexOf( '.' );
if( idx == -1 ) if( idx == -1 )
return ""; return "";
lang = lang.left( idx ); lang = lang.left( idx );
return lang; return lang;
} }
} }
namespace TranslationManager namespace TranslationManager
{ {
void markItemTranslated( QTableWidgetItem *item ) void markItemTranslated( QTableWidgetItem *item )
{ {
item->setBackground( QColor::fromRgb( 126, 247, 134 ) ); item->setBackground( QColor::fromRgb( 126, 247, 134 ) );
} }
void markItemUntranslated( QTableWidgetItem *item ) void markItemUntranslated( QTableWidgetItem *item )
{ {
item->setBackground( QColor::fromRgb( 247, 126, 126 ) ); item->setBackground( QColor::fromRgb( 247, 126, 126 ) );
} }
class UXTEditorPvt class UXTEditorPvt
{ {
public: public:
UXTEditorPvt() UXTEditorPvt()
{ {
t = new QTableWidget(); t = new QTableWidget();
loadedFromWK = false; loadedFromWK = false;
} }
QTableWidget *t; QTableWidget *t;
std::vector< STRING_MANAGER::TStringInfo > infos; std::vector< STRING_MANAGER::TStringInfo > infos;
bool loadedFromWK; bool loadedFromWK;
}; };
UXTEditor::UXTEditor( QMdiArea *parent ) : UXTEditor::UXTEditor( QMdiArea *parent ) :
CEditor( parent ) CEditor( parent )
{ {
editor_type = Constants::ED_UXT; editor_type = Constants::ED_UXT;
setAttribute( Qt::WA_DeleteOnClose ); setAttribute( Qt::WA_DeleteOnClose );
d_ptr = new UXTEditorPvt(); d_ptr = new UXTEditorPvt();
blockTableSignals( false ); blockTableSignals( false );
} }
UXTEditor::~UXTEditor() UXTEditor::~UXTEditor()
{ {
delete d_ptr; delete d_ptr;
d_ptr = NULL; d_ptr = NULL;
} }
void UXTEditor::open( QString filename ) void UXTEditor::open( QString filename )
{ {
std::vector< STRING_MANAGER::TStringInfo > &infos = d_ptr->infos; std::vector< STRING_MANAGER::TStringInfo > &infos = d_ptr->infos;
QString lang = getLang( filename ); QString lang = getLang( filename );
infos.clear(); infos.clear();
STRING_MANAGER::loadStringFile( filename.toUtf8().constData(), infos, false ); STRING_MANAGER::loadStringFile( filename.toUtf8().constData(), infos, false );
if( d_ptr->infos.size() == 0 ) if( d_ptr->infos.size() == 0 )
{ {
// The work file cannot be found, cannot proceed // The work file cannot be found, cannot proceed
if( filename.endsWith( "wk.uxt" ) ) if( filename.endsWith( "wk.uxt" ) )
{ {
QMessageBox::critical( this, QMessageBox::critical( this,
tr( "Error opening file.." ), tr( "Error opening file.." ),
tr( "There was an error opening wk.uxt" ) ); tr( "There was an error opening wk.uxt" ) );
return; return;
} }
int l = filename.lastIndexOf( "/" ); int l = filename.lastIndexOf( "/" );
if( l == -1 ) if( l == -1 )
return; return;
QString fn = filename.left( l ); QString fn = filename.left( l );
fn += "/wk.uxt"; fn += "/wk.uxt";
// The work file cannot be found, cannot proceed // The work file cannot be found, cannot proceed
STRING_MANAGER::loadStringFile( fn.toUtf8().constData(), infos, true ); STRING_MANAGER::loadStringFile( fn.toUtf8().constData(), infos, true );
if( d_ptr->infos.size() == 0 ) if( d_ptr->infos.size() == 0 )
{ {
QMessageBox::critical( this, QMessageBox::critical( this,
tr( "Error opening Uxt file" ), tr( "Error opening Uxt file" ),
tr( "Neither the specified file nor wk.uxt could be opened." ) ); tr( "Neither the specified file nor wk.uxt could be opened." ) );
return; return;
} }
d_ptr->loadedFromWK = true; d_ptr->loadedFromWK = true;
} }
blockTableSignals( true ); 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() );
setHeaderText( "Id", lang.toUpper() + " Text" ); setHeaderText( "Id", lang.toUpper() + " Text" );
int i = 0; int i = 0;
std::vector< STRING_MANAGER::TStringInfo >::const_iterator itr = infos.begin(); std::vector< STRING_MANAGER::TStringInfo >::const_iterator itr = infos.begin();
while( itr != infos.end() ) while( itr != infos.end() )
{ {
const STRING_MANAGER::TStringInfo &info = *itr; const STRING_MANAGER::TStringInfo &info = *itr;
QTableWidgetItem *name = new QTableWidgetItem( info.Identifier.c_str() ); QTableWidgetItem *name = new QTableWidgetItem( info.Identifier.c_str() );
QTableWidgetItem *text1 = new QTableWidgetItem( info.Text.toUtf8().c_str() ); QTableWidgetItem *text1 = new QTableWidgetItem( info.Text.toUtf8().c_str() );
d_ptr->t->setItem( i, 0, name ); d_ptr->t->setItem( i, 0, name );
d_ptr->t->setItem( i, 1, text1 ); d_ptr->t->setItem( i, 1, text1 );
if( ( info.HashValue != 0 ) && !d_ptr->loadedFromWK ) if( ( info.HashValue != 0 ) && !d_ptr->loadedFromWK )
{ {
markItemTranslated( name ); markItemTranslated( name );
markItemTranslated( text1 ); markItemTranslated( text1 );
} }
else else
{ {
markItemUntranslated( name ); markItemUntranslated( name );
markItemUntranslated( text1 ); markItemUntranslated( text1 );
} }
++itr; ++itr;
i++; i++;
} }
d_ptr->t->resizeColumnsToContents(); d_ptr->t->resizeColumnsToContents();
blockTableSignals( false ); blockTableSignals( false );
setWidget( d_ptr->t ); setWidget( d_ptr->t );
current_file = filename; current_file = filename;
setWindowTitle( filename + "[*]" ); setWindowTitle( filename + "[*]" );
setWindowFilePath( filename ); setWindowFilePath( filename );
} }
void UXTEditor::save() void UXTEditor::save()
{ {
saveAs( current_file ); saveAs( current_file );
} }
void UXTEditor::saveAs( QString filename ) void UXTEditor::saveAs( QString filename )
{ {
QFile f( filename ); QFile f( filename );
if( !f.open( QIODevice::WriteOnly ) ) if( !f.open( QIODevice::WriteOnly ) )
return; return;
QTextStream out( &f ); QTextStream out( &f );
int idx = 0; int idx = 0;
std::vector< STRING_MANAGER::TStringInfo >::const_iterator itr = d_ptr->infos.begin(); std::vector< STRING_MANAGER::TStringInfo >::const_iterator itr = d_ptr->infos.begin();
while( itr != d_ptr->infos.end() ) while( itr != d_ptr->infos.end() )
{ {
uint64 hash = 0; uint64 hash = 0;
// If text2 is not empty we can assume the string was translated, so we store with the correct hash // If text2 is not empty we can assume the string was translated, so we store with the correct hash
// If text2 is empty, it wasn't translated so we can just use the old hash. // If text2 is empty, it wasn't translated so we can just use the old hash.
// Additionally, if the strings were loaded from the wk.uxt file, we use a hash of 0 so we know it was not translated // Additionally, if the strings were loaded from the wk.uxt file, we use a hash of 0 so we know it was not translated
if( itr->Text2.empty() ) if( itr->Text2.empty() )
{ {
if( d_ptr->loadedFromWK ) if( d_ptr->loadedFromWK )
hash = 0; hash = 0;
else else
hash = itr->HashValue; hash = itr->HashValue;
} }
else else
{ {
hash = NLMISC::CI18N::makeHash( itr->Text2 ); hash = NLMISC::CI18N::makeHash( itr->Text2 );
} }
QString hashLine = "// HASH_VALUE "; QString hashLine = "// HASH_VALUE ";
hashLine += QString( NLMISC::CI18N::hashToString( hash ).c_str() ).toUpper(); hashLine += QString( NLMISC::CI18N::hashToString( hash ).c_str() ).toUpper();
hashLine += "\r\n"; hashLine += "\r\n";
QString idxLine = "// INDEX "; QString idxLine = "// INDEX ";
idxLine += QString::number( idx ); idxLine += QString::number( idx );
idxLine += "\r\n"; idxLine += "\r\n";
QString trLine = ""; QString trLine = "";
trLine += itr->Identifier.c_str(); trLine += itr->Identifier.c_str();
trLine += "\t"; trLine += "\t";
trLine += "["; trLine += "[";
if( itr->Text2.empty() ) if( itr->Text2.empty() )
trLine += itr->Text.toUtf8().c_str(); trLine += itr->Text.toUtf8().c_str();
else else
trLine += itr->Text2.toUtf8().c_str(); trLine += itr->Text2.toUtf8().c_str();
trLine += "]"; trLine += "]";
trLine += "\r\n"; trLine += "\r\n";
QString newLine = "\r\n"; QString newLine = "\r\n";
out << hashLine; out << hashLine;
out << idxLine; out << idxLine;
out << trLine; out << trLine;
out << newLine; out << newLine;
++itr; ++itr;
idx++; idx++;
} }
f.close(); f.close();
setWindowModified( false ); setWindowModified( false );
} }
void UXTEditor::activateWindow() void UXTEditor::activateWindow()
{ {
showMaximized(); showMaximized();
} }
void UXTEditor::insertRow() void UXTEditor::insertRow()
{ {
blockTableSignals( true ); blockTableSignals( true );
d_ptr->infos.push_back( STRING_MANAGER::TStringInfo() ); d_ptr->infos.push_back( STRING_MANAGER::TStringInfo() );
d_ptr->t->setRowCount( d_ptr->t->rowCount() + 1 ); d_ptr->t->setRowCount( d_ptr->t->rowCount() + 1 );
int row = d_ptr->t->rowCount() - 1; int row = d_ptr->t->rowCount() - 1;
QTableWidgetItem *item1 = new QTableWidgetItem(); QTableWidgetItem *item1 = new QTableWidgetItem();
QTableWidgetItem *item2 = new QTableWidgetItem(); QTableWidgetItem *item2 = new QTableWidgetItem();
d_ptr->t->setItem( row, 0, item1 ); d_ptr->t->setItem( row, 0, item1 );
d_ptr->t->setItem( row, 1, item2 ); d_ptr->t->setItem( row, 1, item2 );
markRowUntranslated( row ); markRowUntranslated( row );
setWindowModified( true ); setWindowModified( true );
blockTableSignals( false ); blockTableSignals( false );
} }
void UXTEditor::deleteRow() void UXTEditor::deleteRow()
{ {
int r = d_ptr->t->currentRow(); int r = d_ptr->t->currentRow();
if( r < 0 ) if( r < 0 )
return; return;
int answer = QMessageBox::question( this, int answer = QMessageBox::question( this,
tr( "Deleting a row" ), tr( "Deleting a row" ),
tr( "Are you sure you want to delete this row?" ), tr( "Are you sure you want to delete this row?" ),
QMessageBox::Yes, QMessageBox::Yes,
QMessageBox::Cancel ); QMessageBox::Cancel );
if( QMessageBox::Yes != answer ) if( QMessageBox::Yes != answer )
return; return;
std::vector< STRING_MANAGER::TStringInfo >::iterator itr = d_ptr->infos.begin(); std::vector< STRING_MANAGER::TStringInfo >::iterator itr = d_ptr->infos.begin();
itr += r; itr += r;
d_ptr->infos.erase( itr ); d_ptr->infos.erase( itr );
d_ptr->t->removeRow( r ); d_ptr->t->removeRow( r );
setWindowModified( true ); setWindowModified( true );
} }
void UXTEditor::closeEvent( QCloseEvent *e ) void UXTEditor::closeEvent( QCloseEvent *e )
{ {
if( isWindowModified() ) if( isWindowModified() )
{ {
int reply = QMessageBox::question( this, int reply = QMessageBox::question( this,
tr( "Table changed" ), tr( "Table changed" ),
tr( "The table has changed. Would you like to save your changes?" ), tr( "The table has changed. Would you like to save your changes?" ),
QMessageBox::Yes, QMessageBox::Yes,
QMessageBox::No QMessageBox::No
); );
if( reply == QMessageBox::Yes ) if( reply == QMessageBox::Yes )
save(); save();
} }
e->accept(); e->accept();
close(); close();
} }
void UXTEditor::contextMenuEvent( QContextMenuEvent *e ) void UXTEditor::contextMenuEvent( QContextMenuEvent *e )
{ {
QMenu *menu = new QMenu( this ); QMenu *menu = new QMenu( this );
QAction *insertAction = new QAction( "Insert row", menu ); QAction *insertAction = new QAction( "Insert row", menu );
QAction *deleteAction = new QAction( "Delete row", menu ); QAction *deleteAction = new QAction( "Delete row", menu );
QAction *markAction = new QAction( "Mark translated", menu ); QAction *markAction = new QAction( "Mark translated", menu );
QAction *unmarkAction = new QAction( "Mark not-translated", menu ); QAction *unmarkAction = new QAction( "Mark not-translated", menu );
QAction *saveAction = new QAction( "Save", menu ); QAction *saveAction = new QAction( "Save", menu );
QAction *saveAsAction = new QAction( "Save as..", menu ); QAction *saveAsAction = new QAction( "Save as..", menu );
connect( insertAction, SIGNAL( triggered( bool ) ), this, SLOT( insertRow() ) ); connect( insertAction, SIGNAL( triggered( bool ) ), this, SLOT( insertRow() ) );
connect( deleteAction, SIGNAL( triggered( bool ) ), this, SLOT( deleteRow() ) ); connect( deleteAction, SIGNAL( triggered( bool ) ), this, SLOT( deleteRow() ) );
connect( markAction, SIGNAL( triggered( bool ) ), this, SLOT( markTranslated() ) ); connect( markAction, SIGNAL( triggered( bool ) ), this, SLOT( markTranslated() ) );
connect( unmarkAction, SIGNAL( triggered( bool ) ), this, SLOT( markUntranslated() ) ); connect( unmarkAction, SIGNAL( triggered( bool ) ), this, SLOT( markUntranslated() ) );
connect( saveAction, SIGNAL( triggered( bool ) ), this, SLOT( onSaveClicked() ) ); connect( saveAction, SIGNAL( triggered( bool ) ), this, SLOT( onSaveClicked() ) );
connect( saveAsAction, SIGNAL( triggered( bool ) ), this, SLOT( onSaveAsClicked() ) ); connect( saveAsAction, SIGNAL( triggered( bool ) ), this, SLOT( onSaveAsClicked() ) );
menu->addAction( insertAction ); menu->addAction( insertAction );
menu->addAction( deleteAction ); menu->addAction( deleteAction );
menu->addAction( markAction ); menu->addAction( markAction );
menu->addAction( unmarkAction ); menu->addAction( unmarkAction );
menu->addAction( saveAction ); menu->addAction( saveAction );
menu->addAction( saveAsAction ); menu->addAction( saveAsAction );
menu->exec( e->globalPos() ); menu->exec( e->globalPos() );
} }
void UXTEditor::onCellChanged( int row, int column ) void UXTEditor::onCellChanged( int row, int column )
{ {
QTableWidgetItem *item = d_ptr->t->item( row, column ); QTableWidgetItem *item = d_ptr->t->item( row, column );
STRING_MANAGER::TStringInfo &info = d_ptr->infos[ row ]; STRING_MANAGER::TStringInfo &info = d_ptr->infos[ row ];
if( column == 0 ) if( column == 0 )
info.Identifier = item->text().toUtf8().constData(); info.Identifier = item->text().toUtf8().constData();
else else
if( column == 1 ) if( column == 1 )
info.Text2 = item->text().toUtf8().constData(); info.Text2 = item->text().toUtf8().constData();
setWindowModified( true ); setWindowModified( true );
markRowTranslated( row ); markRowTranslated( row );
} }
void UXTEditor::markTranslated() void UXTEditor::markTranslated()
{ {
int r = d_ptr->t->currentRow(); int r = d_ptr->t->currentRow();
if( r < 0 ) if( r < 0 )
return; return;
STRING_MANAGER::TStringInfo &info = d_ptr->infos[ r ]; STRING_MANAGER::TStringInfo &info = d_ptr->infos[ r ];
if( !info.Text2.empty() ) if( !info.Text2.empty() )
return; return;
info.Text2 = info.Text; info.Text2 = info.Text;
setWindowModified( true ); setWindowModified( true );
markRowTranslated( r ); markRowTranslated( r );
} }
void UXTEditor::markUntranslated() void UXTEditor::markUntranslated()
{ {
int r = d_ptr->t->currentRow(); int r = d_ptr->t->currentRow();
if( r < 0 ) if( r < 0 )
return; return;
STRING_MANAGER::TStringInfo &info = d_ptr->infos[ r ]; STRING_MANAGER::TStringInfo &info = d_ptr->infos[ r ];
info.Text2.clear(); info.Text2.clear();
info.HashValue = 0; info.HashValue = 0;
setWindowModified( true ); setWindowModified( true );
markRowUntranslated( r ); markRowUntranslated( r );
} }
void UXTEditor::onSaveClicked() void UXTEditor::onSaveClicked()
{ {
save(); save();
} }
void UXTEditor::onSaveAsClicked() void UXTEditor::onSaveAsClicked()
{ {
QString path = current_file; QString path = current_file;
int idx = path.lastIndexOf( '/' ); int idx = path.lastIndexOf( '/' );
if( idx < 0 ) if( idx < 0 )
path = ""; path = "";
else else
path = path.left( idx + 1 ); path = path.left( idx + 1 );
QString file = QFileDialog::getSaveFileName( this, QString file = QFileDialog::getSaveFileName( this,
tr( "Save Uxt as.." ), tr( "Save Uxt as.." ),
path, path,
tr( "Uxt files ( *.uxt)" ) ); tr( "Uxt files ( *.uxt)" ) );
if( file.isEmpty() ) if( file.isEmpty() )
return; return;
saveAs( file ); saveAs( file );
} }
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 );
QTableWidgetItem *h2 = new QTableWidgetItem( text ); QTableWidgetItem *h2 = new QTableWidgetItem( text );
h1->setTextAlignment( Qt::AlignLeft ); h1->setTextAlignment( Qt::AlignLeft );
h2->setTextAlignment( Qt::AlignLeft ); h2->setTextAlignment( Qt::AlignLeft );
d_ptr->t->setHorizontalHeaderItem( 0, h1 ); d_ptr->t->setHorizontalHeaderItem( 0, h1 );
d_ptr->t->setHorizontalHeaderItem( 1, h2 ); d_ptr->t->setHorizontalHeaderItem( 1, h2 );
} }
void UXTEditor::blockTableSignals( bool block ) void UXTEditor::blockTableSignals( bool block )
{ {
if( block ) if( block )
disconnect( d_ptr->t, SIGNAL( cellChanged( int, int ) ), this, SLOT( onCellChanged( int, int ) ) ); disconnect( d_ptr->t, SIGNAL( cellChanged( int, int ) ), this, SLOT( onCellChanged( int, int ) ) );
else else
connect( d_ptr->t, SIGNAL( cellChanged( int, int ) ), this, SLOT( onCellChanged( int, int ) ) ); connect( d_ptr->t, SIGNAL( cellChanged( int, int ) ), this, SLOT( onCellChanged( int, int ) ) );
} }
void UXTEditor::markRowTranslated( int row ) void UXTEditor::markRowTranslated( int row )
{ {
blockTableSignals( true ); blockTableSignals( true );
QTableWidgetItem *item1 = d_ptr->t->item( row, 0 ); QTableWidgetItem *item1 = d_ptr->t->item( row, 0 );
QTableWidgetItem *item2 = d_ptr->t->item( row, 1 ); QTableWidgetItem *item2 = d_ptr->t->item( row, 1 );
markItemTranslated( item1 ); markItemTranslated( item1 );
markItemTranslated( item2 ); markItemTranslated( item2 );
blockTableSignals( false ); blockTableSignals( false );
} }
void UXTEditor::markRowUntranslated( int row ) void UXTEditor::markRowUntranslated( int row )
{ {
blockTableSignals( true ); blockTableSignals( true );
QTableWidgetItem *item1 = d_ptr->t->item( row, 0 ); QTableWidgetItem *item1 = d_ptr->t->item( row, 0 );
QTableWidgetItem *item2 = d_ptr->t->item( row, 1 ); QTableWidgetItem *item2 = d_ptr->t->item( row, 1 );
markItemUntranslated( item1 ); markItemUntranslated( item1 );
markItemUntranslated( item2 ); markItemUntranslated( item2 );
blockTableSignals( false ); blockTableSignals( false );
} }
} }