00001 #include <Qt>
00002
00003 extern "C" {
00004 #include "global.h"
00005 #include "face.h"
00006 #include "image.h"
00007 }
00008
00009 #include "CREFacePanel.h"
00010 #include "CREUtils.h"
00011
00013 static const char *const colorname[] = {
00014 "black",
00015 "white",
00016 "blue",
00017 "red",
00018 "orange",
00019 "light_blue",
00020 "dark_orange",
00021 "green",
00022 "light_green",
00023 "grey",
00024 "brown",
00025 "yellow",
00026 "khaki"
00027 };
00028
00029
00030 CREFacePanel::CREFacePanel()
00031 {
00032 myFace = 0;
00033
00034 QGridLayout* layout = new QGridLayout(this);
00035
00036 myUsing = new QTreeWidget(this);
00037 myUsing->setColumnCount(1);
00038 myUsing->setHeaderLabel(tr("Used by"));
00039 myUsing->setIconSize(QSize(32, 32));
00040 layout->addWidget(myUsing, 1, 1, 3, 2);
00041
00042 myColor = new QComboBox(this);
00043 layout->addWidget(myColor, 4, 2);
00044 layout->addWidget(new QLabel("Magicmap color: "), 4, 1);
00045
00046 for(uint color = 0; color < sizeof(colorname) / sizeof(*colorname); color++)
00047 myColor->addItem(colorname[color], color);
00048
00049 myFile = new QLineEdit(this);
00050 myFile->setReadOnly(true);
00051 layout->addWidget(myFile, 5, 2);
00052 layout->addWidget(new QLabel("Original file: "), 5, 1);
00053
00054 mySave = new QPushButton(tr("Save face"));
00055 layout->addWidget(mySave, 6, 1);
00056
00057 connect(mySave, SIGNAL(clicked(bool)), this, SLOT(saveClicked(bool)));
00058 }
00059
00060 void CREFacePanel::setFace(const New_Face* face)
00061 {
00062 Q_ASSERT(face);
00063 myFace = face;
00064
00065 myUsing->clear();
00066
00067 QTreeWidgetItem* root = NULL;
00068
00069 const archt* arch;
00070
00071 for (arch = first_archetype; arch; arch = arch->more ? arch->more : arch->next)
00072 {
00073 if (arch->clone.face == myFace)
00074 {
00075 if (root == NULL)
00076 {
00077 root = CREUtils::archetypeNode(NULL);
00078 myUsing->addTopLevelItem(root);
00079 root->setExpanded(true);
00080 }
00081 CREUtils::archetypeNode(arch, root);
00082 }
00083 }
00084
00085 root = NULL;
00086
00087 const Animations* anim;
00088
00089
00090 for (int a = 0; a <= num_animations; a++)
00091 {
00092 anim = &animations[a];
00093 for (int face = 0; face < anim->num_animations; face++)
00094 {
00095 if (anim->faces[face] == myFace->number)
00096 {
00097 if (root == NULL)
00098 {
00099 root = CREUtils::animationNode(NULL);
00100 myUsing->addTopLevelItem(root);
00101 root->setExpanded(true);
00102 }
00103 CREUtils::animationNode(anim, root);
00104 break;
00105 }
00106 }
00107 }
00108
00109 root = NULL;
00110
00111 const artifactlist* list;
00112 const typedata* data;
00113 const artifact* arti;
00114
00115 for (list = first_artifactlist; list; list = list->next)
00116 {
00117 data = get_typedata(list->type);
00118
00119
00120
00121 for (arti = list->items; arti; arti = arti->next)
00122 {
00123 if (arti->item->face == myFace)
00124 {
00125 if (!root)
00126 {
00127 root = CREUtils::artifactNode(NULL);
00128 myUsing->addTopLevelItem(root);
00129 root->setExpanded(true);
00130 }
00131
00132 CREUtils::artifactNode(arti, root);
00133 }
00134 }
00135 }
00136
00137 myColor->setCurrentIndex(myFace->magicmap);
00138 }
00139 void CREFacePanel::saveClicked(bool)
00140 {
00141 }