-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbnspriteeditor.h
More file actions
287 lines (247 loc) · 9.6 KB
/
bnspriteeditor.h
File metadata and controls
287 lines (247 loc) · 9.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
#ifndef BNSPRITECREATOR_H
#define BNSPRITECREATOR_H
#include <QColorDialog>
#include <QDebug>
#include <QFileDialog>
#include <QGraphicsScene>
#include <QGraphicsPixmapItem>
#include <QListWidgetItem>
#include <QMainWindow>
#include <QMessageBox>
#include <QScrollBar>
#include <QTreeWidgetItem>
#include <QtCore>
#include <QtGui>
#include "bnsprite.h"
#include "customspritemanager.h"
#include "palettecontextmenu.h"
QT_BEGIN_NAMESPACE
namespace Ui { class BNSpriteEditor; }
QT_END_NAMESPACE
typedef QVector<QRgb> Palette;
typedef QVector<Palette> PaletteGroup;
class BNSpriteEditor : public QMainWindow
{
Q_OBJECT
public:
BNSpriteEditor(QWidget *parent = nullptr);
~BNSpriteEditor();
bool eventFilter(QObject *object, QEvent *event);
void closeEvent (QCloseEvent *event);
// Easy file reading
void dragEnterEvent(QDragEnterEvent *e);
void dropEvent(QDropEvent *e);
void passArgument(QString const& file, bool showSuccess);
private slots:
// Actions
void on_actionImport_Sprite_triggered();
void on_actionImport_SF_Sprite_triggered();
void on_actionExport_Sprite_triggered();
void on_actionExport_SF_Sprite_triggered();
void on_actionClose_triggered();
void on_actionSimple_Mode_triggered();
void on_actionAdvanced_Mode_triggered();
void on_actionMerge_Sprite_triggered();
void on_actionExport_Sprite_as_Single_PNG_triggered();
void on_actionExport_Sprite_as_Individual_PNG_triggered();
void on_actionAbout_BNSpriteEditor_triggered();
void on_actionAbout_Qt_triggered();
void on_actionCustom_Sprite_Manager_triggered();
void on_actionConvert_Sprite_to_be_Compatible_with_SF_triggered();
// Animation
void on_Anim_LW_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
void on_Anim_PB_Up_clicked();
void on_Anim_PB_Down_clicked();
void on_Anim_PB_New_clicked();
void on_Anim_PB_Dup_clicked();
void on_Anim_PB_Del_clicked();
// Frame
void on_Frame_LW_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
void on_Frame_CB_Loop_toggled(bool checked);
void on_Frame_PB_Play_clicked();
void on_Frame_Play_timeout();
void on_Frame_PB_ShiftL_clicked();
void on_Frame_PB_ShiftR_clicked();
void on_Frame_PB_New_clicked();
void on_Frame_PB_Copy_clicked();
void on_Frame_PB_Paste_clicked();
void on_Frame_PB_Del_clicked();
void on_Frame_SB_Delay_valueChanged(int arg1);
void on_Frame_CB_Flag0_toggled(bool checked);
void on_Frame_CB_Flag1_toggled(bool checked);
// Tileset
void on_Tileset_SB_Index_valueChanged(int arg1);
void on_Tileset_PB_Import_clicked();
void on_Tileset_PB_Export_clicked();
// Sub Animation
void on_SubAnim_Tabs_currentChanged(int index);
void on_SubAnim_PB_New_clicked();
void on_SubAnim_PB_Dup_clicked();
void on_SubAnim_PB_Del_clicked();
void on_SubFrame_PB_Play_clicked();
void on_SubFrame_Play_timeout();
void on_SubFrame_CB_Loop_toggled(bool checked);
void on_SubFrame_LW_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
void on_SubFrame_PB_Add_clicked();
void on_SubFrame_PB_Del_clicked();
void on_SubFrame_PB_ShiftL_clicked();
void on_SubFrame_PB_ShiftR_clicked();
void on_SubFrame_SB_Index_valueChanged(int arg1);
void on_SubFrame_SB_Delay_valueChanged(int arg1);
// Palette
void on_Palette_SB_Group_valueChanged(int arg1);
void on_Palette_SB_Index_valueChanged(int arg1);
void on_Palette_PB_Up_pressed();
void on_Palette_PB_Down_pressed();
void on_Palette_PB_Import_pressed();
void on_Palette_PB_Export_pressed();
void on_Palette_Color_changed(int paletteIndex, int colorIndex, QRgb color);
void on_PaletteContexMenu_requested(int paletteIndex, int colorIndex, QPoint pos);
void on_PaletteContexMenu_colorCopied();
void on_PaletteContexMenu_colorReplaced();
void on_PaletteContexMenu_paletteCopied();
void on_PaletteContexMenu_paletteReplaced();
void on_PaletteContexMenu_paletteInsertAbove();
void on_PaletteContexMenu_paletteInsertBelow();
void on_PaletteContexMenu_paletteDeleted();
void on_PaletteContexMenu_pageCopied();
// Object
void on_Object_Tabs_currentChanged(int index);
void on_Object_PB_New_clicked();
void on_Object_PB_Dup_clicked();
void on_Object_PB_Del_clicked();
void on_OAM_TW_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
void on_OAM_PB_Up_clicked();
void on_OAM_PB_Down_clicked();
void on_OAM_PB_New_clicked();
void on_OAM_PB_Dup_clicked();
void on_OAM_PB_Del_clicked();
void on_OAM_SB_Tile_valueChanged(int arg1);
void on_OAM_CB_Size_currentTextChanged(const QString &arg1);
void on_OAM_SB_XPos_valueChanged(int arg1);
void on_OAM_SB_YPos_valueChanged(int arg1);
void on_OAM_CB_HFlip_toggled(bool checked);
void on_OAM_CB_VFlip_toggled(bool checked);
void on_OAM_Highlight_timeout();
// Preview
void on_Preview_BG_currentTextChanged(const QString &arg1);
void on_Preview_CB_Highlight_clicked(bool checked);
void on_Preview_pressed(QPoint pos);
// Image control
void on_Image_PB_Up_pressed();
void on_Image_PB_Up_released();
void on_Image_PB_Down_pressed();
void on_Image_PB_Down_released();
void on_Image_PB_Left_pressed();
void on_Image_PB_Left_released();
void on_Image_PB_Right_pressed();
void on_Image_PB_Right_released();
void on_Image_PB_HFlip_clicked();
void on_Image_PB_VFlip_clicked();
void on_Image_Move_timeout();
// Custom Sprite
void on_CSM_BuildSprite_pressed(int tilesetCount);
void on_CSM_BuildCheckButton_pressed();
void on_CSM_BuildPushFrame_pressed(int frameID, bool newAnim);
void on_CSM_LoadProject_pressed(QString file, uint32_t saveVersion, qint64 skipByte, int tilesetCount);
void on_CSM_SaveProject_pressed(QString file);
private:
void ResetProgram(bool clearSprite = true);
void ResetAnim();
void ResetFrame();
void ResetOthers();
void ResetOAM();
void ResetSubFrame();
bool IsCustomSpriteMakerActive() { return m_csm && m_csm->isVisible(); }
void ImportSprite(QString const& file, bool isSFSprite, bool showSuccess);
void ExportSprite(bool isSFSprite);
void ReplacePaletteInSprite();
void LoadSpriteToUI();
// Thumbnails
QImage* GetFrameImage(BNSprite::Frame const& _frame, bool _isThumbnail, int _subAnimID = 0, int _subFrameID = 0);
void UpdateFrameImage(BNSprite::Frame const& _frame, QImage* _image, int32_t _minX = -128, int32_t _minY = -128, int _subAnimID = 0, int _subFrameID = 0);
void DrawOAMInImage(BNSprite::SubObject const& _subObject, QImage* _image, int32_t _minX, int32_t _minY, vector<uint8_t> const& _data, bool _drawFirstColor);
// Animation
void AddAnimationThumbnail(int _animID);
void UpdateAnimationThumnail(int _animID);
void SwapAnimation(int _oldID, int _newID);
// Frame
void AddFrameThumbnail(int _animID, int _frameID);
void UpdateFrameThumbnail(int _frameID);
void SwapFrame(int _animID, int _oldID, int _newID, bool _updateAnimThumbnail);
// Tileset
void CacheTileset();
void UpdateDrawTileset();
// Sub Animation
void AddSubFrame(int _subFrameID);
void SwapSubFrame(int _oldID, int _newID);
void UpdateSubFrameThumbnail(int _subFrameID);
void UpdateSubFrameThumbnailFromObject(int _objectID);
// OAM
void AddOAM(BNSprite::SubObject const& _subObject);
void SwapOAM(int _oldID, int _newID);
void UpdateOAMThumbnail(BNSprite::SubObject const& _subObject);
// Preview
void AddPreviewOAM(BNSprite::SubObject const& _subObject);
void DrawPreviewOAM(QGraphicsPixmapItem* _graphicsItem, BNSprite::SubObject const& _subObject);
void UpdatePreviewOAM(int _oamID, BNSprite::SubObject const& _subObject, bool _redraw);
void HighlightPreviewOAM();
// Image Control
void MoveImage();
void FlipImage(bool _vertical);
void UpdateImageControlButtons();
// Palette
void AddPaletteGroupFromSprite(BNSprite::PaletteGroup const& paletteGroup);
void SetPaletteSelected(int index);
void UpdatePalettePreview();
void SwapPalette(int id1, int id2);
void InsertPalette(int insertAt, Palette palette);
void DeletePalette(int paletteIndex);
void UpdateAllThumbnails(int paletteIndex, bool redrawAll = false);
private:
Ui::BNSpriteEditor *ui;
QSettings *m_settings;
bool m_simpleMode;
CustomSpriteManager* m_csm = Q_NULLPTR;
QString m_applicationName;
// File
BNSprite m_sprite;
BNSprite m_spriteMerge;
QString m_spriteName;
QString m_path;
// Palette
PaletteContextMenu* m_paletteContextMenu;
// Thumbnails
QVector<QImage*> m_animThumbnails;
QVector<QImage*> m_frameThumbnails;
// Current frame we're editing
BNSprite::Frame m_frame;
int m_copyAnim;
int m_copyFrame;
// Highlight OAM square
QTimer* m_highlightTimer;
bool m_highlightUp;
int m_highlightAlpha;
QGraphicsPixmapItem* m_previewHighlight;
// Cached images
vector<uint8_t> m_tilesetData;
QGraphicsScene* m_tilesetGraphic;
QGraphicsScene* m_oamGraphic;
QGraphicsScene* m_previewGraphic;
QGraphicsPixmapItem* m_previewBG;
QVector<QGraphicsPixmapItem*> m_previewOAMs;
QImage* m_tilesetImage;
QImage* m_oamImage;
// Image moving
QTimer *m_moveTimer;
int m_moveDir;
// Play animation
QTimer *m_animationTimer;
bool m_playingAnimation;
QTimer *m_subAnimationTimer;
bool m_playingSubAnimation;
int m_playingSubFrame;
// Palette
QVector<PaletteGroup> m_paletteGroups;
};
#endif // BNSPRITECREATOR_H