[gnome-maps/wip/mlundblad/osm-add-location] osmEdit: WIP: Add support for creating new locations in the edit dialog
- From: Marcus Lundblad <mlundblad src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-maps/wip/mlundblad/osm-add-location] osmEdit: WIP: Add support for creating new locations in the edit dialog
- Date: Tue, 22 Dec 2015 22:01:45 +0000 (UTC)
commit 5e53c7aac2d216e1c5b50687d563f0609634f573
Author: Marcus Lundblad <ml update uu se>
Date: Sun Dec 20 23:22:50 2015 +0100
osmEdit: WIP: Add support for creating new locations in the edit dialog
data/ui/osm-edit-dialog.ui | 92 ++++++++++++++++++++++++++++++++++++++++++++
src/osmEditDialog.js | 59 +++++++++++++++++++++++-----
2 files changed, 141 insertions(+), 10 deletions(-)
---
diff --git a/data/ui/osm-edit-dialog.ui b/data/ui/osm-edit-dialog.ui
index 9cb9139..5aba29f 100644
--- a/data/ui/osm-edit-dialog.ui
+++ b/data/ui/osm-edit-dialog.ui
@@ -51,6 +51,55 @@
<property name="row-spacing">12</property>
<property name="column-spacing">6</property>
<property name="margin-bottom">12</property>
+ <child>
+ <object class="GtkLabel" id="typeLabel">
+ <property name="visible">False</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="true">Type</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="typeButton">
+ <property name="visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <child>
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="row-spacing">5</property>
+ <property name="column-spacing">5</property>
+ <child>
+ <object class="GtkLabel" id="typeValueLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">None</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="halign">GTK_ALIGN_END</property>
+ <property name="hexpand">True</property>
+ <property name="icon-name">go-next-symbolic</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
</object>
</child>
<child>
@@ -159,6 +208,49 @@
<property name="name">upload</property>
</packing>
</child>
+ <child>
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_start">60</property>
+ <property name="margin_end">60</property>
+ <property name="margin_top">15</property>
+ <property name="margin_bottom">30</property>
+ <property name="row-spacing">5</property>
+ <child>
+ <object class="GtkSearchEntry" id="typeSearchEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="margin_start">10</property>
+ <property name="margin_end">10</property>
+ <property name="margin_bottom">10</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Recently Used</property>
+ <property name="halign">GTK_ALIGN_START</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="name">select-type</property>
+ </packing>
+ </child>
</object>
</child>
</object>
diff --git a/src/osmEditDialog.js b/src/osmEditDialog.js
index 599e98f..831955b 100644
--- a/src/osmEditDialog.js
+++ b/src/osmEditDialog.js
@@ -27,6 +27,7 @@ const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Application = imports.application;
+const Maps = imports.gi.GnomeMaps;
const OSMConnection = imports.osmConnection;
const OSMUtils = imports.osmUtils;
@@ -88,12 +89,25 @@ const OSMEditDialog = new Lang.Class({
'editorGrid',
'commentTextView',
'addFieldPopoverGrid',
- 'addFieldButton'],
+ 'addFieldButton',
+ 'typeLabel',
+ 'typeButton',
+ 'typeValueLabel',
+ 'headerBar'],
_init: function(params) {
this._place = params.place;
delete params.place;
+ this._addLocation = params.addLocation;
+ delete params.addLocation;
+
+ this._latitude = params.latitude;
+ delete params.latitude;
+
+ this._longitude = params.longitude;
+ delete params.longitude;
+
/* This is a construct-only property and cannot be set by GtkBuilder */
params.use_header_bar = true;
@@ -108,14 +122,36 @@ const OSMEditDialog = new Lang.Class({
this._cancellable.cancel();
}).bind(this));
+ if (this._addLocation) {
+ this._headerBar.title = _("Add Location");
+ this._typeLabel.visible = true;
+ this._typeButton.visible = true;
+ }
+
this._isEditing = false;
this._nextButton.connect('clicked', this._onNextClicked.bind(this));
this._cancelButton.connect('clicked', this._onCancelClicked.bind(this));
this._backButton.connect('clicked', this._onBackClicked.bind(this));
-
- Application.osmEdit.fetchObject(this._place,
- this._onObjectFetched.bind(this),
- this._cancellable);
+ this._typeButton.connect('clicked', this._onTypeClicked.bind(this));
+
+ if (this._addLocation) {
+ this._headerBar.title = _("Add Location");
+ this._typeLabel.visible = true;
+ this._typeButton.visible = true;
+ /* the OSMObject ID, version, and changeset ID is unknown for now */
+ let newNode =
+ Maps.OSMNode.new(0, 0, 0, this._latitude, this._longitude);
+ /* set a placeholder name tag to always get a name entry for new
+ locations */
+ newNode.set_tag('name', '');
+ this._loadOSMData(newNode);
+ this._isEditing = true;
+ } else {
+ this._osmType = this._place.osmType;
+ Application.osmEdit.fetchObject(this._place,
+ this._onObjectFetched.bind(this),
+ this._cancellable);
+ }
},
_onNextClicked: function() {
@@ -130,11 +166,15 @@ const OSMEditDialog = new Lang.Class({
// upload data to OSM
let comment = this._commentTextView.buffer.text;
Application.osmEdit.uploadObject(this._osmObject,
- this._place.osmType, comment,
+ this._osmType, comment,
this._onObjectUploaded.bind(this));
}
},
+ _onTypeClicked: function() {
+ this._stack.visible_child_name = 'select-type';
+ },
+
_switchToUpload: function() {
this._stack.set_visible_child_name('upload');
this._nextButton.label = _("Done");
@@ -196,7 +236,7 @@ const OSMEditDialog = new Lang.Class({
/* GtkContainer.child_get_property doesn't seem to be usable from GJS */
_getRowOfDeleteButton: function(button) {
- for (let row = 0;; row++) {
+ for (let row = 1;; row++) {
let label = this._editorGrid.get_child_at(0, row);
let deleteButton = this._editorGrid.get_child_at(2, row);
@@ -369,13 +409,12 @@ const OSMEditDialog = new Lang.Class({
}
},
- _loadOSMData: function(osmObject, osmType) {
+ _loadOSMData: function(osmObject) {
this._osmObject = osmObject;
- this._osmType = osmType;
/* keeps track of the current insertion row in the grid for editing
widgets */
- this._currentRow = 0;
+ this._currentRow = 1;
/* create edit widgets */
for (let i = 0; i < OSM_FIELDS.length; i++) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]