Crossfire Server, Branch 1.12  R12190
CREArtifactPanel.cpp
Go to the documentation of this file.
00001 #include <QtGui>
00002 
00003 extern "C" {
00004 #include "global.h"
00005 #include "artifact.h"
00006 }
00007 
00008 #include "CREArtifactPanel.h"
00009 #include "CREUtils.h"
00010 
00011 CREArtifactPanel::CREArtifactPanel()
00012 {
00013     myArtifact = NULL;
00014 
00015     QGridLayout* layout = new QGridLayout(this);
00016 
00017     QLabel* label = new QLabel(this);
00018     label->setText("Name:");
00019     layout->addWidget(label, 1, 1);
00020     myName = new QLineEdit(this);
00021     layout->addWidget(myName, 1, 2);
00022 
00023     label = new QLabel(this);
00024     label->setText("Chance:");
00025     layout->addWidget(label, 2, 1);
00026     myChance = new QLineEdit(this);
00027     layout->addWidget(myChance, 2, 2);
00028 
00029     label = new QLabel(this);
00030     label->setText("Type:");
00031     layout->addWidget(label, 3, 1);
00032     myType = new QLineEdit(this);
00033     layout->addWidget(myType, 3, 2);
00034 
00035     myArchetypes = new QTreeWidget(this);
00036     layout->addWidget(myArchetypes, 4, 1, 1, 2);
00037     myArchetypes->setHeaderLabel("Allowed/forbidden archetypes");
00038     myArchetypes->setIconSize(QSize(32, 32));
00039     myArchetypes->setRootIsDecorated(false);
00040 }
00041 
00042 void CREArtifactPanel::setArtifact(const artifact* artifact)
00043 {
00044     Q_ASSERT(artifact);
00045     myArtifact = artifact;
00046 
00047     myName->setText(artifact->item->name);
00048     myChance->setText(QString::number(artifact->chance));
00049     myType->setText(QString::number(artifact->item->type));
00050 
00051     const archt* arch;
00052     const char* name;
00053     QTreeWidgetItem* item;
00054     bool check;
00055 
00056     myArchetypes->clear();
00057 
00058     for (const linked_char* allowed = artifact->allowed; allowed; allowed = allowed->next)
00059     {
00060         name = allowed->name;
00061         if (name[0] == '!')
00062         {
00063             name = name + 1;
00064             check = false;
00065         }
00066         else
00067             check = true;
00068 
00069         arch = try_find_archetype(name);
00070         if (!arch)
00071             arch = find_archetype_by_object_name(name);
00072 
00073         if (arch)
00074         {
00075             item = CREUtils::archetypeNode(arch, NULL);
00076             item->setCheckState(0, check ? Qt::Checked : Qt::Unchecked);
00077             myArchetypes->addTopLevelItem(item);
00078         }
00079     }
00080 }