diff --git a/data/io.github.dubstar_04.design.metainfo.xml b/data/io.github.dubstar_04.design.metainfo.xml
index 37ee19b..9aa7264 100644
--- a/data/io.github.dubstar_04.design.metainfo.xml
+++ b/data/io.github.dubstar_04.design.metainfo.xml
@@ -41,7 +41,7 @@
#3584e4
-
+
- Update to GNOME 49
@@ -61,6 +61,7 @@
- Improved Trim (TR) command with Arc, Circle and Line entities
- Fixed how properties are filtered in the properties window
- Allow opening multiple files from a file manager
+ - Add Arc Aligned Text Command (ARCTEXT)
diff --git a/src/Design-Core b/src/Design-Core
index 8a1677b..dfafd98 160000
--- a/src/Design-Core
+++ b/src/Design-Core
@@ -1 +1 @@
-Subproject commit 8a1677b12e2907c01a2db7c41087ef9ae4aa019e
+Subproject commit dfafd984be8869ae52b88ddb5e40c4b94f477739
diff --git a/src/Design/Properties/propertiesWindow.js b/src/Design/Properties/propertiesWindow.js
index 5671789..c7ea5df 100644
--- a/src/Design/Properties/propertiesWindow.js
+++ b/src/Design/Properties/propertiesWindow.js
@@ -109,6 +109,14 @@ export const PropertiesWindow = GObject.registerClass({
case 'lineWidth':
case 'scale':
case 'angle':
+ case 'characterSpacing':
+ case 'lineSpacing':
+ case 'startAngle':
+ case 'endAngle':
+ case 'offsetFromArc':
+ case 'offsetFromLeft':
+ case 'offsetFromRight':
+ case 'widthFactor':
suffixWidget = new Gtk.Entry({ valign: Gtk.Align.CENTER, text: `${value}` });
suffixWidget.width_request = widgetWidth;
const changedSignal = suffixWidget.connect('changed', () => {
@@ -138,7 +146,11 @@ export const PropertiesWindow = GObject.registerClass({
break;
// Boolean type properties
case 'backwards':
+ case 'textReversed':
case 'upsideDown':
+ case 'bold':
+ case 'underline':
+ case 'italic':
suffixWidget = new Gtk.Switch({ valign: Gtk.Align.CENTER, state: value });
suffixWidget.connect('notify::active', () => {
DesignCore.PropertyManager.setItemProperties(`${property}`, suffixWidget.state);
@@ -182,18 +194,24 @@ export const PropertiesWindow = GObject.registerClass({
case 'lineType':
case 'patternName':
case 'dimensionStyle':
+ case 'textAlignment':
+ case 'textOrientation':
+ case 'arcSide':
const model = this.getModel(property);
- suffixWidget = Gtk.DropDown.new_from_strings(model);
+ suffixWidget = Gtk.DropDown.new_from_strings(model.map((item) => item.display));
suffixWidget.width_request = widgetWidth;
suffixWidget.valign = Gtk.Align.CENTER;
// get the position of the current value
- const selectedIndex = model.indexOf(value);
+ const selectedIndex = model.findIndex((item) => item.value === value);
if (selectedIndex >= 0) {
suffixWidget.set_selected(selectedIndex);
}
suffixWidget.connect('notify::selected-item', () => {
// console.log('update style:', `${property}`, suffixWidget.get_selected_item().get_string());
- DesignCore.PropertyManager.setItemProperties(`${property}`, suffixWidget.get_selected_item().get_string());
+ const selectedString = suffixWidget.get_selected_item().get_string();
+ const selectedItem = model.find((item) => item.display === selectedString);
+ DesignCore.PropertyManager.setItemProperties(`${property}`, selectedItem.value);
+ // suffixWidget.get_selected_item().get_string());
});
break;
// String type properties
@@ -254,41 +272,54 @@ export const PropertiesWindow = GObject.registerClass({
}
}
+ /**
+ * Return array of objects with keys: display and value
+ * display is the human readable name
+ * value is the actual value to be set
+ * {display: 'Display Name', value: 0'}
+ */
getModel(property) {
let model = [];
switch (property) {
case 'layer':
model = [];
for (const layer of DesignCore.LayerManager.getItems()) {
- model.push(layer.name);
+ model.push({ display: layer.name, value: layer.name });
}
break;
case 'styleName':
const styles = DesignCore.StyleManager.getItems();
- const styleNames = styles.map((style) => style.name);
+ const styleNames = styles.map((style) => ({ display: style.name, value: style.name }));
model = styleNames;
break;
case 'dimensionStyle':
const dimSyles = DesignCore.DimStyleManager.getItems();
- const dimStyleNames = dimSyles.map((style) => style.name);
+ const dimStyleNames = dimSyles.map((style) => ({ display: style.name, value: style.name }));
model = dimStyleNames;
break;
case 'horizontalAlignment':
- // TODO: build human readable model for alignment
- model = ['Left', 'Center', 'Right'];
+ model = [{ display: 'Left', value: 0 }, { display: 'Center', value: 1 }, { display: 'Right', value: 2 }];
break;
case 'verticalAlignment':
- // TODO: build human readable model for alignment
- model = ['Baseline', 'Bottom', 'Middle', 'Top'];
+ model = [{ display: 'Baseline', value: 0 }, { display: 'Bottom', value: 1 }, { display: 'Middle', value: 2 }, { display: 'Top', value: 3 }];
break;
case 'lineType':
const lineStyles = DesignCore.LTypeManager.getItems();
- const lineStyleNames = lineStyles.map((style) => style.name);
+ const lineStyleNames = lineStyles.map((style) => ({ display: style.name, value: style.name }));
model = lineStyleNames;
break;
case 'patternName':
const patternNames = Object.keys(Patterns.hatch_patterns);
- model = patternNames;
+ model = patternNames.map((patternName) => ({ display: patternName, value: patternName }));
+ break;
+ case 'textAlignment':
+ model = [{ display: 'Fit', value: 1 }, { display: 'Left', value: 2 }, { display: 'Right', value: 3 }, { display: 'Center', value: 4 }];
+ break;
+ case 'textOrientation':
+ model = [{ display: 'Outward', value: 1 }, { display: 'Inward', value: 2 }];
+ break;
+ case 'arcSide':
+ model = [{ display: 'Convex', value: 1 }, { display: 'Concave', value: 2 }];
break;
}
return model;
diff --git a/src/io.github.dubstar_04.design.src.gresource.xml b/src/io.github.dubstar_04.design.src.gresource.xml
index f53bd0a..2a4f7ef 100644
--- a/src/io.github.dubstar_04.design.src.gresource.xml
+++ b/src/io.github.dubstar_04.design.src.gresource.xml
@@ -88,6 +88,7 @@
Design-Core/core/entities/polyline.js
Design-Core/core/entities/rectangle.js
Design-Core/core/entities/solid.js
+ Design-Core/core/entities/arctext.js
Design-Core/core/entities/text.js
Design-Core/core/tools/copy.js