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