initial joystick config support in gfceux

This commit is contained in:
punkrockguy318 2008-12-07 15:28:20 +00:00
parent fb0220dbd7
commit adefbb3069
6 changed files with 242 additions and 226 deletions

View File

@ -1,4 +1,5 @@
================= version 2.0.4 ( yet to be released) ============ ================= version 2.0.4 ( yet to be released) ============
* Initial joystick config support: supports buttons, but hot hats and axes
* Documented and cleaned fceux config parser * Documented and cleaned fceux config parser
* Udated about box UI * Udated about box UI
* Updated UI, explains joystick support isn't complete yet in the GUI * Updated UI, explains joystick support isn't complete yet in the GUI

View File

@ -68,6 +68,7 @@ class FceuxConfigParser:
data = self.f.read(keyname.__len__()) data = self.f.read(keyname.__len__())
buf += data buf += data
if data == "": if data == "":
print "key " + keyname + " not found"
return None return None
if data == keyname: if data == keyname:
break break
@ -94,7 +95,7 @@ class FceuxConfigParser:
self.f.close() self.f.close()
# write the buffer to the config file # write the buffer to the config file
self.f._open('w') self._open('w')
self.f.write(buf) self.f.write(buf)
self.f.close() self.f.close()

View File

@ -14,6 +14,10 @@ class KeyGrabber:
pygame.joystick.init() pygame.joystick.init()
if pygame.joystick.get_count() > 0: if pygame.joystick.get_count() > 0:
print "Joystick found!" print "Joystick found!"
for x in range(0, pygame.joystick.get_count()):
joy = pygame.joystick.Joystick(x)
joy.init()
print "joy " + str(x) + " initialized."
screen = pygame.display.set_mode((width, height)) screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Press any key. . .") pygame.display.set_caption("Press any key. . .")
@ -23,14 +27,17 @@ class KeyGrabber:
for event in pygame.event.get(): for event in pygame.event.get():
if event.type == KEYDOWN: if event.type == KEYDOWN:
pygame.display.quit() pygame.display.quit()
return event.key return ("Keyboard", event.key)
# TODO: Make work with joystick. Do buttons first. # TODO: Make work with joystick. Do buttons first.
if event.type == JOYBUTTONDOWN: if event.type == JOYBUTTONDOWN:
pygame.display.quit() pygame.display.quit()
# TODO: Make sure we're returning the data we need # TODO: Make sure we're returning the data we need
# for config file here. I'm not sure if this is # for config file here. I'm not sure if this is
# the correct data. # the correct data.
return event.joy, event.button return ("Joystick", event.button, event.joy)
#if event.type == JOYAXISMOTION:
# pygame.display.quit()
# return event.joy, event.axis, event.value
if __name__ == "__main__": if __name__ == "__main__":
kg = KeyGrabber() kg = KeyGrabber()

21
gfceux
View File

