gvcsfx 0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: cc8f144e9c0c6026b678a273f83c5decd5addaeab7107c51cf135960ebdd59e8
4
+ data.tar.gz: '09bb7c786358bb9c9f7bdfcc3561a445bc2b2dcd786b9b0a86e74889edf7cfad'
5
+ SHA512:
6
+ metadata.gz: 372e845c794cdbae4cca7d448192c59b3e1f7c22206d01e8c55213377303889355ba916e09232ba3ba602649d3c7f87784b7e2744b06f623dae2ad25cde7d3eb
7
+ data.tar.gz: b72b982aae34765f09539d834384ad3ad5773e7717cafba5c120697b8b443429105b41de83c719035b1d84bb8668a577db9bda36502c52c79196cc374d5e0352
@@ -0,0 +1,6 @@
1
+ *.log
2
+ Gemfile.lock
3
+
4
+ fx/.jrubyfx_cache/
5
+ gvcsfx.jar
6
+ gvcsfx-0.3.jar
data/Gemfile ADDED
@@ -0,0 +1,24 @@
1
+ # Copyright (C) 2020 Chris Liaw <chrisliaw@antrapol.com>
2
+ # Author: Chris Liaw <chrisliaw@antrapol.com>
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ source "https://rubygems.org"
18
+
19
+ gem 'tlogger', '~> 0.21'
20
+ gem 'jrubyfx'
21
+ gem 'toolrack', '~> 0.4'
22
+
23
+ gem 'gvcs', '~> 0.1'
24
+ gem 'git_cli', '~> 0.1'
@@ -0,0 +1,71 @@
1
+
2
+ Generic Version Control System - JavaFX as GUI
3
+ ==============================================
4
+
5
+ Version Control System (VCS) is a fantastic tool for developer to work on the same team. Changes between each developers can be independently tested and further integrates into complete system.
6
+
7
+ GIT has been the common and well accepted tool for this purpose, but it might have few traps for new comer, especially when code is conflicted and merged required. It is a daunting task for new comer sometimes.
8
+
9
+ GVCSFx trying to provide a more natural workflow based on intend of the developer instead of independent advanced function of the GIT. The GUI trying to suggest a least resistance road to achieve an objective.
10
+
11
+ For example when developer is developing on development branch and there is an urgent need to switch to a branch. Git suggested command 'stash' to be used but stash is easy however restore of stash is not, especially when there is a conflict on the file that is in development compare to the one already in Git. You will know if you have been bitten by this beast.
12
+
13
+ Hence the opinioned way to restore to stash is to a new branch so that a new development branch is automatically created for changes that is yet to be committed and developer can now in peace of mind know the changes shall be in new branch later and the normal merge workflow between two branches is streamlined.
14
+
15
+ Other features includes:
16
+ * Workspace management
17
+ * Allow git workspaces tie to particular project. Single project might have multiple different git workspaces
18
+ * Filter of project and only focus on the registered workspaces under a particular project
19
+ * Remove workspace and empty project (via 'Delete' key or context menu)
20
+ * Commit workflow
21
+ * No need separate 'add' command. Any file selected on the table view shall be added automatically before commit and rollback when commit failed
22
+ * Double click to show diff of the file compare to already in version control
23
+ * Right-click Context Menu
24
+ * Add extension/files into .gitignore
25
+ * Revert changes of particular files from HEAD
26
+ * Take the file out from version control (wrongly check in)
27
+ * Stash existing changes and restore the stash (at branch tab) into new branch instead of the original branch
28
+ * Ignore rules (.gitignore)
29
+ * Text editor free editing of the rules
30
+ * Branches
31
+ * Create new branch
32
+ * Merge branch with current branch (context menu)
33
+ * Delete branch (context menu)
34
+ * Tag
35
+ * Checkout tag into new branch
36
+ * Double click show tag info
37
+ * Arrange tag by creation date
38
+ * Show tag created on when and by who
39
+ * Checkout tag into new branch (context menu)
40
+ * Delete of tag (via keyboard 'Delete' key)
41
+ * Logs
42
+ * Show date, subject and committer
43
+ * Double click on log show details
44
+ * Copy subject (copy the commit message so that can paste into commit message in the commit screen) (context menu)
45
+ * Repository
46
+ * Add/remove repository (Delete via keyboard 'Delete' key)
47
+ * Push, optional together with tag to the repository
48
+ * Pull from the repository
49
+
50
+
51
+ To be implemented
52
+ =================
53
+
54
+ * Global / Local configurations (httpVerify, author name, email etc)
55
+ * View pending changes compare to remote server - allow cherry-pick operation
56
+ * Conflicted files and status
57
+ * Sort by date/committer on logs
58
+
59
+
60
+ Development
61
+ ===========
62
+
63
+ System is developed on
64
+ * jruby-9.2.9.0 (2.5.7)
65
+ * Oracle JDK 1.8.0\_261
66
+
67
+
68
+
69
+
70
+
71
+
@@ -0,0 +1,13 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'bundler'
4
+
5
+ if (RUBY_PLATFORM =~ /java/) == nil
6
+ STDERR.puts "GvcsFX required JRuby to be installed. Please installed the JRuby and try again (switch to jruby first before run gvcsfx if you're using rvm)"
7
+ else
8
+ require File.join(File.dirname(__FILE__),"gvcsfx.rb")
9
+ end
10
+
11
+
12
+
13
+
@@ -0,0 +1,97 @@
1
+ # Copyright (C) 2020 Chris Liaw <chrisliaw@antrapol.com>
2
+ # Author: Chris Liaw <chrisliaw@antrapol.com>
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ require 'jrubyfx'
18
+
19
+ require_relative "../lib/version"
20
+
21
+ fxml_root File.join(File.dirname(__FILE__),"..","fx")
22
+
23
+ require_relative '../handlers/main_win_controller'
24
+ require_relative '../handlers/tray'
25
+ require_relative '../handlers/float_win_controller'
26
+
27
+ # fxml_root first param = path when it is not in jar
28
+ # 2nd param = path when it is in jar
29
+ fxml_root File.join(File.dirname(__FILE__),"..",'fx'), 'gvcsfx/fx'
30
+
31
+ module GvcsFx
32
+ class MainWin < JRubyFX::Application
33
+ include GvcsFx::Tray
34
+
35
+ attr_reader :stage
36
+ def start(stage)
37
+
38
+ @stage = stage
39
+ @stage.title = "GVCS Main"
40
+ #@stage.always_on_top = true
41
+ #@stage.init_style = javafx.stage.StageStyle::UNDECORATED
42
+ #javafx.application.Platform.implicit_exit = false
43
+
44
+ # temporary disable for direct testing
45
+ #with(stage, title: "G-VCS Float") do
46
+ # fxml FloatWinController
47
+ # show
48
+ #end
49
+
50
+ # this works!
51
+ # But no in jar setting
52
+ MainWinController.load_into(@stage)
53
+ # This also works!
54
+ # But also no in jar setting...
55
+ # but this is more promising then the previous setup
56
+ #MainWinController.load_into(@stage, { filename: "main.fxml" })
57
+ @stage.show
58
+
59
+ # this is correct can show tray
60
+ # but hide/show javafx stage doesn't work
61
+ #javax.swing.SwingUtilities.invokeLater do
62
+ # start_tray(self)
63
+ #end
64
+
65
+ end # start
66
+
67
+ def show_stage
68
+ javafx.application.Platform.run_later do
69
+ puts "insite run_later #{@stage}"
70
+ if not @stage.nil?
71
+ @stage.show
72
+ @stage.toFront
73
+ end
74
+ end
75
+ end
76
+
77
+ def hide_stage
78
+ javafx.application.Platform.run_later do
79
+ @stage.hide
80
+ end
81
+ end
82
+
83
+ end
84
+ end
85
+
86
+ GvcsFx::MainWin.launch
87
+
88
+ #if $0 == __FILE__
89
+ #puts "Launching"
90
+
91
+ #GvcsFx::MainWin.launch
92
+ ## put swing code in its own event loop or the right click menu and the icon itself won't show
93
+ #event_thread = nil
94
+ #javax.swing.SwingUtilities.invokeAndWait { event_thread = java.lang.Thread.currentThread }
95
+ #event_thread.join
96
+ #end
97
+
@@ -0,0 +1,212 @@
1
+ # Copyright (C) 2020 Chris Liaw <chrisliaw@antrapol.com>
2
+ # Author: Chris Liaw <chrisliaw@antrapol.com>
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ #
18
+ # Warble config starts here
19
+ #
20
+ # Disable Rake-environment-task framework detection by uncommenting/setting to false
21
+ # Warbler.framework_detection = false
22
+
23
+ # Warbler web application assembly configuration file
24
+ Warbler::Config.new do |config|
25
+ # Features: additional options controlling how the jar is built.
26
+ # Currently the following features are supported:
27
+ # - *gemjar*: package the gem repository in a jar file in WEB-INF/lib
28
+ # - *executable*: embed a web server and make the war executable
29
+ # - *runnable*: allows to run bin scripts e.g. `java -jar my.war -S rake -T`
30
+ # - *compiled*: compile .rb files to .class files
31
+ # config.features = %w(gemjar)
32
+ config.features = %w(gemjar)
33
+
34
+ # Application directories to be included in the webapp.
35
+ # config.dirs = %w(app config db lib log script vendor tmp)
36
+ config.dirs = %w(bin config fx handlers lib res)
37
+
38
+ # Additional files/directories to include, above those in config.dirs
39
+ # config.includes = FileList["db"]
40
+ #config.includes = FileList["app.rb"]
41
+ #config.includes = FileList["license.txt"]
42
+ config.includes = FileList["fx/.jrubyfx_cache","fx/*.xml"]
43
+
44
+ # Additional files/directories to exclude
45
+ # config.excludes = FileList["lib/tasks/*"]
46
+
47
+ # Additional Java .jar files to include. Note that if .jar files are placed
48
+ # in lib (and not otherwise excluded) then they need not be mentioned here.
49
+ # JRuby and JRuby-Rack are pre-loaded in this list. Be sure to include your
50
+ # own versions if you directly set the value
51
+ # config.java_libs += FileList["lib/java/*.jar"]
52
+ #config.java_libs += FileList["lib/*.jar"]
53
+ config.java_libs += FileList["jars/*.jar"]
54
+
55
+ # Loose Java classes and miscellaneous files to be included.
56
+ # config.java_classes = FileList["target/classes/**.*"]
57
+
58
+ # One or more pathmaps defining how the java classes should be copied into
59
+ # the archive. The example pathmap below accompanies the java_classes
60
+ # configuration above. See http://rake.rubyforge.org/classes/String.html#M000017
61
+ # for details of how to specify a pathmap.
62
+ # config.pathmaps.java_classes << "%{target/classes/,}p"
63
+
64
+ # Bundler support is built-in. If Warbler finds a Gemfile in the
65
+ # project directory, it will be used to collect the gems to bundle
66
+ # in your application. If you wish to explicitly disable this
67
+ # functionality, uncomment here.
68
+ # config.bundler = false
69
+
70
+ # An array of Bundler groups to avoid including in the war file.
71
+ # Defaults to ["development", "test", "assets"].
72
+ # config.bundle_without = []
73
+
74
+ # Other gems to be included. If you don't use Bundler or a gemspec
75
+ # file, you need to tell Warbler which gems your application needs
76
+ # so that they can be packaged in the archive.
77
+ # For Rails applications, the Rails gems are included by default
78
+ # unless the vendor/rails directory is present.
79
+ # config.gems += ["activerecord-jdbcmysql-adapter", "jruby-openssl"]
80
+ # config.gems << "tzinfo"
81
+
82
+ # Uncomment this if you don't want to package rails gem.
83
+ # config.gems -= ["rails"]
84
+ config.gems -= ["rails"]
85
+
86
+ # The most recent versions of gems are used.
87
+ # You can specify versions of gems by using a hash assignment:
88
+ # config.gems["rails"] = "4.2.5"
89
+
90
+ # You can also use regexps or Gem::Dependency objects for flexibility or
91
+ # finer-grained control.
92
+ # config.gems << /^sinatra-/
93
+ # config.gems << Gem::Dependency.new("sinatra", "= 1.4.7")
94
+
95
+ # Include gem dependencies not mentioned specifically. Default is
96
+ # true, uncomment to turn off.
97
+ # config.gem_dependencies = false
98
+
99
+ # Array of regular expressions matching relative paths in gems to be
100
+ # excluded from the war. Defaults to empty, but you can set it like
101
+ # below, which excludes test files.
102
+ # config.gem_excludes = [/^(test|spec)\//]
103
+
104
+ # Pathmaps for controlling how application files are copied into the archive
105
+ # config.pathmaps.application = ["WEB-INF/%p"]
106
+
107
+ # Name of the archive (without the extension). Defaults to the basename
108
+ # of the project directory.
109
+ # config.jar_name = "mywar"
110
+ config.jar_name = "gvcsfx"
111
+
112
+ # File extension for the archive. Defaults to either 'jar' or 'war'.
113
+ config.jar_extension = "jar"
114
+
115
+ # Destionation for the created archive. Defaults to project's root directory.
116
+ # config.autodeploy_dir = "dist/"
117
+
118
+ # Name of the MANIFEST.MF template for the war file. Defaults to a simple
119
+ # MANIFEST.MF that contains the version of Warbler used to create the war file.
120
+ # config.manifest_file = "config/MANIFEST.MF"
121
+
122
+ # When using the 'compiled' feature and specified, only these Ruby
123
+ # files will be compiled. Default is to compile all \.rb files in
124
+ # the application.
125
+ # config.compiled_ruby_files = FileList['app/**/*.rb']
126
+
127
+ # Determines if ruby files in supporting gems will be compiled.
128
+ # Ignored unless compile feature is used.
129
+ # config.compile_gems = false
130
+ #config.compile_gems = true
131
+
132
+ # When set it specify the bytecode version for compiled class files
133
+ # config.bytecode_version = "1.6"
134
+
135
+ # When set to true, Warbler will override the value of ENV['GEM_HOME'] even it
136
+ # has already been set. When set to false it will use any existing value of
137
+ # GEM_HOME if it is set.
138
+ # config.override_gem_home = true
139
+
140
+ # Allows for specifing custom executables
141
+ # config.executable = ["rake", "bin/rake"]
142
+ #config.executable = ["gvcs_fx.rb"]
143
+
144
+ # Sets default (prefixed) parameters for the executables
145
+ # config.executable_params = "do:something"
146
+
147
+ # If set to true, moves jar files into WEB-INF/lib. Prior to version 1.4.2 of Warbler this was done
148
+ # by default. But since 1.4.2 this config defaults to false. It may need to be set to true for
149
+ # web servers that do not explode the WAR file.
150
+ # Alternatively, this option can be set to a regular expression, which will
151
+ # act as a jar selector -- only jar files that match the pattern will be
152
+ # included in the archive.
153
+ # config.move_jars_to_webinf_lib = false
154
+
155
+ # === War files only below here ===
156
+
157
+ # Embedded webserver to use with the 'executable' feature. Currently supported
158
+ # webservers are:
159
+ # - *jetty* - Embedded Jetty from Eclipse
160
+ # config.webserver = 'jetty'
161
+
162
+ # Path to the pre-bundled gem directory inside the war file. Default
163
+ # is 'WEB-INF/gems'. Specify path if gems are already bundled
164
+ # before running Warbler. This also sets 'gem.path' inside web.xml.
165
+ # config.gem_path = "WEB-INF/vendor/bundler_gems"
166
+
167
+ # Files for WEB-INF directory (next to web.xml). This contains
168
+ # web.xml by default. If there is an .erb-File it will be processed
169
+ # with webxml-config. You may want to exclude this file via
170
+ # config.excludes.
171
+ # config.webinf_files += FileList["jboss-web.xml"]
172
+
173
+ # Files to be included in the root of the webapp. Note that files in public
174
+ # will have the leading 'public/' part of the path stripped during staging.
175
+ # config.public_html = FileList["public/**/*", "doc/**/*"]
176
+
177
+ # Pathmaps for controlling how public HTML files are copied into the .war
178
+ # config.pathmaps.public_html = ["%{public/,}p"]
179
+
180
+ # Value of RAILS_ENV for the webapp -- default as shown below
181
+ # config.webxml.rails.env = ENV['RAILS_ENV'] || 'production'
182
+
183
+ # Public ROOT mapping, by default assets are copied into .war ROOT directory.
184
+ # config.public.root = ''
185
+
186
+ # Application booter to use, either :rack or :rails (autodetected by default)
187
+ # config.webxml.booter = :rails
188
+
189
+ # When using the :rack booter, "Rackup" script to use.
190
+ # - For 'rackup.path', the value points to the location of the rackup
191
+ # script in the web archive file. You need to make sure this file
192
+ # gets included in the war, possibly by adding it to config.includes
193
+ # or config.webinf_files above.
194
+ # - For 'rackup', the rackup script you provide as an inline string
195
+ # is simply embedded in web.xml.
196
+ # The script is evaluated in a Rack::Builder to load the application.
197
+ # Examples:
198
+ # config.webxml.rackup.path = 'WEB-INF/hello.ru'
199
+ # config.webxml.rackup = %{require './lib/demo'; run Rack::Adapter::Camping.new(Demo)}
200
+ # config.webxml.rackup = require 'cgi' && CGI::escapeHTML(File.read("config.ru"))
201
+
202
+ # Control the pool of Rails runtimes. Leaving unspecified means
203
+ # the pool will grow as needed to service requests. It is recommended
204
+ # that you fix these values when running a production server!
205
+ # If you're using threadsafe! mode, you probably don't want to set these values,
206
+ # since 1 runtime(default for threadsafe mode) will be enough.
207
+ # config.webxml.jruby.min.runtimes = 2
208
+ # config.webxml.jruby.max.runtimes = 4
209
+
210
+ # JNDI data source name
211
+ # config.webxml.jndi = 'jdbc/rails'
212
+ end
@@ -0,0 +1,90 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <!--
4
+ Copyright (C) 2020 Chris Liaw <chrisliaw@antrapol.com>
5
+ Author: Chris Liaw <chrisliaw@antrapol.com>
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ -->
20
+
21
+ <?import javafx.geometry.Insets?>
22
+ <?import javafx.scene.control.Button?>
23
+ <?import javafx.scene.control.ComboBox?>
24
+ <?import javafx.scene.control.Label?>
25
+ <?import javafx.scene.control.TextField?>
26
+ <?import javafx.scene.layout.ColumnConstraints?>
27
+ <?import javafx.scene.layout.GridPane?>
28
+ <?import javafx.scene.layout.HBox?>
29
+ <?import javafx.scene.layout.RowConstraints?>
30
+
31
+ <GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1">
32
+ <columnConstraints>
33
+ <ColumnConstraints hgrow="NEVER" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="138.0" />
34
+ <ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" />
35
+ <ColumnConstraints halignment="RIGHT" hgrow="NEVER" minWidth="10.0" prefWidth="100.0" />
36
+ </columnConstraints>
37
+ <rowConstraints>
38
+ <RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="38.0" vgrow="NEVER" />
39
+ <RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="38.0" vgrow="NEVER" />
40
+ <RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="38.0" vgrow="NEVER" />
41
+ <RowConstraints maxHeight="-Infinity" minHeight="10.0" prefHeight="38.0" vgrow="NEVER" />
42
+ </rowConstraints>
43
+ <children>
44
+ <Label text="Workspace Path :">
45
+ <GridPane.margin>
46
+ <Insets left="3.0" />
47
+ </GridPane.margin>
48
+ </Label>
49
+ <Label fx:id="lblWorkspacePath" maxWidth="1.7976931348623157E308" text="&lt;path&gt;" wrapText="true" GridPane.columnIndex="1" />
50
+ <Button fx:id="butOpen" maxWidth="80.0" minWidth="80.0" mnemonicParsing="false" onAction="#butOpen_onAction" prefWidth="80.0" text="Open" GridPane.columnIndex="2">
51
+ <GridPane.margin>
52
+ <Insets right="5.0" />
53
+ </GridPane.margin>
54
+ </Button>
55
+ <Label text="Project :" GridPane.rowIndex="1">
56
+ <GridPane.margin>
57
+ <Insets left="3.0" />
58
+ </GridPane.margin>
59
+ </Label>
60
+ <ComboBox fx:id="cmbProject" maxWidth="1.7976931348623157E308" onAction="#cmbProj_onAction" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.rowIndex="1">
61
+ <GridPane.margin>
62
+ <Insets right="5.0" />
63
+ </GridPane.margin>
64
+ </ComboBox>
65
+ <Label fx:id="lblNewProjName" text="New Project Name :" GridPane.rowIndex="2">
66
+ <GridPane.margin>
67
+ <Insets left="3.0" />
68
+ </GridPane.margin>
69
+ </Label>
70
+ <TextField fx:id="txtNewProjName" alignment="CENTER" onKeyReleased="#txtNewProjName_keyreleased" promptText="New Project Name" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.rowIndex="2">
71
+ <GridPane.margin>
72
+ <Insets right="5.0" />
73
+ </GridPane.margin>
74
+ </TextField>
75
+ <HBox alignment="CENTER_RIGHT" prefHeight="100.0" prefWidth="200.0" GridPane.columnSpan="3" GridPane.rowIndex="3">
76
+ <children>
77
+ <Button fx:id="butCreate" maxWidth="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#butCreate_onAction" prefWidth="80.0" text="Add">
78
+ <HBox.margin>
79
+ <Insets right="5.0" />
80
+ </HBox.margin>
81
+ </Button>
82
+ <Button fx:id="butCancel" maxWidth="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#butCancel_onAction" prefWidth="80.0" text="Cancel">
83
+ <HBox.margin>
84
+ <Insets right="5.0" />
85
+ </HBox.margin>
86
+ </Button>
87
+ </children>
88
+ </HBox>
89
+ </children>
90
+ </GridPane>