소스 검색

Improve bool fields in inspector

nordsoft 2 년 전
부모
커밋
d07fbc2204
4개의 변경된 파일26개의 추가작업 그리고 33개의 파일을 삭제
  1. 16 28
      mapeditor/inspector/inspector.cpp
  2. 3 4
      mapeditor/inspector/inspector.h
  3. 4 1
      mapeditor/mainwindow.cpp
  4. 3 0
      mapeditor/mainwindow.ui

+ 16 - 28
mapeditor/inspector/inspector.cpp

@@ -47,14 +47,6 @@ Initializer::Initializer(CGObjectInstance * o, const PlayerColor & pl) : default
 	//INIT_OBJ_TYPE(CGSeerHut);
 }
 
-bool stringToBool(const QString & s)
-{
-	if(s == "TRUE")
-		return true;
-	//if(s == "FALSE")
-	return false;
-}
-
 void Initializer::initialize(CArmedInstance * o)
 {
 	if(!o) return;
@@ -236,7 +228,7 @@ void Inspector::updateProperties(CGGarrison * o)
 	if(!o) return;
 	
 	addProperty("Owner", o->tempOwner, false);
-	addProperty("Removable units", o->removableUnits, InspectorDelegate::boolDelegate(), false);
+	addProperty("Removable units", o->removableUnits, false);
 }
 
 void Inspector::updateProperties(CGShipyard * o)
@@ -345,8 +337,8 @@ void Inspector::updateProperties(CGCreature * o)
 		delegate->options << "COMPLIANT" << "FRIENDLY" << "AGRESSIVE" << "HOSTILE" << "SAVAGE";
 		addProperty<CGCreature::Character>("Character", (CGCreature::Character)o->character, delegate, false);
 	}
-	addProperty("Never flees", o->neverFlees, InspectorDelegate::boolDelegate(), false);
-	addProperty("Not growing", o->notGrowingTeam, InspectorDelegate::boolDelegate(), false);
+	addProperty("Never flees", o->neverFlees, false);
+	addProperty("Not growing", o->notGrowingTeam, false);
 	addProperty("Artifact reward", o->gainedArtifact); //TODO: implement in setProperty
 	addProperty("Army", PropertyEditorPlaceholder(), true);
 	addProperty("Amount", o->stacks[SlotID(0)]->count, false);
@@ -367,9 +359,9 @@ void Inspector::updateProperties(CGEvent * o)
 {
 	if(!o) return;
 	
-	addProperty("Remove after", o->removeAfterVisit, InspectorDelegate::boolDelegate(), false);
-	addProperty("Human trigger", o->humanActivate, InspectorDelegate::boolDelegate(), false);
-	addProperty("Cpu trigger", o->computerActivate, InspectorDelegate::boolDelegate(), false);
+	addProperty("Remove after", o->removeAfterVisit, false);
+	addProperty("Human trigger", o->humanActivate, false);
+	addProperty("Cpu trigger", o->computerActivate, false);
 	//ui8 availableFor; //players whom this event is available for
 }
 
@@ -499,13 +491,13 @@ void Inspector::setProperty(CGEvent * o, const QString & key, const QVariant & v
 	if(!o) return;
 	
 	if(key == "Remove after")
-		o->removeAfterVisit = stringToBool(value.toString());
+		o->removeAfterVisit = value.toBool();
 	
 	if(key == "Human trigger")
-		o->humanActivate = stringToBool(value.toString());
+		o->humanActivate = value.toBool();
 	
 	if(key == "Cpu trigger")
-		o->computerActivate = stringToBool(value.toString());
+		o->computerActivate = value.toBool();
 }
 
 void Inspector::setProperty(CGTownInstance * o, const QString & key, const QVariant & value)
@@ -562,7 +554,7 @@ void Inspector::setProperty(CGGarrison * o, const QString & key, const QVariant
 	if(!o) return;
 	
 	if(key == "Removable units")
-		o->removableUnits = stringToBool(value.toString());
+		o->removableUnits = value.toBool();
 }
 
 void Inspector::setProperty(CGHeroInstance * o, const QString & key, const QVariant & value)
