summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/globals.cpp93
-rw-r--r--common/globals.h7
-rw-r--r--common/project.cpp45
-rw-r--r--common/typedefs.h13
-rw-r--r--linux/dialogs.cpp66
-rw-r--r--linux/dialogs.h8
-rwxr-xr-xlinux/dlgpiece.cpp325
-rw-r--r--linux/module.mk4
-rw-r--r--linux/system.cpp1
-rw-r--r--win/Figdlg.cpp8
-rw-r--r--win/Mfwnd.cpp78
-rw-r--r--win/Mfwnd.h12
12 files changed, 536 insertions, 124 deletions
diff --git a/common/globals.cpp b/common/globals.cpp
index da7e42d..97acc63 100644
--- a/common/globals.cpp
+++ b/common/globals.cpp
@@ -1,6 +1,8 @@
// Global variables common to all platforms.
//
+#include <stdlib.h>
+#include "typedefs.h"
#include "defines.h"
class Project;
@@ -85,3 +87,94 @@ unsigned char ColorArray[31][4] = {
{ 51, 51, 51, 255 }, //28 - Edges
{ 229, 76, 102, 255 }, //29 - Selected
{ 102, 76, 229, 255 }}; //30 - Focused
+
+// =========================================================
+// Minifig Wizard options
+
+MFW_PIECEINFO mfwpieceinfo[] = {
+ { "3624", "Police Hat", MF_HAT },
+ { "3626BP01", "Smiley Face", MF_HEAD },
+ { "973", "Plain Torso", MF_TORSO },
+ { "3838", "Airtanks", MF_NECK },
+ { "976", "Left Arm", MF_ARML },
+ { "975", "Right Arm", MF_ARMR },
+ { "977", "Hand", MF_HAND },
+ { "977", "Hand", MF_HAND },
+ { "3899", "Cup", MF_TOOL },
+ { "4528", "Frypan", MF_TOOL },
+ { "970", "Hips", MF_HIPS },
+ { "972", "Left Leg", MF_LEGL },
+ { "971", "Right Leg", MF_LEGR },
+ { "2599", "Flipper", MF_SHOE },
+ { "6120", "Ski", MF_SHOE },
+ { "4485", "Baseball Cap", MF_HAT },
+ { "3626B", "Plain Face", MF_HEAD },
+ { "3626BP02", "Woman Face", MF_HEAD },
+ { "973P11", "Dungarees", MF_TORSO },
+ { "973P47", "Castle Red/Gray Symbol", MF_TORSO },
+ { "973P51", "Blacktron II", MF_TORSO },
+ { "973P01", "Vertical Strips Red/Blue", MF_TORSO },
+ { "973P02", "Vertical Strips Blue/Red", MF_TORSO },
+ { "973P60", "Shell Logo", MF_TORSO },
+ { "973P61", "Gold Ice Planet Pattern", MF_TORSO },
+ { "4349", "Loudhailer", MF_TOOL },
+ { "3962", "Radio", MF_TOOL },
+ { "4529", "Saucepan", MF_TOOL },
+ { "3959", "Space Gun", MF_TOOL },
+ { "4360", "Space Laser Gun", MF_TOOL },
+ { "4479", "Metal Detector", MF_TOOL },
+ { "6246A", "Screwdriver", MF_TOOL },
+ { "6246B", "Hammer", MF_TOOL },
+ { "6246D", "Box Wrench", MF_TOOL },
+ { "6246E", "Open End Wrench", MF_TOOL },
+ { "3896", "Castle Helmet with Chin-Guard", MF_HAT },
+ { "3844", "Castle Helmet with Neck Protect", MF_HAT },
+ { "3833", "Construction Helmet", MF_HAT },
+ { "82359", "Skeleton Skull", MF_HEAD },
+ { "973P14", "'S' Logo", MF_TORSO },
+ { "973P16", "Airplane Logo", MF_TORSO },
+ { "973P52", "Blacktron I Pattern", MF_TORSO },
+ { "973P15", "Horizontal Stripes", MF_TORSO },
+ { "973P68", "Mtron Logo", MF_TORSO },
+ { "973P17", "Red V-Neck and Buttons", MF_TORSO },
+ { "973P63", "Robot Pattern", MF_TORSO },
+ { "973P18", "Suit and Tie ", MF_TORSO },
+ { "4736", "Jet-Pack with Stud On Front", MF_NECK },
+ { "4522", "Mallet", MF_TOOL },
+ { "6246C", "Power Drill", MF_TOOL },
+ { "4006", "Spanner/Screwdriver", MF_TOOL },
+ { "194", "Hose Nozzle", MF_TOOL },
+ { "2446", "Helmet", MF_HAT },
+ { "3840", "Vest", MF_NECK },
+ { "970P63", "Hips with Robot Pattern", MF_HIPS },
+ { "972P63", "Left Leg with Robot Pattern", MF_LEGL },
+ { "971P63", "Right Leg with Robot Pattern", MF_LEGR },
+ { "2524", "Backpack Non-Opening", MF_NECK },
+ { "4497", "Spear", MF_TOOL },
+ { "37", "Knife", MF_TOOL },
+ { "38", "Harpoon", MF_TOOL },
+ { "3626BP03", "Pointed Moustache", MF_HEAD },
+ { "3626BP04", "Sunglasses", MF_HEAD },
+ { "3626BP05", "Grin and Eyebrows", MF_HEAD },
+ { "973P19", "Train Chevron", MF_TORSO },
+ { "973P31", "Pirate Strips (Red/Cream)", MF_TORSO },
+ { "973P32", "Pirate Strips (Blue/Cream)", MF_TORSO },
+ { "973P33", "Pirate Strips (Red/Black)", MF_TORSO },
+ { "973P41", "Castle Chainmail", MF_TORSO },
+ { "973P62", "Silver Ice Planet", MF_TORSO },
+ { "6131", "Wizard Hat", MF_HAT },
+ { "973P20", "Waiter", MF_TORSO },
+ { "973P49", "Forestman Blue Collar", MF_TORSO },
+ { "973P48", "Forestman Maroon Collar", MF_TORSO },
+ { "973P50", "Forestman Black Collar", MF_TORSO },
+ { "3841", "Pickaxe", MF_TOOL }
+};
+
+// { "770", "Shield Ovoid", MF_TOOL },
+// 2447.DAT Minifig Helmet Visor
+
+
+
+
+
+
diff --git a/common/globals.h b/common/globals.h
index 7267e95..08152d4 100644
--- a/common/globals.h
+++ b/common/globals.h
@@ -5,8 +5,15 @@ class Project;
extern Project* project;
#include "defines.h"
+#include "typedefs.h"
extern unsigned char FlatColorArray[31][3];
extern unsigned char ColorArray[31][4];
extern const char* colornames[LC_MAXCOLORS];
extern const char* altcolornames[LC_MAXCOLORS];
+
+#define MFW_PIECES 76
+extern MFW_PIECEINFO mfwpieceinfo[];
+
+
+
diff --git a/common/project.cpp b/common/project.cpp
index f43266c..a3c0cc5 100644
--- a/common/project.cpp
+++ b/common/project.cpp
@@ -24,6 +24,7 @@
#include "project.h"
#include "image.h"
#include "system.h"
+#include "globals.h"
typedef struct
{
@@ -4414,11 +4415,53 @@ void Project::HandleCommand(LC_COMMANDS id, unsigned long nParam)
case LC_PIECE_MINIFIG:
{
LC_MINIFIGDLG_OPTS opts;
+ const unsigned char colors[15] = { 0, 6, 4, 22, 0, 0, 6, 6, 22, 22, 9, 9, 9, 22, 22 };
+ const float pos[15][3] = { {0,0,3.84f},{0,0,3.84f},{0,0,2.88f},{0,0,2.96f},{0,0,2.56f},{0,0,2.56f},{0.9f,-0.62f,1.76f},
+ {-0.9f,-0.62f,1.76f},{0.92f,-0.62f,1.76f},{-0.92f,-0.62f,1.76f},{0,0,1.6f},{0,0,1.12f},{0,0,1.12f},{0.42f,0,0},{-0.42f,0,0} };
+ int i;
+
+ for (i = 0; i < 15; i++)
+ {
+ opts.info[i] = NULL;
+ opts.colors[i] = colors[i];
+ opts.pos[i][0] = pos[i][0];
+ opts.pos[i][1] = pos[i][1];
+ opts.pos[i][2] = pos[i][2];
+ opts.rot[i][0] = 0;
+ opts.rot[i][1] = 0;
+ opts.rot[i][2] = 0;
+ }
+
+ for (i = 0; i < 13; i++)
+ {
+ if (i == 3 || i == 7 || i == 8 || i == 9)
+ continue;
+
+ PieceInfo* pInfo = FindPieceInfo(mfwpieceinfo[i].name);
+ if (pInfo == NULL)
+ continue;
+
+ if (i == 6)
+ {
+ opts.info[6] = pInfo;
+ opts.info[7] = pInfo;
+ pInfo->AddRef();
+ pInfo->AddRef();
+ opts.rot[6][0] = 45;
+ opts.rot[6][2] = 90;
+ opts.rot[7][0] = 45;
+ opts.rot[7][2] = 90;
+ }
+ else
+ {
+ opts.info[i] = pInfo;
+ pInfo->AddRef();
+ }
+ }
if (SystemDoDialog(LC_DLG_MINIFIG, &opts))
{
SelectAndFocusNone(false);
- int i;
for (i = 0; i < 15; i++)
{
diff --git a/common/typedefs.h b/common/typedefs.h
index 2f5dd11..4930cfb 100644
--- a/common/typedefs.h
+++ b/common/typedefs.h
@@ -125,6 +125,19 @@ typedef struct
unsigned short numentries;
} CONNECTION_TYPE;
+// Minifig Wizard information
+
+typedef enum {
+ MF_HAT, MF_HEAD, MF_TORSO, MF_NECK, MF_ARML, MF_ARMR,
+ MF_HAND, MF_TOOL, MF_HIPS, MF_LEGL, MF_LEGR, MF_SHOE
+} MFW_TYPES;
+
+typedef struct {
+ char name[9];
+ char description[32];
+ int type;
+} MFW_PIECEINFO;
+
// Select by Name dialog data
diff --git a/linux/dialogs.cpp b/linux/dialogs.cpp
index c12eef9..ab2f422 100644
--- a/linux/dialogs.cpp
+++ b/linux/dialogs.cpp
@@ -22,7 +22,12 @@
static int def_ret = 0;
static int* cur_ret = NULL;
-static int dlg_domodal(GtkWidget* dlg, int def)
+void dlg_end (int ret)
+{
+ *cur_ret = ret;
+}
+
+int dlg_domodal(GtkWidget* dlg, int def)
{
int ret = -1, old_def = def_ret, *old_ret = cur_ret;
def_ret = def;
@@ -40,12 +45,12 @@ static int dlg_domodal(GtkWidget* dlg, int def)
return ret;
}
-static void default_callback(GtkWidget *widget, gpointer data)
+void dlg_default_callback(GtkWidget *widget, gpointer data)
{
*cur_ret = (int)data;
}
-static gint delete_callback(GtkWidget *widget, GdkEvent* event, gpointer data)
+gint dlg_delete_callback(GtkWidget *widget, GdkEvent* event, gpointer data)
{
*cur_ret = def_ret;
return TRUE;
@@ -110,7 +115,7 @@ int msgbox_execute(char* text, int flags)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (window), "delete_event",
- GTK_SIGNAL_FUNC (delete_callback), NULL);
+ GTK_SIGNAL_FUNC (dlg_delete_callback), NULL);
gtk_signal_connect (GTK_OBJECT (window), "destroy",
GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
gtk_window_set_title (GTK_WINDOW (window), "LeoCAD");
@@ -139,7 +144,7 @@ int msgbox_execute(char* text, int flags)
w = gtk_button_new_with_label ("Ok");
gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT (w), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_OK));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_OK));
GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
gtk_widget_grab_default (w);
gtk_widget_show (w);
@@ -150,7 +155,7 @@ int msgbox_execute(char* text, int flags)
w = gtk_button_new_with_label ("Ok");
gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT (w), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_OK));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_OK));
GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
gtk_widget_grab_default (w);
gtk_widget_show (w);
@@ -158,7 +163,7 @@ int msgbox_execute(char* text, int flags)
w = gtk_button_new_with_label ("Cancel");
gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT (w), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_CANCEL));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_CANCEL));
gtk_widget_show (w);
ret = LC_CANCEL;
}
@@ -167,7 +172,7 @@ int msgbox_execute(char* text, int flags)
w = gtk_button_new_with_label ("Yes");
gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT (w), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_YES));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_YES));
GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
gtk_widget_grab_default (w);
gtk_widget_show (w);
@@ -175,13 +180,13 @@ int msgbox_execute(char* text, int flags)
w = gtk_button_new_with_label ("No");
gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT (w), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_NO));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_NO));
gtk_widget_show (w);
w = gtk_button_new_with_label ("Cancel");
gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT (w), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_CANCEL));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_CANCEL));
gtk_widget_show (w);
ret = LC_CANCEL;
}
@@ -190,7 +195,7 @@ int msgbox_execute(char* text, int flags)
w = gtk_button_new_with_label ("Yes");
gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT (w), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_YES));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_YES));
GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
gtk_widget_grab_default (w);
gtk_widget_show (w);
@@ -198,7 +203,7 @@ int msgbox_execute(char* text, int flags)
w = gtk_button_new_with_label ("No");
gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT (w), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_NO));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_NO));
gtk_widget_show (w);
ret = LC_NO;
}
@@ -336,7 +341,7 @@ int arraydlg_execute(void* param)
dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
- GTK_SIGNAL_FUNC (delete_callback), NULL);
+ GTK_SIGNAL_FUNC (dlg_delete_callback), NULL);
gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
gtk_widget_set_usize (dlg, 450, 320);
@@ -449,7 +454,7 @@ int arraydlg_execute(void* param)
button = gtk_button_new_with_label ("Cancel");
gtk_widget_show (button);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_CANCEL));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_CANCEL));
gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, FALSE, 0);
gtk_container_border_width (GTK_CONTAINER (button), 12);
gtk_widget_add_accelerator (button, "clicked", accel_group,
@@ -602,7 +607,7 @@ int aboutdlg_execute(void* param)
dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
- GTK_SIGNAL_FUNC (delete_callback), NULL);
+ GTK_SIGNAL_FUNC (dlg_delete_callback), NULL);
gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
gtk_widget_set_usize (dlg, 430, 190);
@@ -644,7 +649,7 @@ int aboutdlg_execute(void* param)
w = gtk_button_new_with_label ("OK");
gtk_widget_show (w);
gtk_signal_connect (GTK_OBJECT (w), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_OK));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_OK));
gtk_table_attach (GTK_TABLE (table), w, 0, 1, 0, 1,
(GtkAttachOptions) GTK_EXPAND, (GtkAttachOptions) GTK_EXPAND, 0, 0);
gtk_widget_set_usize (w, 60, 40);
@@ -728,7 +733,7 @@ int htmldlg_execute(void* param)
dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
- GTK_SIGNAL_FUNC (delete_callback), NULL);
+ GTK_SIGNAL_FUNC (dlg_delete_callback), NULL);
gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
gtk_widget_set_usize (dlg, 350, 320);
@@ -788,7 +793,7 @@ int htmldlg_execute(void* param)
button = gtk_button_new_with_label ("Cancel");
gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_CANCEL));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_CANCEL));
gtk_widget_show (button);
gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, TRUE, 0);
gtk_widget_set_usize (button, -2, 25);
@@ -929,7 +934,7 @@ int imageoptsdlg_execute(void* param, bool from_htmldlg)
dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
- GTK_SIGNAL_FUNC (delete_callback), NULL);
+ GTK_SIGNAL_FUNC (dlg_delete_callback), NULL);
gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
gtk_widget_set_usize (dlg, 400, 280);
@@ -1045,7 +1050,7 @@ int imageoptsdlg_execute(void* param, bool from_htmldlg)
button = gtk_button_new_with_label ("Cancel");
gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_CANCEL));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_CANCEL));
gtk_widget_show (button);
gtk_box_pack_start (GTK_BOX (hbox2), button, FALSE, TRUE, 0);
gtk_widget_set_usize (button, 70, -2);
@@ -1177,7 +1182,7 @@ int povraydlg_execute(void* param)
dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
- GTK_SIGNAL_FUNC (delete_callback), NULL);
+ GTK_SIGNAL_FUNC (dlg_delete_callback), NULL);
gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
gtk_widget_set_usize (dlg, 375, 190);
@@ -1252,7 +1257,7 @@ int povraydlg_execute(void* param)
button = gtk_button_new_with_label ("Cancel");
gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_CANCEL));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_CANCEL));
gtk_widget_show (button);
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 5);
gtk_widget_set_usize (button, -2, 25);
@@ -1373,7 +1378,7 @@ int preferencesdlg_execute(void* param)
dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
- GTK_SIGNAL_FUNC (delete_callback), NULL);
+ GTK_SIGNAL_FUNC (dlg_delete_callback), NULL);
gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
gtk_widget_set_usize (dlg, 450, 300);
@@ -1752,7 +1757,7 @@ int preferencesdlg_execute(void* param)
button = gtk_button_new_with_label ("Cancel");
gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_CANCEL));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_CANCEL));
gtk_widget_show (button);
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
gtk_widget_set_usize (button, 80, 25);
@@ -1877,7 +1882,7 @@ int propertiesdlg_execute(void* param)
dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
- GTK_SIGNAL_FUNC (delete_callback), NULL);
+ GTK_SIGNAL_FUNC (dlg_delete_callback), NULL);
gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
gtk_widget_set_usize (dlg, 450, 280);
@@ -2193,7 +2198,7 @@ int propertiesdlg_execute(void* param)
button = gtk_button_new_with_label ("Cancel");
gtk_widget_show (button);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_CANCEL));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_CANCEL));
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 5);
gtk_widget_set_usize (button, 70, 25);
GtkAccelGroup *accel_group = gtk_accel_group_new ();
@@ -2287,7 +2292,7 @@ int groupeditdlg_execute(void* param)
dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
- GTK_SIGNAL_FUNC (delete_callback), NULL);
+ GTK_SIGNAL_FUNC (dlg_delete_callback), NULL);
gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
gtk_widget_set_usize (dlg, 450, 280);
@@ -2311,6 +2316,7 @@ int groupeditdlg_execute(void* param)
gtk_widget_show (tree);
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scrolled_win), tree);
gtk_container_set_border_width (GTK_CONTAINER (tree), 5);
+ gtk_tree_set_selection_mode (GTK_TREE (tree), GTK_SELECTION_BROWSE);
hbox = gtk_hbox_new (FALSE, 10);
gtk_widget_show (hbox);
@@ -2330,7 +2336,7 @@ int groupeditdlg_execute(void* param)
button = gtk_button_new_with_label ("Cancel");
gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_CANCEL));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_CANCEL));
gtk_widget_show (button);
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, TRUE, 0);
gtk_widget_set_usize (button, 70, 25);
@@ -2372,7 +2378,7 @@ int groupdlg_execute(void* param)
dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
- GTK_SIGNAL_FUNC (delete_callback), NULL);
+ GTK_SIGNAL_FUNC (dlg_delete_callback), NULL);
gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
gtk_widget_set_usize (dlg, 250, 100);
@@ -2409,7 +2415,7 @@ int groupdlg_execute(void* param)
button = gtk_button_new_with_label ("Cancel");
gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (default_callback), GINT_TO_POINTER (LC_CANCEL));
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_CANCEL));
gtk_widget_show (button);
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, TRUE, 0);
gtk_widget_set_usize (button, 70, 25);
diff --git a/linux/dialogs.h b/linux/dialogs.h
index 5dfeead..04e28a2 100644
--- a/linux/dialogs.h
+++ b/linux/dialogs.h
@@ -1,6 +1,13 @@
#ifndef _DIALOGS_H_
#define _DIALOGS_H_
+// Dialog support functions
+int dlg_domodal (GtkWidget* dlg, int def);
+void dlg_end (int ret);
+gint dlg_delete_callback (GtkWidget *widget, GdkEvent* event, gpointer data);
+void dlg_default_callback(GtkWidget *widget, gpointer data);
+
+// All dialogs
int msgbox_execute(char* text, int mode);
int filedlg_execute(char* caption, char* filename);
int arraydlg_execute(void* param);
@@ -12,6 +19,7 @@ int preferencesdlg_execute(void* param);
int propertiesdlg_execute(void* param);
int groupeditdlg_execute(void* param);
int groupdlg_execute(void* param);
+int minifigdlg_execute(void* param);
#endif // _DIALOGS_H_
diff --git a/linux/dlgpiece.cpp b/linux/dlgpiece.cpp
new file mode 100755
index 0000000..722d276
--- /dev/null
+++ b/linux/dlgpiece.cpp
@@ -0,0 +1,325 @@
+//
+// This file holds all the dialogs that are called
+// from the 'Pieces' submenu:
+//
+// - Group Name
+// - Edit Groups
+// - Minifig Wizard
+//
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <GL/gl.h>
+#include <GL/glu.h>
+#include <GL/glx.h>
+#include <stdio.h>
+#include "gtkglarea.h"
+#include "system.h"
+#include "typedefs.h"
+#include "globals.h"
+#include "dialogs.h"
+#include "matrix.h"
+#include "pieceinf.h"
+#include "project.h"
+#include "main.h"
+
+// =========================================================
+// Minifig Wizard
+
+typedef enum {
+ MFW_HAT,
+ MFW_HEAD,
+ MFW_TORSO,
+ MFW_NECK,
+ MFW_LEFT_ARM,
+ MFW_RIGHT_ARM,
+ MFW_LEFT_HAND,
+ MFW_RIGHT_HAND,
+ MFW_LEFT_TOOL,
+ MFW_RIGHT_TOOL,
+ MFW_HIPS,
+ MFW_LEFT_LEG,
+ MFW_RIGHT_LEG,
+ MFW_LEFT_SHOE,
+ MFW_RIGHT_SHOE,
+ MFW_NUMITEMS
+};
+
+typedef struct
+{
+ LC_MINIFIGDLG_OPTS* opts;
+ GtkWidget *pieces[MFW_NUMITEMS];
+ GtkWidget *colors[MFW_NUMITEMS];
+ GtkWidget *preview;
+} LC_MINIFIGDLG_STRUCT;
+
+static gint minifigdlg_redraw (GtkWidget *widget, GdkEventExpose *event)
+{
+ LC_MINIFIGDLG_STRUCT* data;
+ int i;
+
+ // Draw only last expose.
+ if (event->count > 0)
+ return TRUE;
+
+ data = (LC_MINIFIGDLG_STRUCT*)gtk_object_get_data (GTK_OBJECT (widget), "minifig");
+
+ if (!data)
+ return true;
+
+ if (!gtk_gl_area_make_current(GTK_GL_AREA(widget)))
+ return TRUE;
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ for (i = 0; i < 15; i++)
+ {
+ if (data->opts->info[i] == NULL)
+ continue;
+
+ glPushMatrix();
+ Matrix mat;
+ float rot[4];
+ mat.CreateOld(0,0,0, data->opts->rot[i][0], data->opts->rot[i][1], data->opts->rot[i][2]);
+ mat.ToAxisAngle(rot);
+ glTranslatef(data->opts->pos[i][0], data->opts->pos[i][1], data->opts->pos[i][2]);
+ glRotatef(rot[3], rot[0], rot[1], rot[2]);
+ data->opts->info[i]->RenderPiece(data->opts->colors[i]);
+ glPopMatrix();
+ }
+
+ glFinish();
+ gtk_gl_area_swapbuffers(GTK_GL_AREA(widget));
+ gtk_gl_area_make_current(GTK_GL_AREA(drawing_area));
+
+ return TRUE;
+}
+
+// Save the new size of the window.
+static gint minifigdlg_resize (GtkWidget *widget, GdkEventConfigure *event)
+{
+ if (!gtk_gl_area_make_current(GTK_GL_AREA(widget)))
+ return TRUE;
+
+ float aspect = (float)widget->allocation.width/(float)widget->allocation.height;
+ glViewport(0, 0, widget->allocation.width, widget->allocation.height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective(30.0f, aspect, 1.0f, 20.0f);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+
+ gluLookAt (0, -9, 4, 0, 5, 1, 0, 0, 1);
+ glEnable(GL_DEPTH_TEST);
+ glDepthFunc(GL_LEQUAL);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ float *bg = project->GetBackgroundColor();
+ glClearColor(bg[0], bg[1], bg[2], bg[3]);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ glDisable (GL_DITHER);
+ glShadeModel (GL_FLAT);
+
+ gtk_gl_area_make_current(GTK_GL_AREA(drawing_area));
+
+ return TRUE;
+}
+
+static void minifigdlg_ok(GtkWidget *widget, gpointer data)
+{
+ // LC_GROUPDLG_STRUCT* s = (LC_GROUPDLG_STRUCT*)data;
+ // LC_MINIFIGDLG_OPTS* opts = (LC_MINIFIGDLG_OPTS*)s->data;
+
+ dlg_end (LC_OK);
+}
+
+// Create a combo box with a color selection control
+static void minifigdlg_createpair (LC_MINIFIGDLG_STRUCT* info, int num, GtkWidget* vbox)
+{
+ GtkWidget *hbox, *combo, *color, *menu, *menuitem;
+ int i;
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
+
+ combo = info->pieces[num] = gtk_combo_new ();
+ gtk_widget_show (combo);
+ gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, TRUE, 0);
+ gtk_widget_set_usize (combo, 75, 25);
+ gtk_entry_set_editable (GTK_ENTRY (GTK_COMBO (combo)->entry), FALSE);
+
+ color = info->colors[num] = gtk_option_menu_new ();
+
+ gtk_widget_show (color);
+ gtk_box_pack_start (GTK_BOX (hbox), color, FALSE, FALSE, 0);
+
+ menu = gtk_menu_new ();
+
+ for (i = 0; i < LC_MAXCOLORS; i++)
+ {
+ menuitem = gtk_menu_item_new_with_label (colornames[i]);
+ gtk_widget_show (menuitem);
+ gtk_menu_append (GTK_MENU (menu), menuitem);
+ }
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (color), menu);
+ gtk_option_menu_set_history (GTK_OPTION_MENU (color), info->opts->colors[num]);
+}
+
+int minifigdlg_execute(void* param)
+{
+ LC_MINIFIGDLG_STRUCT s;
+ GtkWidget *dlg;
+ GtkWidget *vbox1, *vbox2, *hbox;
+ GtkWidget *button;
+ int i;
+
+ s.opts = (LC_MINIFIGDLG_OPTS*)param;
+
+ dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_signal_connect (GTK_OBJECT (dlg), "delete_event",
+ GTK_SIGNAL_FUNC (dlg_delete_callback), NULL);
+ gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
+ GTK_SIGNAL_FUNC (gtk_widget_destroy), NULL);
+ gtk_widget_set_usize (dlg, 600, 400);
+ gtk_window_set_title (GTK_WINDOW (dlg), "Minifig Wizard");
+ gtk_window_set_policy (GTK_WINDOW (dlg), FALSE, FALSE, FALSE);
+ gtk_widget_realize (dlg);
+
+ vbox1 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox1);
+ gtk_container_add (GTK_CONTAINER (dlg), vbox1);
+ gtk_container_border_width (GTK_CONTAINER (vbox1), 5);
+
+ hbox = gtk_hbox_new (FALSE, 5);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox, FALSE, TRUE, 0);
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, TRUE, 0);
+
+ minifigdlg_createpair (&s, MFW_HAT, vbox2);
+ minifigdlg_createpair (&s, MFW_NECK, vbox2);
+ minifigdlg_createpair (&s, MFW_RIGHT_ARM, vbox2);
+ minifigdlg_createpair (&s, MFW_RIGHT_HAND, vbox2);
+ minifigdlg_createpair (&s, MFW_RIGHT_TOOL, vbox2);
+ minifigdlg_createpair (&s, MFW_HIPS, vbox2);
+ minifigdlg_createpair (&s, MFW_RIGHT_LEG, vbox2);
+ minifigdlg_createpair (&s, MFW_RIGHT_SHOE, vbox2);
+
+ int attrlist[] = { GLX_RGBA, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 16, 0 };
+
+ // Create new OpenGL widget.
+ s.preview = gtk_gl_area_share_new (attrlist, GTK_GL_AREA (drawing_area));
+ gtk_widget_set_events (GTK_WIDGET (s.preview), GDK_EXPOSURE_MASK);
+
+ gtk_signal_connect (GTK_OBJECT (s.preview), "expose_event",
+ GTK_SIGNAL_FUNC (minifigdlg_redraw), NULL);
+ gtk_signal_connect (GTK_OBJECT (s.preview), "configure_event",
+ GTK_SIGNAL_FUNC (minifigdlg_resize), NULL);
+
+ gtk_widget_set_usize (GTK_WIDGET (s.preview), 100, 300);
+ gtk_container_add (GTK_CONTAINER (hbox), GTK_WIDGET (s.preview));
+ gtk_widget_show (GTK_WIDGET (s.preview));
+ gtk_object_set_data (GTK_OBJECT (s.preview), "minifig", &s);
+
+ vbox2 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (vbox2);
+ gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, TRUE, 0);
+
+ minifigdlg_createpair (&s, MFW_HEAD, vbox2);
+ minifigdlg_createpair (&s, MFW_TORSO, vbox2);
+ minifigdlg_createpair (&s, MFW_LEFT_ARM, vbox2);
+ minifigdlg_createpair (&s, MFW_LEFT_HAND, vbox2);
+ minifigdlg_createpair (&s, MFW_LEFT_TOOL, vbox2);
+ minifigdlg_createpair (&s, MFW_LEFT_LEG, vbox2);
+ minifigdlg_createpair (&s, MFW_LEFT_SHOE, vbox2);
+
+ hbox = gtk_hbox_new (FALSE, 10);
+ gtk_widget_show (hbox);
+ gtk_box_pack_start (GTK_BOX (vbox1), hbox, FALSE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
+
+ button = gtk_button_new_with_label ("OK");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (minifigdlg_ok), &s);
+ gtk_widget_show (button);
+ gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, TRUE, 0);
+ gtk_widget_set_usize (button, 70, 25);
+ GtkAccelGroup *accel_group = gtk_accel_group_new ();
+ gtk_window_add_accel_group (GTK_WINDOW (dlg), accel_group);
+ gtk_widget_add_accelerator (button, "clicked", accel_group,
+ GDK_Return, 0, GTK_ACCEL_VISIBLE);
+
+ button = gtk_button_new_with_label ("Cancel");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (dlg_default_callback), GINT_TO_POINTER (LC_CANCEL));
+ gtk_widget_show (button);
+ gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, TRUE, 0);
+ gtk_widget_set_usize (button, 70, 25);
+ gtk_widget_add_accelerator (button, "clicked", accel_group,
+ GDK_Escape, 0, GTK_ACCEL_VISIBLE);
+
+ // Fill the combo boxes with the available pieces
+ for (i = 0; i < MFW_PIECES; i++)
+ {
+ PieceInfo* piece_info = project->FindPieceInfo(mfwpieceinfo[i].name);
+
+ if (piece_info != NULL)
+ {
+ GtkWidget *list, *item;
+ int id;
+
+ switch (mfwpieceinfo[i].type)
+ {
+ case MF_HAT: id = MFW_HAT; break;
+ case MF_HEAD: id = MFW_HEAD; break;
+ case MF_TORSO: id = MFW_TORSO; break;
+ case MF_NECK: id = MFW_NECK; break;
+ case MF_ARML: id = MFW_LEFT_ARM; break;
+ case MF_ARMR: id = MFW_RIGHT_ARM; break;
+ case MF_HAND: id = MFW_LEFT_HAND; break;
+ case MF_TOOL: id = MFW_LEFT_TOOL; break;
+ case MF_HIPS: id = MFW_HIPS; break;
+ case MF_LEGL: id = MFW_LEFT_LEG; break;
+ case MF_LEGR: id = MFW_RIGHT_LEG; break;
+ case MF_SHOE: id = MFW_LEFT_SHOE; break;
+ }
+
+ if (i != 29)
+ {
+ list = GTK_COMBO (s.pieces[id])->list;
+ item = gtk_list_item_new_with_label(mfwpieceinfo[i].description);
+ gtk_object_set_data (GTK_OBJECT (item), "pieceinfo", piece_info);
+ gtk_widget_show(item);
+ gtk_container_add (GTK_CONTAINER(list), item);
+ }
+
+ if (id == MFW_LEFT_HAND || id == MFW_LEFT_TOOL || id == MFW_LEFT_SHOE)
+ {
+ list = GTK_COMBO (s.pieces[id+1])->list;
+ item = gtk_list_item_new_with_label(mfwpieceinfo[i].description);
+ gtk_object_set_data (GTK_OBJECT (item), "pieceinfo", piece_info);
+ gtk_widget_show(item);
+ gtk_container_add (GTK_CONTAINER(list), item);
+ }
+
+ if (i == 6) i++;
+ }
+ }
+
+
+
+
+ return dlg_domodal(dlg, LC_CANCEL);
+ /*
+ for (int i = 0; i < 15; i++)
+ if (m_pMFWnd->m_pFig->info[i])
+ m_pMFWnd->m_pFig->info[i]->DeRef();
+*/
+}
+
+
+
+
+
diff --git a/linux/module.mk b/linux/module.mk
index 534ed46..0c8584b 100644
--- a/linux/module.mk
+++ b/linux/module.mk
@@ -1,4 +1,6 @@
-SRC += linux/custom.cpp linux/gdkgl.c linux/gtkglarea.c linux/dialogs.cpp linux/gtktools.cpp linux/main.cpp linux/menu.cpp linux/system.cpp linux/toolbar.cpp
+SRC += linux/custom.cpp linux/gdkgl.c linux/gtkglarea.c \
+ linux/dialogs.cpp linux/dlgpiece.cpp linux/gtktools.cpp \
+ linux/main.cpp linux/menu.cpp linux/system.cpp linux/toolbar.cpp
CFLAGS += $(shell gtk-config --cflags)
CXXFLAGS += $(shell gtk-config --cflags)
diff --git a/linux/system.cpp b/linux/system.cpp
index 25767cd..3769dd1 100644
--- a/linux/system.cpp
+++ b/linux/system.cpp
@@ -548,6 +548,7 @@ bool SystemDoDialog(int mode, void* param)
} break;
case LC_DLG_MINIFIG: {
+ return minifigdlg_execute(param) == LC_OK;
} break;
case LC_DLG_PROPERTIES: {
diff --git a/win/Figdlg.cpp b/win/Figdlg.cpp
index a5488d8..312305d 100644
--- a/win/Figdlg.cpp
+++ b/win/Figdlg.cpp
@@ -82,11 +82,11 @@ BOOL CMinifigDlg::OnInitDialog()
for (i = 0; i < MFW_PIECES; i++)
{
- PieceInfo* pInfo = project->FindPieceInfo(m_pMFWnd->partinfo[i].name);
+ PieceInfo* pInfo = project->FindPieceInfo(mfwpieceinfo[i].name);
if (pInfo != NULL)
{
UINT id = 0;
- switch (m_pMFWnd->partinfo[i].type)
+ switch (mfwpieceinfo[i].type)
{
case MF_HAT: id = IDC_MF_HAT; break;
case MF_HEAD: id = IDC_MF_HEAD; break;
@@ -106,14 +106,14 @@ BOOL CMinifigDlg::OnInitDialog()
int pos;
if (i != 29)
{
- pos = pCombo->AddString(m_pMFWnd->partinfo[i].description);
+ pos = pCombo->AddString(mfwpieceinfo[i].description);
pCombo->SetItemDataPtr(pos, pInfo);
}
if (id == IDC_MF_HANDL || id == IDC_MF_TOOLL || id == IDC_MF_SHOEL)
{
pCombo = (CComboBox*)GetDlgItem(id+1);
- pos = pCombo->AddString(m_pMFWnd->partinfo[i].description);
+ pos = pCombo->AddString(mfwpieceinfo[i].description);
pCombo->SetItemDataPtr(pos, pInfo);
}
if (i == 6) i++;
diff --git a/win/Mfwnd.cpp b/win/Mfwnd.cpp
index 0be552e..63315e6 100644
--- a/win/Mfwnd.cpp
+++ b/win/Mfwnd.cpp
@@ -19,37 +19,6 @@ static char THIS_FILE[] = __FILE__;
/////////////////////////////////////////////////////////////////////////////
// CMinifigWnd
-MFPARTINFO CMinifigWnd::partinfo[MFW_PIECES] = { { "3624", "Police Hat", MF_HAT }, { "3626BP01", "Smiley Face", MF_HEAD },
- { "973", "Plain Torso", MF_TORSO }, { "3838", "Airtanks", MF_NECK }, { "976", "Left Arm", MF_ARML },
- { "975", "Right Arm", MF_ARMR }, { "977", "Hand", MF_HAND }, { "977", "Hand", MF_HAND }, { "3899", "Cup", MF_TOOL },
- { "4528", "Frypan", MF_TOOL }, { "970", "Hips", MF_HIPS }, { "972", "Left Leg", MF_LEGL },
- { "971", "Right Leg", MF_LEGR }, { "2599", "Flipper", MF_SHOE }, { "6120", "Ski", MF_SHOE },
- { "4485", "Baseball Cap", MF_HAT }, { "3626B", "Plain Face", MF_HEAD },
- { "3626BP02", "Woman Face", MF_HEAD }, { "973P11", "Dungarees", MF_TORSO }, { "973P47", "Castle Red/Gray Symbol", MF_TORSO },
- { "973P51", "Blacktron II", MF_TORSO }, { "973P01", "Vertical Strips Red/Blue", MF_TORSO }, { "973P02", "Vertical Strips Blue/Red", MF_TORSO },
- { "973P60", "Shell Logo", MF_TORSO }, { "973P61", "Gold Ice Planet Pattern", MF_TORSO },
- { "4349", "Loudhailer", MF_TOOL }, { "3962", "Radio", MF_TOOL }, { "4529", "Saucepan", MF_TOOL },
- { "3959", "Space Gun", MF_TOOL }, { "4360", "Space Laser Gun", MF_TOOL }, { "4479", "Metal Detector", MF_TOOL },
- { "6246A", "Screwdriver", MF_TOOL }, { "6246B", "Hammer", MF_TOOL }, { "6246D", "Box Wrench", MF_TOOL }, { "6246E", "Open End Wrench", MF_TOOL },
- { "3896", "Castle Helmet with Chin-Guard", MF_HAT }, { "3844", "Castle Helmet with Neck Protect", MF_HAT }, { "3833", "Construction Helmet", MF_HAT },
- { "82359", "Skeleton Skull", MF_HEAD }, { "973P14", "'S' Logo", MF_TORSO }, { "973P16", "Airplane Logo", MF_TORSO },
- { "973P52", "Blacktron I Pattern", MF_TORSO }, { "973P15", "Horizontal Stripes", MF_TORSO }, { "973P68", "Mtron Logo", MF_TORSO },
- { "973P17", "Red V-Neck and Buttons", MF_TORSO }, { "973P63", "Robot Pattern", MF_TORSO }, { "973P18", "Suit and Tie ", MF_TORSO },
- { "4736", "Jet-Pack with Stud On Front", MF_NECK }, { "4522", "Mallet", MF_TOOL }, { "6246C", "Power Drill", MF_TOOL },
- { "4006", "Spanner/Screwdriver", MF_TOOL }, { "194", "Hose Nozzle", MF_TOOL }, { "2446", "Helmet", MF_HAT }, { "3840", "Vest", MF_NECK },
- { "970P63", "Hips with Robot Pattern", MF_HIPS }, { "972P63", "Left Leg with Robot Pattern", MF_LEGL }, { "971P63", "Right Leg with Robot Pattern", MF_LEGR },
- { "2524", "Backpack Non-Opening", MF_NECK }, { "4497", "Spear", MF_TOOL }, { "37", "Knife", MF_TOOL }, { "38", "Harpoon", MF_TOOL },
- { "3626BP03", "Pointed Moustache", MF_HEAD }, { "3626BP04", "Sunglasses", MF_HEAD }, { "3626BP05", "Grin and Eyebrows", MF_HEAD },
- { "973P19", "Train Chevron", MF_TORSO }, { "973P31", "Pirate Strips (Red/Cream)", MF_TORSO }, { "973P32", "Pirate Strips (Blue/Cream)", MF_TORSO },
- { "973P33", "Pirate Strips (Red/Black)", MF_TORSO }, { "973P41", "Castle Chainmail", MF_TORSO }, { "973P62", "Silver Ice Planet", MF_TORSO },
- { "6131", "Wizard Hat", MF_HAT }, { "973P20", "Waiter", MF_TORSO }, { "973P49", "Forestman Blue Collar", MF_TORSO },
- { "973P48", "Forestman Maroon Collar", MF_TORSO }, { "973P50", "Forestman Black Collar", MF_TORSO }, { "3841", "Pickaxe", MF_TOOL }
-};
-
-// { "770", "Shield Ovoid", MF_TOOL },
-// 2447.DAT Minifig Helmet Visor
-
-
CMinifigWnd::CMinifigWnd()
{
m_pDC = NULL;
@@ -130,58 +99,15 @@ int CMinifigWnd::InitGL()
glLoadIdentity();
gluLookAt (0, -9, 4, 0, 5, 1, 0, 0, 1);
- glEnable(GL_DEPTH_TEST);
+ glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
float *bg = project->GetBackgroundColor();
glClearColor(bg[0], bg[1], bg[2], bg[3]);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable (GL_DITHER);
glShadeModel (GL_FLAT);
- BYTE colors[15] = { 0, 6, 4, 22, 0, 0, 6, 6, 22, 22, 9, 9, 9, 22, 22 };
- float pos[15][3] = { {0,0,3.84f},{0,0,3.84f},{0,0,2.88f},{0,0,2.96f},{0,0,2.56f},{0,0,2.56f},{0.9f,-0.62f,1.76f},
- {-0.9f,-0.62f,1.76f},{0.92f,-0.62f,1.76f},{-0.92f,-0.62f,1.76f},{0,0,1.6f},{0,0,1.12f},{0,0,1.12f},{0.42f,0,0},{-0.42f,0,0} };
-
- for (int i = 0; i < 15; i++)
- {
- m_pFig->info[i] = NULL;
- m_pFig->colors[i] = colors[i];
- m_pFig->pos[i][0] = pos[i][0];
- m_pFig->pos[i][1] = pos[i][1];
- m_pFig->pos[i][2] = pos[i][2];
- m_pFig->rot[i][0] = 0;
- m_pFig->rot[i][1] = 0;
- m_pFig->rot[i][2] = 0;
- }
-
- for (i = 0; i < 13; i++)
- {
- if (i == 3 || i == 7 || i == 8 || i == 9)
- continue;
-
- PieceInfo* pInfo = project->FindPieceInfo(partinfo[i].name);
- if (pInfo == NULL)
- continue;
-
- if (i == 6)
- {
- m_pFig->info[6] = pInfo;
- m_pFig->info[7] = pInfo;
- pInfo->AddRef();
- pInfo->AddRef();
- m_pFig->rot[6][0] = 45;
- m_pFig->rot[6][2] = 90;
- m_pFig->rot[7][0] = 45;
- m_pFig->rot[7][2] = 90;
- }
- else
- {
- m_pFig->info[i] = pInfo;
- pInfo->AddRef();
- }
- }
-
wglMakeCurrent (oldDC, oldRC);
return 0;
diff --git a/win/Mfwnd.h b/win/Mfwnd.h
index 9823d29..c047f5f 100644
--- a/win/Mfwnd.h
+++ b/win/Mfwnd.h
@@ -6,17 +6,6 @@
#include "system.h"
-#define MFW_PIECES 76
-
-typedef enum { MF_HAT, MF_HEAD, MF_TORSO, MF_NECK, MF_ARML, MF_ARMR,
- MF_HAND, MF_TOOL, MF_HIPS, MF_LEGL, MF_LEGR, MF_SHOE } MFTYPES;
-
-typedef struct {
- char name[9];
- char description[32];
- int type;
-} MFPARTINFO;
-
/////////////////////////////////////////////////////////////////////////////
// CMinifigWnd window
@@ -25,7 +14,6 @@ class CMinifigWnd : public CWnd
// Construction
public:
CMinifigWnd();
- static MFPARTINFO partinfo[];
// Attributes
protected: