98 case OBJ_Subfile: |
98 case OBJ_Subfile: |
99 { |
99 { |
100 coordCount = 3; |
100 coordCount = 3; |
101 tw_subfileList = new QTreeWidget(); |
101 tw_subfileList = new QTreeWidget(); |
102 tw_subfileList->setHeaderLabel (tr ("Primitives")); |
102 tw_subfileList->setHeaderLabel (tr ("Primitives")); |
103 populatePrimitives (tw_subfileList, (obj != null ? obj.staticCast<LDSubfile>()->fileInfo()->name() : "")); |
103 PopulatePrimitives (tw_subfileList, (obj != null ? obj.staticCast<LDSubfile>()->fileInfo()->name() : "")); |
104 |
104 |
105 connect (tw_subfileList, SIGNAL (itemSelectionChanged()), this, SLOT (slot_subfileTypeChanged())); |
105 connect (tw_subfileList, SIGNAL (itemSelectionChanged()), this, SLOT (slot_subfileTypeChanged())); |
106 lb_subfileName = new QLabel ("File:"); |
106 lb_subfileName = new QLabel ("File:"); |
107 le_subfileName = new QLineEdit; |
107 le_subfileName = new QLineEdit; |
108 le_subfileName->setFocus(); |
108 le_subfileName->setFocus(); |
114 } |
114 } |
115 } break; |
115 } break; |
116 |
116 |
117 default: |
117 default: |
118 { |
118 { |
119 critical (format ("Unhandled LDObject type %1 (%2) in AddObjectDialog", (int) type, typeName)); |
119 CriticalError (format ("Unhandled LDObject type %1 (%2) in AddObjectDialog", (int) type, typeName)); |
120 } return; |
120 } return; |
121 } |
121 } |
122 |
122 |
123 QPixmap icon = getIcon (format ("add-%1", typeName)); |
123 QPixmap icon = GetIcon (format ("add-%1", typeName)); |
124 LDObjectPtr defaults = LDObject::getDefault (type); |
124 LDObjectPtr defaults = LDObject::getDefault (type); |
125 |
125 |
126 lb_typeIcon = new QLabel; |
126 lb_typeIcon = new QLabel; |
127 lb_typeIcon->setPixmap (icon); |
127 lb_typeIcon->setPixmap (icon); |
128 |
128 |
129 // Show a color edit dialog for the types that actually use the color |
129 // Show a color edit dialog for the types that actually use the color |
130 if (defaults->isColored()) |
130 if (defaults->isColored()) |
131 { |
131 { |
132 if (obj != null) |
132 if (obj != null) |
133 _color = obj->color(); |
133 m_color = obj->color(); |
134 else |
134 else |
135 _color = (type == OBJ_CondLine or type == OBJ_Line) ? edgecolor() : maincolor(); |
135 m_color = (type == OBJ_CondLine or type == OBJ_Line) ? EdgeColor() : MainColor(); |
136 |
136 |
137 pb_color = new QPushButton; |
137 pb_color = new QPushButton; |
138 setButtonBackground (pb_color, _color); |
138 setButtonBackground (pb_color, m_color); |
139 connect (pb_color, SIGNAL (clicked()), this, SLOT (slot_colorButtonClicked())); |
139 connect (pb_color, SIGNAL (clicked()), this, SLOT (slot_colorButtonClicked())); |
140 } |
140 } |
141 |
141 |
142 for (int i = 0; i < coordCount; ++i) |
142 for (int i = 0; i < coordCount; ++i) |
143 { |
143 { |
191 { |
191 { |
192 LDMatrixObjectPtr mo = obj.dynamicCast<LDMatrixObject>(); |
192 LDMatrixObjectPtr mo = obj.dynamicCast<LDMatrixObject>(); |
193 QLabel* lb_matrix = new QLabel ("Matrix:"); |
193 QLabel* lb_matrix = new QLabel ("Matrix:"); |
194 le_matrix = new QLineEdit; |
194 le_matrix = new QLineEdit; |
195 // le_matrix->setValidator (new QDoubleValidator); |
195 // le_matrix->setValidator (new QDoubleValidator); |
196 Matrix defaultMatrix = g_identity; |
196 Matrix defaultMatrix = IdentityMatrix; |
197 |
197 |
198 if (mo != null) |
198 if (mo != null) |
199 { |
199 { |
200 mo->position().apply ([&](Axis ax, double value) |
200 mo->position().apply ([&](Axis ax, double value) |
201 { |
201 { |
234 |
234 |
235 // ============================================================================= |
235 // ============================================================================= |
236 // ============================================================================= |
236 // ============================================================================= |
237 void AddObjectDialog::setButtonBackground (QPushButton* button, LDColor color) |
237 void AddObjectDialog::setButtonBackground (QPushButton* button, LDColor color) |
238 { |
238 { |
239 button->setIcon (getIcon ("palette")); |
239 button->setIcon (GetIcon ("palette")); |
240 button->setAutoFillBackground (true); |
240 button->setAutoFillBackground (true); |
241 |
241 |
242 if (color != null) |
242 if (color != null) |
243 button->setStyleSheet (format ("background-color: %1", color.hexcode())); |
243 button->setStyleSheet (format ("background-color: %1", color.hexcode())); |
244 } |
244 } |
257 |
257 |
258 // ============================================================================= |
258 // ============================================================================= |
259 // ============================================================================= |
259 // ============================================================================= |
260 void AddObjectDialog::slot_colorButtonClicked() |
260 void AddObjectDialog::slot_colorButtonClicked() |
261 { |
261 { |
262 ColorSelector::selectColor (_color, _color, this); |
262 ColorSelector::selectColor (m_color, m_color, this); |
263 setButtonBackground (pb_color, _color); |
263 setButtonBackground (pb_color, m_color); |
264 } |
264 } |
265 |
265 |
266 // ============================================================================= |
266 // ============================================================================= |
267 // ============================================================================= |
267 // ============================================================================= |
268 void AddObjectDialog::slot_subfileTypeChanged() |
268 void AddObjectDialog::slot_subfileTypeChanged() |
274 } |
274 } |
275 |
275 |
276 // ============================================================================= |
276 // ============================================================================= |
277 // ============================================================================= |
277 // ============================================================================= |
278 template<typename T> |
278 template<typename T> |
279 static QSharedPointer<T> initObj (LDObjectPtr& obj) |
279 static QSharedPointer<T> InitObject (LDObjectPtr& obj) |
280 { |
280 { |
281 if (obj == null) |
281 if (obj == null) |
282 obj = spawn<T>(); |
282 obj = LDSpawn<T>(); |
283 |
283 |
284 return obj.staticCast<T>(); |
284 return obj.staticCast<T>(); |
285 } |
285 } |
286 |
286 |
287 // ============================================================================= |
287 // ============================================================================= |
296 |
296 |
297 if (type == OBJ_Empty) |
297 if (type == OBJ_Empty) |
298 return; // Nothing to edit with empties |
298 return; // Nothing to edit with empties |
299 |
299 |
300 const bool newObject = (obj == null); |
300 const bool newObject = (obj == null); |
301 Matrix transform = g_identity; |
301 Matrix transform = IdentityMatrix; |
302 AddObjectDialog dlg (type, obj); |
302 AddObjectDialog dlg (type, obj); |
303 |
303 |
304 assert (obj == null or obj->type() == type); |
304 assert (obj == null or obj->type() == type); |
305 |
305 |
306 if (dlg.exec() == QDialog::Rejected) |
306 if (dlg.exec() == QDialog::Rejected) |
352 } |
352 } |
353 } break; |
353 } break; |
354 |
354 |
355 case OBJ_BFC: |
355 case OBJ_BFC: |
356 { |
356 { |
357 LDBFCPtr bfc = initObj<LDBFC> (obj); |
357 LDBFCPtr bfc = InitObject<LDBFC> (obj); |
358 assert (within (dlg.rb_bfcType->value(), 0, int (BFCStatement::NumValues) - 1)); |
358 assert (within (dlg.rb_bfcType->value(), 0, int (BFCStatement::NumValues) - 1)); |
359 bfc->setStatement (BFCStatement (dlg.rb_bfcType->value())); |
359 bfc->setStatement (BFCStatement (dlg.rb_bfcType->value())); |
360 } break; |
360 } break; |
361 |
361 |
362 case OBJ_Vertex: |
362 case OBJ_Vertex: |
363 { |
363 { |
364 LDVertexPtr vert = initObj<LDVertex> (obj); |
364 LDVertexPtr vert = InitObject<LDVertex> (obj); |
365 vert->pos.apply ([&](Axis ax, double& value) { value = dlg.dsb_coords[ax]->value(); }); |
365 vert->pos.apply ([&](Axis ax, double& value) { value = dlg.dsb_coords[ax]->value(); }); |
366 } |
366 } |
367 break; |
367 break; |
368 |
368 |
369 case OBJ_Subfile: |
369 case OBJ_Subfile: |
371 QString name = dlg.le_subfileName->text(); |
371 QString name = dlg.le_subfileName->text(); |
372 |
372 |
373 if (name.length() == 0) |
373 if (name.length() == 0) |
374 return; // no subfile filename |
374 return; // no subfile filename |
375 |
375 |
376 LDDocumentPtr file = getDocument (name); |
376 LDDocumentPtr file = GetDocument (name); |
377 |
377 |
378 if (not file) |
378 if (not file) |
379 { |
379 { |
380 critical (format ("Couldn't open `%1': %2", name, strerror (errno))); |
380 CriticalError (format ("Couldn't open `%1': %2", name, strerror (errno))); |
381 return; |
381 return; |
382 } |
382 } |
383 |
383 |
384 LDSubfilePtr ref = initObj<LDSubfile> (obj); |
384 LDSubfilePtr ref = InitObject<LDSubfile> (obj); |
385 assert (ref); |
385 assert (ref); |
386 |
386 |
387 for_axes (ax) |
387 for_axes (ax) |
388 ref->setCoordinate (ax, dlg.dsb_coords[ax]->value()); |
388 ref->setCoordinate (ax, dlg.dsb_coords[ax]->value()); |
389 |
389 |