Crossfire Server, Trunk
CREHPBarMaker.cpp
Go to the documentation of this file.
1 /*
2  * Crossfire -- cooperative multi-player graphical RPG and adventure game
3  *
4  * Copyright (c) 2022 the Crossfire Development Team
5  *
6  * Crossfire is free software and comes with ABSOLUTELY NO WARRANTY. You are
7  * welcome to redistribute it under certain conditions. For details, please
8  * see COPYING and LICENSE.
9  *
10  * The authors can be reached via e-mail at <crossfire@metalforge.org>.
11  */
12 
13 #include "CREHPBarMaker.h"
14 #include "CREPixmap.h"
15 #include <QtWidgets>
16 #include <QtCore/qiodevice.h>
17 #include <QtCore/qfile.h>
18 
19 #include "global.h"
20 
22 {
23  QGridLayout* layout = new QGridLayout(this);
24  int line = 0;
25 
26  layout->addWidget(new QLabel(tr("Path where to create items:"), this), line, 0);
27  myDestination = new QLineEdit();
28  layout->addWidget(myDestination, line, 1);
29 
30  QPushButton* browse = new QPushButton(tr("Browse"), this);
31  layout->addWidget(browse, line++, 2);
32  connect(browse, SIGNAL(clicked(bool)), this, SLOT(browse(bool)));
33 
34  layout->addWidget(new QLabel(tr("Archetype name:"), this), line, 0);
35  myName = new QLineEdit();
36  layout->addWidget(myName, line++, 1, 1, 2);
37 
38  layout->addWidget(new QLabel(tr("Color:"), this), line, 0);
39  myColorSelect = new QPushButton();
40  layout->addWidget(myColorSelect, line++, 1, 1, 2);
41  connect(myColorSelect, SIGNAL(clicked(bool)), this, SLOT(selectColor(bool)));
42 
43  layout->addWidget(new QLabel(tr("Y position from top:"), this), line, 0);
44  myShift = new QSpinBox(this);
45  myShift->setRange(1, 31);
46  layout->addWidget(myShift, line++, 1, 1, 2);
47 
48  layout->addWidget(new QLabel(tr("Bar height:"), this), line, 0);
49  myHeight = new QSpinBox(this);
50  myHeight->setRange(1, 31);
51  myHeight->setValue(5);
52  layout->addWidget(myHeight, line++, 1, 1, 2);
53 
54  QDialogButtonBox* box = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Close, Qt::Horizontal, this);
55  layout->addWidget(box, line++, 1, 1, 3);
56  connect(box, SIGNAL(rejected()), this, SLOT(reject()));
57  connect(box, SIGNAL(accepted()), this, SLOT(makeBar()));
58 
59  myColor = QColor::fromRgb(255, 0, 0, 180);
60  adjustColor();
61 
62  setWindowTitle(tr("HP bar face generator"));
63 }
64 
66 {
67 }
68 
70 {
71  if (myDestination->text().isEmpty())
72  {
73  QMessageBox::warning(this, tr("Oops"), tr("You must select a destination!"));
74  return;
75  }
76 
77  if (myName->text().isEmpty())
78  {
79  QMessageBox::warning(this, tr("Oops"), tr("You must enter a name!"));
80  return;
81  }
82 
83  QString base = myDestination->text() + QDir::separator() + myName->text();
84 
85  if (QFile::exists(base + ".arc"))
86  {
87  if (QMessageBox::question(this, tr("Confirm file overwrite"), tr("File %1 already exists. Overwrite it?").arg(base + ".arc"), QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes)
88  return;
89  }
90 
91  QFile arc(base + ".arc");
92  if (!arc.open(QFile::Truncate | QFile::WriteOnly))
93  {
94  QMessageBox::critical(this, tr("Error"), tr("Error while opening the archetype file %1!").arg(arc.fileName()));
95  return;
96  }
97 
98  int shift = myShift->value();
99  int height = myHeight->value();
100 
101  for (int value = 1; value <= 30; value++)
102  {
103  QString line = QString("Object %1_%2\nface %1_%2.111\nend\n").arg(myName->text()).arg(value);
104  arc.write(line.toLocal8Bit());
105 
106  QPixmap pic(32, 32);
107  pic.fill(QColor(0, 0, 0, 0));
108  QPainter device(&pic);
109  device.fillRect(1, shift, value, height, myColor);
110 
111  QString picName = base + "_" + QString::number(value) + ".base.111.png";
112 
113  if (!pic.save(picName, "PNG"))
114  {
115  QMessageBox::critical(this, tr("Error"), tr("Error while saving the picture %1!").arg(picName));
116  return;
117  }
118 
119  }
120 
121  arc.close();
122 
123  QMessageBox::information(this, tr("Bar created"), tr("The bar was correctly saved as %1").arg(arc.fileName()));
124 }
125 
127 {
128  QString dest = QFileDialog::getExistingDirectory(this, tr("Select destination directory"), "");
129  if (dest.isEmpty())
130  return;
131 
132  myDestination->setText(dest);
133 }
134 
136 {
137  const QString style("QPushButton { background-color : %1; }");
138  myColorSelect->setStyleSheet(style.arg(myColor.name()));
139 }
140 
142 {
143  QColor color = QColorDialog::getColor(myColor, this, tr("Select bar color"), QColorDialog::ShowAlphaChannel);
144  if (!color.isValid())
145  return;
146  myColor = color;
147  adjustColor();
148 }
global.h
line
Install Bug reporting Credits so make sure you have version or later There are files involved in the automatic convert convertall and filelist py GuildList has the list of guilds for the server GuildLocations is what is used by the install script for setting up the maps It has columns in the first is the name of the no spaces The second is the region of the the third is the destination folder for the the fourth is the exit the fifth and sixth are the x and y coords within the exit the seventh eighth and ninth are the exit location for the storage hall If field seven is then it uses the same exit map as for the guild hall itself filelist py has a list of which files to process for each guild hall convert py takes all the files in filelist py and customises them to the specific guild then outputs them into a in the same order that they are listed in GuildLocations convertall py reads the lines from GuildLocations and runs line by line
Definition: README.txt:12
CREHPBarMaker::~CREHPBarMaker
virtual ~CREHPBarMaker()
Definition: CREHPBarMaker.cpp:65
CREHPBarMaker::adjustColor
void adjustColor()
Definition: CREHPBarMaker.cpp:135
layout
Definition: main.cpp:84
CREHPBarMaker.h
CREHPBarMaker::myColorSelect
QPushButton * myColorSelect
Definition: CREHPBarMaker.h:44
smoking_pipe.color
color
Definition: smoking_pipe.py:5
CREHPBarMaker::makeBar
void makeBar()
Definition: CREHPBarMaker.cpp:69
CREHPBarMaker::myDestination
QLineEdit * myDestination
Definition: CREHPBarMaker.h:39
CREHPBarMaker::selectColor
void selectColor(bool)
Definition: CREHPBarMaker.cpp:141
CREHPBarMaker::myName
QLineEdit * myName
Definition: CREHPBarMaker.h:40
CFInsulter.style
style
Definition: CFInsulter.py:69
CREHPBarMaker::browse
void browse(bool)
Definition: CREHPBarMaker.cpp:126
say.box
box
Definition: say.py:152
CREPixmap.h
autojail.value
value
Definition: autojail.py:6
convert.dest
dest
Definition: convert.py:25
CREHPBarMaker::myHeight
QSpinBox * myHeight
Definition: CREHPBarMaker.h:41
CREHPBarMaker::myShift
QSpinBox * myShift
Definition: CREHPBarMaker.h:42
CREHPBarMaker::CREHPBarMaker
CREHPBarMaker()
Definition: CREHPBarMaker.cpp:21
connect
Definition: connect.py:1
CREHPBarMaker::myColor
QColor myColor
Definition: CREHPBarMaker.h:43