@ -557,15 +557,15 @@ class GfceuxApp:
def gamepad_clicked(self, widget, data=None): def gamepad_clicked(self, widget, data=None):
widgets.get_object("gamepad_config_window").show_all() widgets.get_object("gamepad_config_window").show_all()
d = {'gp1_button' : "1", d = {'gp1_button' : "0",
'gp2_button' : "2", 'gp2_button' : "1",
'gp3_button' : "3", 'gp3_button' : "2",
'gp4_button' : "4"} 'gp4_button' : "3"}
self.gamepad_config_no = d[widget.name] self.gamepad_config_no = d[widget.name]
def button_clicked(self, widget, data=None): def button_clicked(self, widget, data=None):
prefix = "SDL.Input.GamePad" + self.gamepad_config_no prefix = "SDL.Input.GamePad." + self.gamepad_config_no
d = {'right_button' : prefix + "Right", d = {'right_button' : prefix + "Right",
'left_button' : prefix + "Left", 'left_button' : prefix + "Left",
'up_button' : prefix + "Up", 'up_button' : prefix + "Up",
@ -582,9 +582,16 @@ class GfceuxApp:
self.gamepad_clicked_old(widget) self.gamepad_clicked_old(widget)
else: else:
kg = get_key.KeyGrabber() kg = get_key.KeyGrabber()
key = kg.get_key() key_tuple = kg.get_key()
cp = FceuxConfigParser(configfile) cp = FceuxConfigParser(configfile)
cp.writeKey(d[widget.name], key) cp.writeKey(prefix + "DeviceType", key_tuple[0])
if key_tuple[0] == "Keyboard":
print key_tuple
cp.writeKey(d[widget.name], key_tuple[1])
if key_tuple[0] == "Joystick":
print key_tuple
cp.writeKey(prefix + "DeviceNum", key_tuple[2])
cp.writeKey(d[widget.name], key_tuple[1])
def gamepad_clicked_old(self, widget, data=None): def gamepad_clicked_old(self, widget, data=None):
command = '--inputcfg gamepad' + self.gamepad_config_no command = '--inputcfg gamepad' + self.gamepad_config_no

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd"> <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.5 on Fri Dec 5 05:17:39 2008 --> <!--Generated with glade3 3.4.5 on Sun Dec 7 10:27:11 2008 -->
<glade-interface> <glade-interface>
<widget class="GtkWindow" id="gamepad_config_window"> <widget class="GtkWindow" id="gamepad_config_window">
<property name="title" translatable="yes">Gamepad Configuration</property> <property name="title" translatable="yes">Gamepad Configuration</property>
@ -13,7 +13,7 @@
<child> <child>
<widget class="GtkLabel" id="label26"> <widget class="GtkLabel" id="label26">
<property name="visible">True</property> <property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;NOTE:&lt;/b&gt; The below GUI is brand new and currently only works with keyboard input. To configure a joystick, use --inputcfg. <property name="label" translatable="yes">&lt;b&gt;NOTE:&lt;/b&gt; The below GUI is brand new and joysticks are not completely support yet. To configure a joystick, use --inputcfg.
</property> </property>
<property name="use_markup">True</property> <property name="use_markup">True</property>
<property name="wrap">True</property> <property name="wrap">True</property>
@ -52,17 +52,29 @@
<placeholder/> <placeholder/>
</child> </child>
<child> <child>
<widget class="GtkButton" id="right_button"> <widget class="GtkButton" id="up_button">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="label" translatable="yes">Right</property> <property name="label" translatable="yes">Up</property>
<property name="response_id">0</property>
<signal name="clicked" handler="button_clicked"/>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="left_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="label" translatable="yes">Left</property>
<property name="response_id">0</property> <property name="response_id">0</property>
<signal name="clicked" handler="button_clicked"/> <signal name="clicked" handler="button_clicked"/>
</widget> </widget>
<packing> <packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
</packing> </packing>
@ -84,33 +96,21 @@
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkButton" id="left_button"> <widget class="GtkButton" id="right_button">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="label" translatable="yes">Left</property> <property name="label" translatable="yes">Right</property>
<property name="response_id">0</property> <property name="response_id">0</property>
<signal name="clicked" handler="button_clicked"/> <signal name="clicked" handler="button_clicked"/>
</widget> </widget>
<packing> <packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkButton" id="up_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="label" translatable="yes">Up</property>
<property name="response_id">0</property>
<signal name="clicked" handler="button_clicked"/>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
</widget> </widget>
</child> </child>
</widget> </widget>
@ -503,17 +503,30 @@
<property name="column_spacing">5</property> <property name="column_spacing">5</property>
<property name="row_spacing">5</property> <property name="row_spacing">5</property>
<child> <child>
<widget class="GtkButton" id="gp3_button"> <widget class="GtkButton" id="gp1_button">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="label" translatable="yes">Gamepad _3</property> <property name="label" translatable="yes">Gamepad _1</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="response_id">0</property> <property name="response_id">0</property>
<signal name="clicked" handler="gamepad_clicked" after="yes"/> <signal name="clicked" handler="gamepad_clicked" after="yes"/>
</widget> </widget>
<packing> <packing>
<property name="top_attach">1</property> <property name="y_options"></property>
<property name="bottom_attach">2</property> </packing>
</child>
<child>
<widget class="GtkButton" id="gp2_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Gamepad _2</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="gamepad_clicked" after="yes"/>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="y_options"></property> <property name="y_options"></property>
</packing> </packing>
</child> </child>
@ -535,30 +548,17 @@
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkButton" id="gp2_button"> <widget class="GtkButton" id="gp3_button">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="label" translatable="yes">Gamepad _2</property> <property name="label" translatable="yes">Gamepad _3</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
<signal name="clicked" handler="gamepad_clicked" after="yes"/>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkButton" id="gp1_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Gamepad _1</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="response_id">0</property> <property name="response_id">0</property>
<signal name="clicked" handler="gamepad_clicked" after="yes"/> <signal name="clicked" handler="gamepad_clicked" after="yes"/>
</widget> </widget>
<packing> <packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"></property> <property name="y_options"></property>
</packing> </packing>
</child> </child>
@ -1054,28 +1054,13 @@ Invalid options may cause GFCE UltraX to behave incorrectly.
<property name="column_spacing">5</property> <property name="column_spacing">5</property>
<property name="row_spacing">5</property> <property name="row_spacing">5</property>
<child> <child>
<widget class="GtkEntry" id="host_pass"> <widget class="GtkLabel" id="label19">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="xalign">0</property>
<property name="label" translatable="yes">Port:</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="x_options">GTK_FILL</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkSpinButton" id="host_port">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">4046 1 65536 1 10 0</property>
<property name="climb_rate">1</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="y_options"></property> <property name="y_options"></property>
</packing> </packing>
</child> </child>
@ -1093,13 +1078,28 @@ Invalid options may cause GFCE UltraX to behave incorrectly.
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="label19"> <widget class="GtkSpinButton" id="host_port">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="can_focus">True</property>
<property name="label" translatable="yes">Port:</property> <property name="adjustment">4046 1 65536 1 10 0</property>
<property name="climb_rate">1</property>
</widget> </widget>
<packing> <packing>
<property name="x_options">GTK_FILL</property> <property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="host_pass">
<property name="visible">True</property>
<property name="can_focus">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"></property> <property name="y_options"></property>
</packing> </packing>
</child> </child>
@ -1150,54 +1150,13 @@ Invalid options may cause GFCE UltraX to behave incorrectly.
<property name="column_spacing">3</property> <property name="column_spacing">3</property>
<property name="row_spacing">5</property> <property name="row_spacing">5</property>
<child> <child>
<widget class="GtkSpinButton" id="join_port"> <widget class="GtkEntry" id="join_add">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="adjustment">4046 1 65536 1 10 0</property>
<property name="climb_rate">1</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label17">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Password:</property>
</widget>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label16">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Server Port:</property>
</widget>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label15">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Server Address:</property>
</widget>
<packing>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"></property>
</packing> </packing>
</child> </child>
@ -1217,13 +1176,54 @@ Invalid options may cause GFCE UltraX to behave incorrectly.
</packing> </packing>
</child> </child>
<child> <child>
<widget class="GtkEntry" id="join_add"> <widget class="GtkLabel" id="label15">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Server Address:</property>
</widget>
<packing>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label16">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Server Port:</property>
</widget>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label17">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Password:</property>
</widget>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkSpinButton" id="join_port">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="adjustment">4046 1 65536 1 10 0</property>
<property name="climb_rate">1</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"></property> <property name="y_options"></property>
</packing> </packing>
</child> </child>

View File

@ -1,5 +1,5 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!--Generated with glade3 3.4.5 on Fri Dec 5 05:17:39 2008 --> <!--Generated with glade3 3.4.5 on Sun Dec 7 10:27:11 2008 -->
<interface> <interface>
<object class="GtkAdjustment" id="adjustment1"> <object class="GtkAdjustment" id="adjustment1">
<property name="upper">5</property> <property name="upper">5</property>
@ -44,7 +44,7 @@
<child> <child>
<object class="GtkLabel" id="label26"> <object class="GtkLabel" id="label26">
<property name="visible">True</property> <property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;NOTE:&lt;/b&gt; The below GUI is brand new and currently only works with keyboard input. To configure a joystick, use --inputcfg. <property name="label" translatable="yes">&lt;b&gt;NOTE:&lt;/b&gt; The below GUI is brand new and joysticks are not completely support yet. To configure a joystick, use --inputcfg.
</property> </property>
<property name="use_markup">True</property> <property name="use_markup">True</property>
<property name="wrap">True</property> <property name="wrap">True</property>
@ -83,16 +83,27 @@
<placeholder/> <placeholder/>
</child> </child>
<child> <child>
<object class="GtkButton" id="right_button"> <object class="GtkButton" id="up_button">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="label" translatable="yes">Right</property> <property name="label" translatable="yes">Up</property>
<signal handler="button_clicked" name="clicked"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="left_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="label" translatable="yes">Left</property>
<signal handler="button_clicked" name="clicked"/> <signal handler="button_clicked" name="clicked"/>
</object> </object>
<packing> <packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
</packing> </packing>
@ -113,31 +124,20 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="left_button"> <object class="GtkButton" id="right_button">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="label" translatable="yes">Left</property> <property name="label" translatable="yes">Right</property>
<signal handler="button_clicked" name="clicked"/> <signal handler="button_clicked" name="clicked"/>
</object> </object>
<packing> <packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkButton" id="up_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="label" translatable="yes">Up</property>
<signal handler="button_clicked" name="clicked"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
</object> </object>
</child> </child>
</object> </object>
@ -511,16 +511,28 @@
<property name="column_spacing">5</property> <property name="column_spacing">5</property>
<property name="row_spacing">5</property> <property name="row_spacing">5</property>
<child> <child>
<object class="GtkButton" id="gp3_button"> <object class="GtkButton" id="gp1_button">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="label" translatable="yes">Gamepad _3</property> <property name="label" translatable="yes">Gamepad _1</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<signal after="yes" handler="gamepad_clicked" name="clicked"/> <signal after="yes" handler="gamepad_clicked" name="clicked"/>
</object> </object>
<packing> <packing>
<property name="top_attach">1</property> <property name="y_options"/>
<property name="bottom_attach">2</property> </packing>
</child>
<child>
<object class="GtkButton" id="gp2_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Gamepad _2</property>
<property name="use_underline">True</property>
<signal after="yes" handler="gamepad_clicked" name="clicked"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="y_options"/> <property name="y_options"/>
</packing> </packing>
</child> </child>
@ -541,28 +553,16 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="gp2_button"> <object class="GtkButton" id="gp3_button">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="label" translatable="yes">Gamepad _2</property> <property name="label" translatable="yes">Gamepad _3</property>
<property name="use_underline">True</property>
<signal after="yes" handler="gamepad_clicked" name="clicked"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkButton" id="gp1_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Gamepad _1</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<signal after="yes" handler="gamepad_clicked" name="clicked"/> <signal after="yes" handler="gamepad_clicked" name="clicked"/>
</object> </object>
<packing> <packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"/> <property name="y_options"/>
</packing> </packing>
</child> </child>
@ -1035,28 +1035,13 @@ Invalid options may cause GFCE UltraX to behave incorrectly.
<property name="column_spacing">5</property> <property name="column_spacing">5</property>
<property name="row_spacing">5</property> <property name="row_spacing">5</property>
<child> <child>
<object class="GtkEntry" id="host_pass"> <object class="GtkLabel" id="label19">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="xalign">0</property>
<property name="label" translatable="yes">Port:</property>
</object> </object>
<packing> <packing>
<property name="left_attach">1</property> <property name="x_options">GTK_FILL</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="host_port">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="adjustment">adjustment3</property>
<property name="climb_rate">1</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="y_options"/> <property name="y_options"/>
</packing> </packing>
</child> </child>
@ -1074,13 +1059,28 @@ Invalid options may cause GFCE UltraX to behave incorrectly.
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkLabel" id="label19"> <object class="GtkSpinButton" id="host_port">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">0</property> <property name="can_focus">True</property>
<property name="label" translatable="yes">Port:</property> <property name="adjustment">adjustment3</property>
<property name="climb_rate">1</property>
</object> </object>
<packing> <packing>
<property name="x_options">GTK_FILL</property> <property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkEntry" id="host_pass">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"/> <property name="y_options"/>
</packing> </packing>
</child> </child>
@ -1130,54 +1130,13 @@ Invalid options may cause GFCE UltraX to behave incorrectly.
<property name="column_spacing">3</property> <property name="column_spacing">3</property>
<property name="row_spacing">5</property> <property name="row_spacing">5</property>
<child> <child>
<object class="GtkSpinButton" id="join_port"> <object class="GtkEntry" id="join_add">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="adjustment">adjustment4</property>
<property name="climb_rate">1</property>
</object> </object>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkLabel" id="label17">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Password:</property>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkLabel" id="label16">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Server Port:</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkLabel" id="label15">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Server Address:</property>
</object>
<packing>
<property name="x_options">GTK_FILL</property>
<property name="y_options"/> <property name="y_options"/>
</packing> </packing>
</child> </child>
@ -1197,13 +1156,54 @@ Invalid options may cause GFCE UltraX to behave incorrectly.
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkEntry" id="join_add"> <object class="GtkLabel" id="label15">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Server Address:</property>
</object>
<packing>
<property name="x_options">GTK_FILL</property>
<property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkLabel" id="label16">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Server Port:</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkLabel" id="label17">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Password:</property>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="join_port">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="adjustment">adjustment4</property>
<property name="climb_rate">1</property>
</object> </object>
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"/> <property name="y_options"/>
</packing> </packing>
</child> </child>