@@ -626,9 +618,9 @@ void Inspector::setProperty(CGCreature * o, const QString & key, const QVariant
 			o->character = CGCreature::Character::SAVAGE;
 	}
 	if(key == "Never flees")
-		o->neverFlees = stringToBool(value.toString());
+		o->neverFlees = value.toBool();
 	if(key == "Not growing")
-		o->notGrowingTeam = stringToBool(value.toString());
+		o->notGrowingTeam = value.toBool();
 	if(key == "Amount")
 		o->stacks[SlotID(0)]->count = value.toString().toInt();
 }
@@ -693,7 +685,10 @@ QTableWidgetItem * Inspector::addProperty(int value)
 
 QTableWidgetItem * Inspector::addProperty(bool value)
 {
-	return new QTableWidgetItem(value ? "TRUE" : "FALSE");
+	auto item = new QTableWidgetItem;
+	item->setFlags(item->flags() & ~Qt::ItemIsEditable | Qt::ItemIsUserCheckable);
+	item->setCheckState(value ? Qt::Checked : Qt::Unchecked);
+	return item;
 }
 
 QTableWidgetItem * Inspector::addProperty(const std::string & value)
@@ -827,13 +822,6 @@ Inspector::Inspector(CMap * m, CGObjectInstance * o, QTableWidget * t): obj(o),
  * Delegates
  */
 
-InspectorDelegate * InspectorDelegate::boolDelegate()
-{
-	auto * d = new InspectorDelegate;
-	d->options << "TRUE" << "FALSE";
-	return d;
-}
-
 QWidget * InspectorDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
 {
 	return new QComboBox(parent);

+ 3 - 4
mapeditor/inspector/inspector.h

@@ -107,7 +107,8 @@ protected:
 	{
 		auto * itemValue = addProperty(value);
 		if(restricted)
-			itemValue->setFlags(Qt::NoItemFlags);
+			itemValue->setFlags(itemValue->flags() & ~Qt::ItemIsEnabled);
+		//itemValue->setFlags(Qt::ItemIsEditable | Qt::ItemIsSelectable);
 		
 		QTableWidgetItem * itemKey = nullptr;
 		if(keyItems.contains(key))
@@ -120,7 +121,6 @@ protected:
 		else
 		{
 			itemKey = new QTableWidgetItem(key);
-			itemKey->setFlags(Qt::NoItemFlags);
 			keyItems[key] = itemKey;
 			
 			table->setRowCount(row + 1);
@@ -130,6 +130,7 @@ protected:
 				table->setItemDelegateForRow(row, delegate);
 			++row;
 		}
+		itemKey->setFlags(restricted ? Qt::NoItemFlags : Qt::ItemIsEnabled);
 	}
 	
 	template<class T>
@@ -153,8 +154,6 @@ class InspectorDelegate : public QStyledItemDelegate
 {
 	Q_OBJECT
 public:
-	static InspectorDelegate * boolDelegate();
-	
 	using QStyledItemDelegate::QStyledItemDelegate;
 
 	QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;

+ 4 - 1
mapeditor/mainwindow.cpp

@@ -1015,7 +1015,10 @@ void MainWindow::on_inspectorWidget_itemChanged(QTableWidgetItem *item)
 
 	//set parameter
 	Inspector inspector(controller.map(), obj, tableWidget);
-	inspector.setProperty(param, item->text());
+	if(item->flags() & Qt::ItemIsUserCheckable)
+		inspector.setProperty(param, QVariant::fromValue(item->checkState() == Qt::Checked));
+	else
+		inspector.setProperty(param, item->text());
 	controller.commitObjectChange(mapLevel);
 }
 

+ 3 - 0
mapeditor/mainwindow.ui

@@ -390,6 +390,9 @@
            <property name="columnCount">
             <number>2</number>
            </property>
+           <attribute name="horizontalHeaderStretchLastSection">
+            <bool>true</bool>
+           </attribute>
            <attribute name="verticalHeaderVisible">
             <bool>false</bool>
            </attribute>