00001 #include <Qt>
00002 #include <QtGui>
00003
00004 #include "CREResourcesWindow.h"
00005 #include "CREUtils.h"
00006 #include "CREPixmap.h"
00007
00008 #include "CRETreeItemAnimation.h"
00009 #include "CRETreeItemArchetype.h"
00010 #include "CRETreeItemTreasure.h"
00011 #include "CRETreeItemArtifact.h"
00012 #include "CRETreeItemFormulae.h"
00013 #include "CRETreeItemFace.h"
00014
00015 #include "CREAnimationPanel.h"
00016 #include "CREArchetypePanel.h"
00017 #include "CRETreasurePanel.h"
00018 #include "CREArtifactPanel.h"
00019 #include "CREFormulaePanel.h"
00020 #include "CREFacePanel.h"
00021
00022 extern "C" {
00023 #include "global.h"
00024 #include "recipe.h"
00025 }
00026
00027 CREResourcesWindow::CREResourcesWindow(DisplayMode mode)
00028 {
00029 QApplication::setOverrideCursor(Qt::WaitCursor);
00030
00031 setAttribute(Qt::WA_DeleteOnClose);
00032
00033 QGridLayout* layout = new QGridLayout(this);
00034 mySplitter = new QSplitter(this);
00035 layout->addWidget(mySplitter);
00036 myTree = new QTreeWidget(this);
00037 mySplitter->addWidget(myTree);
00038 myTree->setIconSize(QSize(32, 32));
00039 myTree->setHeaderLabel(tr("All resources"));
00040
00041 QString title;
00042 if (mode & DisplayArchetypes)
00043 {
00044 title = tr("Archetypes");
00045 fillArchetypes();
00046 }
00047 if (mode & DisplayAnimations)
00048 {
00049 title = tr("Animations");
00050 fillAnimations();
00051 }
00052 if (mode & DisplayTreasures)
00053 {
00054 title = tr("Treasures");
00055 fillTreasures();
00056 }
00057 if (mode & DisplayFormulae)
00058 {
00059 title = tr("Formulae");
00060 fillFormulae();
00061 }
00062 if (mode & DisplayArtifacts)
00063 {
00064 title = tr("Artifacts");
00065 fillArtifacts();
00066 }
00067 if (mode & DisplayFaces)
00068 {
00069 title = tr("Faces");
00070 fillFaces();
00071 }
00072
00073 if (mode == DisplayAll)
00074 title = tr("All resources");
00075
00076 myTree->setSortingEnabled(true);
00077
00078 myCurrentPanel = NULL;
00079
00080 connect(myTree, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), this, SLOT(tree_currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)));
00081
00082 setWindowTitle(title);
00083
00084 QApplication::restoreOverrideCursor();
00085 }
00086
00087 void CREResourcesWindow::tree_currentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem*)
00088 {
00089 if (!current || current->data(0, Qt::UserRole).value<void*>() == NULL)
00090 return;
00091 CRETreeItem* item = reinterpret_cast<CRETreeItem*>(current->data(0, Qt::UserRole).value<void*>());
00092 if (!item)
00093 return;
00094
00095
00096 QWidget* newPanel = myPanels[item->getPanelName()];
00097 if (!newPanel)
00098 {
00099
00100 return;
00101 }
00102
00103 item->fillPanel(newPanel);
00104
00105 if (myCurrentPanel != newPanel)
00106 {
00107 if (myCurrentPanel)
00108 myCurrentPanel->setVisible(false);
00109 newPanel->setVisible(true);
00110 myCurrentPanel = newPanel;
00111 }
00112 }
00113
00114 void CREResourcesWindow::fillAnimations()
00115 {
00116 QTreeWidgetItem* animationsNode = CREUtils::animationNode(NULL);
00117 myTree->addTopLevelItem(animationsNode);
00118
00119 QTreeWidgetItem* item;
00120
00121
00122 for (int anim = 0; anim <= num_animations; anim++)
00123 {
00124 item = CREUtils::animationNode(&animations[anim], animationsNode);
00125 item->setData(0, Qt::UserRole, QVariant::fromValue<void*>(new CRETreeItemAnimation(&animations[anim])));
00126 }
00127
00128 addPanel("Animation", new CREAnimationPanel());
00129 }
00130
00131 void CREResourcesWindow::fillTreasures()
00132 {
00133 QTreeWidgetItem* item, *sub;
00134 const treasurelist* list;
00135 const treasure* treasure;
00136
00137 QTreeWidgetItem* treasures = CREUtils::treasureNode(NULL);
00138 myTree->addTopLevelItem(treasures);
00139
00140 for (list = first_treasurelist; list; list = list->next)
00141 {
00142 item = CREUtils::treasureNode(list, treasures);
00143
00144 item->setData(0, Qt::UserRole, QVariant::fromValue<void*>(new CRETreeItemTreasure(list)));
00145
00146 if (list->total_chance != 0)
00147 item->setText(1, QString::number(list->total_chance));
00148
00149 for (treasure = list->items; treasure; treasure = treasure->next)
00150 {
00151 sub = CREUtils::treasureNode(treasure, item);
00152 if (treasure->chance)
00153 sub->setText(1, QString::number(treasure->chance));
00154 sub->setData(0, Qt::UserRole, QVariant::fromValue<void*>(new CRETreeItemTreasure(list)));
00155 }
00156 }
00157
00158 addPanel("Treasure", new CRETreasurePanel());
00159 }
00160
00161 void CREResourcesWindow::fillArchetypes()
00162 {
00163 QTreeWidgetItem* item, *root, *sub;
00164 archt* arch;
00165
00166 root = CREUtils::archetypeNode(NULL);
00167 myTree->addTopLevelItem(root);
00168
00169 for (arch = first_archetype; arch; arch = arch->next)
00170 {
00171 item = CREUtils::archetypeNode(arch, root);
00172 item->setData(0, Qt::UserRole, QVariant::fromValue<void*>(new CRETreeItemArchetype(arch)));
00173
00174 for (archt* more = arch->more; more; more = more->more)
00175 {
00176 sub = CREUtils::archetypeNode(more, item);
00177 sub->setData(0, Qt::UserRole, QVariant::fromValue<void*>(new CRETreeItemArchetype(more)));
00178 }
00179 }
00180
00181 addPanel("Archetype", new CREArchetypePanel());
00182 }
00183
00184 void CREResourcesWindow::fillFormulae()
00185 {
00186 recipelist* list;
00187 recipe* recipe;
00188 QTreeWidgetItem* root, *form, *sub;
00189
00190 form = new QTreeWidgetItem(myTree, QStringList(tr("Formulae")));
00191
00192
00193 for (int ing = 1; ; ing++)
00194 {
00195 list = get_formulalist(ing);
00196 if (!list)
00197 break;
00198
00199 root = new QTreeWidgetItem(form, QStringList(tr("%1 ingredients").arg(ing)));
00200
00201 for (recipe = list->items; recipe; recipe = recipe->next)
00202 {
00203 sub = CREUtils::formulaeNode(recipe, root);
00204 sub->setData(0, Qt::UserRole, QVariant::fromValue<void*>(new CRETreeItemFormulae(recipe)));
00205 }
00206 }
00207
00208 addPanel("Formulae", new CREFormulaePanel());
00209 }
00210
00211 void CREResourcesWindow::fillArtifacts()
00212 {
00213 QTreeWidgetItem* item, *root, *sub;
00214 artifactlist* list;
00215 const typedata* data;
00216
00217 root = new QTreeWidgetItem(myTree, QStringList(tr("Artifacts")));
00218
00219 for (list = first_artifactlist; list; list = list->next)
00220 {
00221 data = get_typedata(list->type);
00222
00223 item = new QTreeWidgetItem(root, QStringList(data ? data->name : tr("type %1").arg(list->type)));
00224
00225 for (artifact* art = list->items; art; art = art->next)
00226 {
00227 sub = CREUtils::artifactNode(art, item);
00228 sub->setData(0, Qt::UserRole, QVariant::fromValue<void*>(new CRETreeItemArtifact(art)));
00229 }
00230 }
00231
00232 addPanel("Artifact", new CREArtifactPanel());
00233 }
00234
00235 void CREResourcesWindow::fillFaces()
00236 {
00237 QTreeWidgetItem* item, *root;
00238
00239 root = CREUtils::faceNode(NULL);
00240 myTree->addTopLevelItem(root);
00241
00242 extern int nrofpixmaps;
00243
00244 for (int f = 0; f < nrofpixmaps; f++)
00245 {
00246 item = CREUtils::faceNode(&new_faces[f], root);
00247 item->setData(0, Qt::UserRole, QVariant::fromValue<void*>(new CRETreeItemFace(&new_faces[f])));
00248 }
00249
00250 addPanel("Face", new CREFacePanel());
00251 }
00252
00253 void CREResourcesWindow::addPanel(QString name, QWidget* panel)
00254 {
00255 panel->setVisible(false);
00256 myPanels[name] = panel;
00257 mySplitter->addWidget(panel);
00258 }