From 69f711833aec8cc8e63ad09fad327ccd7714cfb9 Mon Sep 17 00:00:00 2001 From: Alan Knowles Date: Fri, 28 Dec 2018 15:24:44 +0800 Subject: [PATCH] Fix #5633 - preview diffs before merge --- MergeBranch.bjs | 89 ++++++++++++++++---- MergeBranch.vala | 209 ++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 270 insertions(+), 28 deletions(-) diff --git a/MergeBranch.bjs b/MergeBranch.bjs index 54496423..ecf0c11b 100644 --- a/MergeBranch.bjs +++ b/MergeBranch.bjs @@ -13,11 +13,11 @@ "response" : " (self, response_id) => { \n \n\tGLib.debug(\"got %d\", (int) response_id);\n\tif (response_id < 1) {\n\t _this.el.hide();\t\n\t this.running = false; \n \tGitMonitor.gitmonitor.start();\n\t \treturn;\n\t}\n\t /*\n\t// have they selected a ticket..\n\t// make that the current active ticket?\n\t// we really need to store locally what ticket is being worked on..\n\t// in theory we could be working on multiple project and not merging..\n\t// -- each repo would have their active ticket (only one per repo)\n\t// -- so we could just store that in there\n\t// -- initial load can check the contents of the ticket files on first scan.\n\tvar ticket_id = _this.ticketsel.selectedTicketId();\n\t\n if (this.repo != null) {\n \tvar bn = _this.name.el.get_text();\n \tif (ticket_id != \"\" ) {\n\t\t\tthis.repo.setActiveTicket( RooTicket.singleton().getById(ticket_id), bn);\n\t\t} else {\n\t\t\tthis.repo.createBranchNamed(bn);\n\t\t}\n }\n\t*/\n\t\n\tif (this.repo != null) {\n\t\trepo.doMerge(\n\t\t\t_this.actionsel.selectedAction(), \n\t\t\t_this.ticketsel.selectedTicketId(),\n\t\t\t_this.name.el.get_text()\n\t\t);\n\t\n\t} else {\n\t\tGitRepo.doMerges(\n\t\t\t_this.actionsel.selectedAction(), \n\t\t\t_this.ticketsel.selectedTicketId(),\n\t\t\t_this.name.el.get_text()\n\t\t);\n\t}\n\tthis.running = false; \n\n\t \n\t_this.el.hide();\t\n \tGitMonitor.gitmonitor.start();\n\n\t \n}" }, "default_width" : 500, - "# GitRepo repo" : "", "$ deletable" : true, + "# GitRepo repo" : "", "title" : "Merge Branch", "xtype" : "Dialog", - "| void show" : "( RooTicket ticket, GitRepo? repo ) \n{\n // this.el.set_gravity(Gdk.Gravity.NORTH);\n if (this.running) {\n \treturn;\n\t}\n\tGitMonitor.gitmonitor.stop();\n\t\n\t_this.el.show_all();\n\t\n\t_this.table.el.hide();\n\t_this.scrolled_window.el.hide();\n\t_this.spinner.el.show();\n\t_this.spinner.el.start();\t\n\tthis.el.set_keep_above(true); \n\tthis.el.move((Gdk.Screen.width() / 2)- 250 ,0);\n \tGLib.debug(\"Loading tickets\"); \n\n\n\t\n\t\n this.ticket = ticket;\n this.repo = repo;\n \n\t\n\tTimeout.add_seconds(1, () => {\n\t\t\n\t\t// if we are not working on a ticket, then we should be able to pick one?\n\t \t_this.dbmodel.loadTickets();\n\t \t_this.actionmodel.loadActions();\n\t\t_this.view.loadTicket(ticket.id);\n\t\t_this.spinner.el.stop();\n\t\t_this.spinner.el.hide();\t\n\n\t\tthis.table.el.show();\n\t\treturn false;\n\t});\n\t\n\tthis.el.run();\n\t \n}", + "| void show" : "( RooTicket ticket, GitRepo? repo ) \n{\n // this.el.set_gravity(Gdk.Gravity.NORTH);\n if (this.running) {\n \treturn;\n\t}\n\tGitMonitor.gitmonitor.stop();\n\t\n\t_this.el.show_all();\n\t\n\t_this.table.el.hide();\n\t_this.scrolled_window.el.hide();\n\t_this.spinner.el.show();\n\t_this.spinner.el.start();\t\n\tthis.el.set_keep_above(true); \n\tthis.el.move((Gdk.Screen.width() / 2)- 250 ,0);\n \tGLib.debug(\"Loading tickets\"); \n \n\t\n this.ticket = ticket;\n this.repo = repo;\n \n\t\n\tTimeout.add_seconds(1, () => {\n\t _this.diff_view.el.get_buffer().set_text(\n\t \trepo != null ? repo.previewMerge() : GitRepo.previewMerges(ticket.id)\n \t);\t\t\n\t\t// if we are not working on a ticket, then we should be able to pick one?\n\t \t_this.dbmodel.loadTickets();\n\t \t_this.actionmodel.loadActions();\n\t\t_this.view.loadTicket(ticket.id);\n\t\t_this.spinner.el.stop();\n\t\t_this.spinner.el.hide();\t\n\n\t\tthis.table.el.show();\n\t\treturn false;\n\t});\n\t\n\tthis.el.run();\n\t \n}", "default_height" : 200, "# RooTicket? ticket" : "null", "$ xns" : "Gtk", @@ -33,8 +33,8 @@ { "id" : "table", "bool homogeneous" : false, - "* pack" : "pack_start,false,false,0", "xtype" : "Table", + "* pack" : "pack_start,false,false,0", "uint column_spacing" : 2, "n_columns" : 2, "$ xns" : "Gtk", @@ -66,14 +66,14 @@ "items" : [ { "id" : "actioncellrenderer", - "* pack" : "pack_start,true", "xtype" : "CellRendererText", + "* pack" : "pack_start,true", "$ xns" : "Gtk" }, { "id" : "actionmodel", - "* pack" : "set_model", "xtype" : "ListStore", + "* pack" : "set_model", "$ columns" : "typeof(string),typeof(string)", "n_columns" : 2, "$ xns" : "Gtk", @@ -105,14 +105,14 @@ "items" : [ { "id" : "dbcellrenderer", - "xtype" : "CellRendererText", "* pack" : "pack_start,true", + "xtype" : "CellRendererText", "$ xns" : "Gtk" }, { "id" : "dbmodel", - "xtype" : "ListStore", "* pack" : "set_model", + "xtype" : "ListStore", "| void loadTickets" : " () {\n\n RooTicket.singleton().loadTickets(\"\",RooTicket.Who.ME, RooTicket.Status.ACTIVE);\n \n _this.ticketsel.loading = true;\n\n this.el.clear(); \n Gtk.TreeIter iter;\n var el = this.el;\n \n el.append(out iter);\n el.set_value(iter, 0, \"\");\n el.set_value(iter, 1, \"-- select a ticket --\");\n \n _this.ticketsel.el.set_active_iter(iter);\n \n if (_this.ticket != null && _this.ticket.id == \"-1\") {\n\t\tel.append(out iter);\n\t\tel.set_value(iter, 0, \"-1\");\n\t\tel.set_value(iter, 1, \"Temporary Branch - No ticket specified/relivant\");\n _this.ticketsel.el.set_active_iter(iter);\t\n }\n \n \n \n \n var tickets = RooTicket.singleton().tickets;\n foreach(var ticket in tickets) {\n \n el.append(out iter);\n\n el.set_value(iter, 0, ticket.id);\n el.set_value(iter, 1, \"#%s [%s] %s\".printf( ticket.id, ticket.project_id_name , ticket.summary));\n\t\tif (_this.ticket != null && _this.ticket.id == ticket.id) {\n\t\t _this.ticketsel.el.set_active_iter(iter);\n\t }\n \n }\n \n _this.ticketsel.loading = false;\n //this.el.set_sort_column_id(0, Gtk.SortType.ASCENDING); \n \n}\n", "$ columns" : "typeof(string),typeof(string)", "n_columns" : 2, @@ -140,20 +140,75 @@ ] }, { - "int height_request" : 500, - "id" : "scrolled_window", - "* init" : "{\n\tthis.el.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);\n}\n", "* pack" : "add", - "xtype" : "ScrolledWindow", + "xtype" : "Notebook", "$ xns" : "Gtk", "bool vexpand" : true, "items" : [ { - "id" : "view", - "xtype" : "WebView", - "* pack" : "add", - "$ xns" : "WebKit", - "| void loadTicket" : "(string tid) {\n\tint h,w;\n\t_this.el.get_size(out w, out h);\n\t\n\tif (tid == \"\") {\n\t\t_this.scrolled_window.el.hide();\n\t\t_this.el.resize(w, 150);\n\t} else {\n\t\t_this.scrolled_window.el.show();\n\t\t_this.el.resize(w, 800);\n\t}\n\t\n\tvar rs = RooTicket.singleton();\t\t\n\tvar uri = new WebKit.URIRequest(\"https://roojs.com/admin.php/MTrack/View/\" + tid);\n\tvar hd = uri.get_http_headers();\n\tvar authCode = Base64.encode (\"%s:%s\".printf(rs.username, rs.password).data);\n\thd.append(\"Authorization\", \"Basic %s\".printf(authCode));\n\t\n\t this.el.load_request(uri);\n}\n" + "id" : "label_diff", + "xtype" : "Label", + "* pack" : false, + "string label" : "Projected Commit Diff", + "$ xns" : "Gtk" + }, + { + "id" : "label_ticket", + "* pack" : false, + "string label" : "Ticket Details", + "xtype" : "Label", + "$ xns" : "Gtk" + }, + { + "* pack" : "append_page,_this.label_diff.el", + "xtype" : "Box", + "gboolean homogeneous" : false, + "$ xns" : "Gtk", + "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", + "items" : [ + { + "int height_request" : 400, + "xtype" : "ScrolledWindow", + "* pack" : "pack_start,true,true,0", + "$ xns" : "Gtk", + "items" : [ + { + "id" : "diff_view", + "* init" : " \n var description = Pango.FontDescription.from_string(\"monospace\");\n description.set_size(9000);\n this.el.override_font(description);", + "xtype" : "View", + "* pack" : "add", + "$ xns" : "GtkSource" + } + ] + } + ] + }, + { + "* pack" : "append_page,_this.label_ticket.el", + "xtype" : "Box", + "gboolean homogeneous" : false, + "$ xns" : "Gtk", + "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", + "items" : [ + { + "int height_request" : 500, + "id" : "scrolled_window", + "* init" : "{\n\tthis.el.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);\n}\n", + "* pack" : "add", + "xtype" : "ScrolledWindow", + "$ xns" : "Gtk", + "bool vexpand" : true, + "items" : [ + { + "id" : "view", + "xtype" : "WebView", + "* pack" : "add", + "$ xns" : "WebKit", + "| void loadTicket" : "(string tid) {\n\tint h,w;\n\t_this.el.get_size(out w, out h);\n\t\n\tif (tid == \"\") {\n\t\t_this.scrolled_window.el.hide();\n\t\t_this.el.resize(w, 150);\n\t} else {\n\t\t_this.scrolled_window.el.show();\n\t\t_this.el.resize(w, 800);\n\t}\n\t\n\tvar rs = RooTicket.singleton();\t\t\n\tvar uri = new WebKit.URIRequest(\"https://roojs.com/admin.php/MTrack/View/\" + tid);\n\tvar hd = uri.get_http_headers();\n\tvar authCode = Base64.encode (\"%s:%s\".printf(rs.username, rs.password).data);\n\thd.append(\"Authorization\", \"Basic %s\".printf(authCode));\n\t\n\t this.el.load_request(uri);\n}\n" + } + ] + } + ] } ] }, @@ -169,8 +224,8 @@ }, { "label" : "Cancel", - "xtype" : "Button", "* pack" : "add_action_widget,0", + "xtype" : "Button", "Gtk.ReliefStyle relief" : "Gtk.ReliefStyle.NONE", "$ xns" : "Gtk" }, diff --git a/MergeBranch.vala b/MergeBranch.vala index 5eec3387..20fbc533 100644 --- a/MergeBranch.vala +++ b/MergeBranch.vala @@ -20,6 +20,9 @@ public class MergeBranch : Object public Xcls_dbcellrenderer dbcellrenderer; public Xcls_dbmodel dbmodel; public Xcls_name name; + public Xcls_label_diff label_diff; + public Xcls_label_ticket label_ticket; + public Xcls_diff_view diff_view; public Xcls_scrolled_window scrolled_window; public Xcls_view view; public Xcls_spinner spinner; @@ -48,10 +51,10 @@ public class MergeBranch : Object var child_0 = new Xcls_Box2( _this ); child_0.ref(); this.el.get_content_area().add ( child_0.el ); - var child_1 = new Xcls_Button17( _this ); + var child_1 = new Xcls_Button24( _this ); child_1.ref(); this.el.add_action_widget ( child_1.el , 0 ); - var child_2 = new Xcls_Button18( _this ); + var child_2 = new Xcls_Button25( _this ); child_2.ref(); this.el.add_action_widget ( child_2.el , 1 ); @@ -132,16 +135,16 @@ public class MergeBranch : Object this.el.set_keep_above(true); this.el.move((Gdk.Screen.width() / 2)- 250 ,0); GLib.debug("Loading tickets"); - - - + this.ticket = ticket; this.repo = repo; Timeout.add_seconds(1, () => { - + _this.diff_view.el.get_buffer().set_text( + repo != null ? repo.previewMerge() : GitRepo.previewMerges(ticket.id) + ); // if we are not working on a ticket, then we should be able to pick one? _this.dbmodel.loadTickets(); _this.actionmodel.loadActions(); @@ -176,7 +179,7 @@ public class MergeBranch : Object var child_0 = new Xcls_table( _this ); child_0.ref(); this.el.pack_start ( child_0.el , false,false,0 ); - var child_1 = new Xcls_scrolled_window( _this ); + var child_1 = new Xcls_Notebook14( _this ); child_1.ref(); this.el.add ( child_1.el ); var child_2 = new Xcls_spinner( _this ); @@ -649,6 +652,188 @@ public class MergeBranch : Object } + public class Xcls_Notebook14 : Object + { + public Gtk.Notebook el; + private MergeBranch _this; + + + // my vars (def) + + // ctor + public Xcls_Notebook14(MergeBranch _owner ) + { + _this = _owner; + this.el = new Gtk.Notebook(); + + // my vars (dec) + + // set gobject values + this.el.vexpand = true; + var child_0 = new Xcls_label_diff( _this ); + child_0.ref(); + var child_1 = new Xcls_label_ticket( _this ); + child_1.ref(); + var child_2 = new Xcls_Box17( _this ); + child_2.ref(); + this.el.append_page ( child_2.el , _this.label_diff.el ); + var child_3 = new Xcls_Box20( _this ); + child_3.ref(); + this.el.append_page ( child_3.el , _this.label_ticket.el ); + } + + // user defined functions + } + public class Xcls_label_diff : Object + { + public Gtk.Label el; + private MergeBranch _this; + + + // my vars (def) + + // ctor + public Xcls_label_diff(MergeBranch _owner ) + { + _this = _owner; + _this.label_diff = this; + this.el = new Gtk.Label( "Projected Commit Diff" ); + + // my vars (dec) + + // set gobject values + } + + // user defined functions + } + + public class Xcls_label_ticket : Object + { + public Gtk.Label el; + private MergeBranch _this; + + + // my vars (def) + + // ctor + public Xcls_label_ticket(MergeBranch _owner ) + { + _this = _owner; + _this.label_ticket = this; + this.el = new Gtk.Label( "Ticket Details" ); + + // my vars (dec) + + // set gobject values + } + + // user defined functions + } + + public class Xcls_Box17 : Object + { + public Gtk.Box el; + private MergeBranch _this; + + + // my vars (def) + + // ctor + public Xcls_Box17(MergeBranch _owner ) + { + _this = _owner; + this.el = new Gtk.Box( Gtk.Orientation.VERTICAL, 0 ); + + // my vars (dec) + + // set gobject values + this.el.homogeneous = false; + var child_0 = new Xcls_ScrolledWindow18( _this ); + child_0.ref(); + this.el.pack_start ( child_0.el , true,true,0 ); + } + + // user defined functions + } + public class Xcls_ScrolledWindow18 : Object + { + public Gtk.ScrolledWindow el; + private MergeBranch _this; + + + // my vars (def) + + // ctor + public Xcls_ScrolledWindow18(MergeBranch _owner ) + { + _this = _owner; + this.el = new Gtk.ScrolledWindow( null, null ); + + // my vars (dec) + + // set gobject values + this.el.height_request = 400; + var child_0 = new Xcls_diff_view( _this ); + child_0.ref(); + this.el.add ( child_0.el ); + } + + // user defined functions + } + public class Xcls_diff_view : Object + { + public Gtk.SourceView el; + private MergeBranch _this; + + + // my vars (def) + + // ctor + public Xcls_diff_view(MergeBranch _owner ) + { + _this = _owner; + _this.diff_view = this; + this.el = new Gtk.SourceView(); + + // my vars (dec) + + // init method + + var description = Pango.FontDescription.from_string("monospace"); + description.set_size(9000); + this.el.override_font(description); + } + + // user defined functions + } + + + + public class Xcls_Box20 : Object + { + public Gtk.Box el; + private MergeBranch _this; + + + // my vars (def) + + // ctor + public Xcls_Box20(MergeBranch _owner ) + { + _this = _owner; + this.el = new Gtk.Box( Gtk.Orientation.VERTICAL, 0 ); + + // my vars (dec) + + // set gobject values + this.el.homogeneous = false; + var child_0 = new Xcls_scrolled_window( _this ); + child_0.ref(); + this.el.add ( child_0.el ); + } + + // user defined functions + } public class Xcls_scrolled_window : Object { public Gtk.ScrolledWindow el; @@ -726,6 +911,8 @@ public class MergeBranch : Object } + + public class Xcls_spinner : Object { public Gtk.Spinner el; @@ -752,7 +939,7 @@ public class MergeBranch : Object } - public class Xcls_Button17 : Object + public class Xcls_Button24 : Object { public Gtk.Button el; private MergeBranch _this; @@ -761,7 +948,7 @@ public class MergeBranch : Object // my vars (def) // ctor - public Xcls_Button17(MergeBranch _owner ) + public Xcls_Button24(MergeBranch _owner ) { _this = _owner; this.el = new Gtk.Button(); @@ -776,7 +963,7 @@ public class MergeBranch : Object // user defined functions } - public class Xcls_Button18 : Object + public class Xcls_Button25 : Object { public Gtk.Button el; private MergeBranch _this; @@ -785,7 +972,7 @@ public class MergeBranch : Object // my vars (def) // ctor - public Xcls_Button18(MergeBranch _owner ) + public Xcls_Button25(MergeBranch _owner ) { _this = _owner; this.el = new Gtk.Button(); -- 2.39.2