gnome-games r8578 - in trunk/glchess: glade src/lib src/lib/gtkui src/lib/scene/opengl src/lib/ui
- From: rancell svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-games r8578 - in trunk/glchess: glade src/lib src/lib/gtkui src/lib/scene/opengl src/lib/ui
- Date: Sun, 18 Jan 2009 13:06:32 +0000 (UTC)
Author: rancell
Date: Sun Jan 18 13:06:32 2009
New Revision: 8578
URL: http://svn.gnome.org/viewvc/gnome-games?rev=8578&view=rev
Log:
Added dialog to add new network profiles (Bug #564515)
Modified:
trunk/glchess/glade/network_game.glade
trunk/glchess/src/lib/gtkui/gtkui.py
trunk/glchess/src/lib/gtkui/network.py
trunk/glchess/src/lib/main.py
trunk/glchess/src/lib/network.py
trunk/glchess/src/lib/scene/opengl/texture.py
trunk/glchess/src/lib/ui/ui.py
Modified: trunk/glchess/glade/network_game.glade
==============================================================================
--- trunk/glchess/glade/network_game.glade (original)
+++ trunk/glchess/glade/network_game.glade Sun Jan 18 13:06:32 2009
@@ -803,4 +803,304 @@
</child>
</widget>
+<widget class="GtkDialog" id="add_account_dialog">
+ <property name="border_width">12</property>
+ <property name="title" translatable="yes">Add Account</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <property name="has_separator">False</property>
+ <signal name="response" handler="_on_response" last_modification_time="Sun, 18 Jan 2009 10:20:28 GMT"/>
+ <signal name="delete_event" handler="_on_delete" last_modification_time="Sun, 18 Jan 2009 10:21:05 GMT"/>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="vbox5">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="hbuttonbox5">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+ <child>
+ <widget class="GtkButton" id="button7">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="add_button">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes" comments="Add Network Profile Dialog: Button to accept values and add profile">_Add Account</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkTable" id="table8">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">6</property>
+
+ <child>
+ <widget class="GtkLabel" id="label13">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Add Network Profile Dialog: Label beside username entry">User _Name:</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">username_entry</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="username_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">â</property>
+ <property name="activates_default">False</property>
+ <signal name="changed" handler="_on_input_changed" last_modification_time="Sun, 18 Jan 2009 11:06:39 GMT"/>
+ <signal name="activate" handler="_on_username_activate" last_modification_time="Sun, 18 Jan 2009 11:43:02 GMT"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label18">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Add Network Profile Dialog: Label beside server combo">_Server:</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkComboBox" id="server_combo">
+ <property name="visible">True</property>
+ <property name="add_tearoffs">False</property>
+ <property name="focus_on_click">True</property>
+ <signal name="changed" handler="_on_server_changed" last_modification_time="Sun, 18 Jan 2009 10:51:30 GMT"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkTable" id="custom_server_table">
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">6</property>
+
+ <child>
+ <widget class="GtkLabel" id="label19">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Add Network Profile Dialog: Label beside custom hostname entry">_Host:</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">host_entry</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label20">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Add Network Profile Dialog: Label beside custom port entry">_Port:</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="mnemonic_widget">port_spin</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="host_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">â</property>
+ <property name="activates_default">False</property>
+ <signal name="changed" handler="_on_input_changed" last_modification_time="Sun, 18 Jan 2009 11:06:29 GMT"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="port_spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">0</property>
+ <property name="numeric">True</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">False</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">1 0 65535 1 10 0</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>
+ </packing>
+ </child>
+ </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>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
</glade-interface>
Modified: trunk/glchess/src/lib/gtkui/gtkui.py
==============================================================================
--- trunk/glchess/src/lib/gtkui/gtkui.py (original)
+++ trunk/glchess/src/lib/gtkui/gtkui.py Sun Jan 18 13:06:32 2009
@@ -436,31 +436,16 @@
def addNetworkDialog(self, feedback):
"""Extends glchess.ui.UI"""
- # Create the dialog
- dialog = network.GtkNetworkGameDialog(self, feedback, self.__playerModel)
- self.__joinGameDialogs.append(dialog)
-
- # Add the detected games into the dialog
- #for (game, name) in self.__networkGames.iteritems():
- # dialog.addNetworkGame(name, game)
-
- return dialog
+ self.__networkDialog = network.GtkNetworkGameDialog(self, feedback)
+ return self.__networkDialog
def addNetworkGame(self, name, game):
"""Extends glchess.ui.UI"""
- self.__networkGames[game] = name
-
- # Update the open dialogs
- for dialog in self.__joinGameDialogs:
- dialog.addNetworkGame(name, game)
+ self.__networkDialog.addNetworkGame(name, game)
def removeNetworkGame(self, game):
"""Extends glchess.ui.UI"""
- self.__networkGames.pop(game)
-
- # Update the open dialogs
- for dialog in self.__joinGameDialogs:
- dialog.removeNetworkGame(game)
+ self.__networkDialog.removeNetworkGame(game)
def requestSave(self, title):
"""Extends glchess.ui.UI"""
Modified: trunk/glchess/src/lib/gtkui/network.py
==============================================================================
--- trunk/glchess/src/lib/gtkui/network.py (original)
+++ trunk/glchess/src/lib/gtkui/network.py Sun Jan 18 13:06:32 2009
@@ -10,19 +10,95 @@
_ = gettext.gettext
+class GtkNetworkAddDialog:
+ def __init__(self, networkDialog, parent):
+ self.__networkDialog = networkDialog
+
+ # Load the UI
+ self.__gui = gtkui.loadGladeFile('network_game.glade', 'add_account_dialog')
+ self.__gui.signal_autoconnect(self)
+
+ self.__gui.get_widget('add_account_dialog').set_transient_for(parent)
+
+ # FIXME: Hard-coded servers
+ # name, host, port
+ self.serverModel = gtk.ListStore(str, str, int)
+ # Translators: Add Network Profile Dialog: Connect to the GGZ Gaming Zone server (the default)
+ self.serverModel.set(self.serverModel.append(), 0, _("GGZ Gaming Zone"), 1, "gnome.ggzgamingzone.org", 2, 5688)
+ # Translators: Add Network Profile Dialog: Use a custom server
+ self.serverModel.set(self.serverModel.append(), 0, _("Custom"), 1, "", 2, 5688)
+
+ widget = self.__gui.get_widget('server_combo')
+ widget.set_model(self.serverModel)
+ cell = gtk.CellRendererText()
+ widget.pack_start(cell, False)
+ widget.add_attribute(cell, 'text', 0)
+ widget.set_model(self.serverModel)
+ widget.set_active(0)
+
+ def setVisible(self, isVisible):
+ widget = self.__gui.get_widget('add_account_dialog')
+ if isVisible:
+ widget.present()
+ else:
+ widget.hide()
+ self.clear()
+
+ def clear(self):
+ self.__gui.get_widget('server_combo').set_active(0)
+ self.__gui.get_widget('username_entry').set_text('')
+
+ def _on_server_changed(self, widget):
+ widget = self.__gui.get_widget('server_combo')
+ model = widget.get_model()
+ iter = widget.get_active_iter()
+ (host,) = model.get(iter, 1)
+ (port,) = model.get(iter, 2)
+ self.__gui.get_widget('host_entry').set_text(host)
+ self.__gui.get_widget('port_spin').set_value(port)
+ table = self.__gui.get_widget('custom_server_table')
+ if host == '':
+ table.show()
+ else:
+ table.hide()
+
+ def have_data(self):
+ username = self.__gui.get_widget('username_entry').get_text()
+ host = self.__gui.get_widget('host_entry').get_text()
+ return username != '' and host != ''
+
+ def _on_input_changed(self, widget):
+ self.__gui.get_widget('add_button').set_sensitive(self.have_data())
+
+ def _on_username_activate(self, widget):
+ if self.have_data():
+ self._on_response(None, gtk.RESPONSE_OK)
+
+ def _on_response(self, widget, response_id):
+ username = self.__gui.get_widget('username_entry').get_text()
+ host = self.__gui.get_widget('host_entry').get_text()
+ port = self.__gui.get_widget('port_spin').get_value_as_int()
+ name = '%s %s' % (username, host) # FIXME
+
+ if response_id == gtk.RESPONSE_OK:
+ profile = self.__networkDialog.feedback.addProfile((name, username, host, port))
+ self.__networkDialog.addProfile(profile, profile.name, useNow = True)
+
+ self.__gui.get_widget('add_account_dialog').hide()
+ self.clear()
+
+ def _on_delete(self, widget, event):
+ # Hide; don't delete this window
+ return True
+
class GtkNetworkGameDialog(glchess.ui.NetworkController):
"""
"""
- # The main UI and the ???
- __mainUI = None
- __gui = None
-
- def __init__(self, mainUI, feedback, aiModel):
+ def __init__(self, mainUI, feedback):
"""Constructor for a new game dialog.
'mainUI' is the main UI.
'feedback' is the object to feedback events with.
- 'aiModel' is the AI models to use.
"""
self.__mainUI = mainUI
self.feedback = feedback
@@ -31,17 +107,26 @@
self.__gui = gtkui.loadGladeFile('network_game.glade', 'network_game_dialog')
self.__gui.signal_autoconnect(self)
- self.profileModel = gtk.ListStore(gobject.TYPE_PYOBJECT, str)
- iter = self.profileModel.append()
- # Translators: Server Combo Box: Not connected to a server
- self.profileModel.set(iter, 0, None, 1, _('Disconnected'))
+ # Selected profile
+ self.__profile = None
+ self.profileModel = gtk.ListStore(gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, str)
+ # Translators: Server Combo Box: Not connected to a server
+ self.profileModel.set(self.profileModel.append(), 0, None, 1, self._set_profile, 2, _('Disconnected'))
+ self.profileModelSuffixCount = 0
+ self.profileModel.set(self.profileModel.append(), 1, None)
+ self.profileModelSuffixCount += 1
+ # Translators: Server Combo Box: Add new profile
+ self.profileModel.set(self.profileModel.append(), 0, None, 1, self._new_profile, 2, _('New profile...'))
+ self.profileModelSuffixCount += 1
+
widget = self.__gui.get_widget('server_combo')
widget.set_model(self.profileModel)
+ widget.set_active(0)
+ widget.set_row_separator_func(self._is_profile_model_separator)
cell = gtk.CellRendererText()
widget.pack_start(cell, False)
- widget.add_attribute(cell, 'text', 1)
- #FIXME: delay this: widget.set_active_iter(iter)
+ widget.add_attribute(cell, 'text', 2)
# room object, index, name, num players, description, font weight, font style, icon_name
self.roomModel = gtk.TreeStore(gobject.TYPE_PYOBJECT, int, str, str, str, int, int, str)
@@ -131,6 +216,8 @@
buffer.create_mark('end', buffer.get_end_iter())
mainUI.setTooltipStyle(self.__gui.get_widget('info_panel'))
+
+ self.__addProfileDialog = GtkNetworkAddDialog(self, self.__gui.get_widget('network_game_dialog'))
# Extended methods
@@ -138,8 +225,14 @@
"""Called by glchess.ui.NetworkController"""
widget = self.__gui.get_widget('network_game_dialog')
if isVisible:
- widget.show()
+ widget.present()
+
+ # Prompt for new profile if none configured
+ # FIXME: Make this clearer this is the count of non-profile elements in the combo
+ if len(self.profileModel) <= (self.profileModelSuffixCount + 1):
+ self.__addProfileDialog.setVisible(True)
else:
+ self.__addProfileDialog.setVisible(False)
widget.hide()
def setSensitive(self, isSensitive):
@@ -154,10 +247,12 @@
def clearError(self):
self.__gui.get_widget('info_panel').hide()
- def addProfile(self, profile, name):
+ def addProfile(self, profile, name, useNow = False):
"""Called by glchess.ui.UIController"""
- iter = self.profileModel.append()
- self.profileModel.set(iter, 0, profile, 1, name)
+ iter = self.profileModel.insert(len(self.profileModel) - self.profileModelSuffixCount)
+ self.profileModel.set(iter, 0, profile, 1, self._set_profile, 2, name)
+ if self.__profile is None and useNow:
+ self.__gui.get_widget('server_combo').set_active_iter(iter)
def setBusy(self, isBusy):
"""Called by glchess.ui.UIController"""
@@ -462,6 +557,26 @@
# Inform the child class
self.__mainUI.feedback.onGameStart(game)
+ def _is_profile_model_separator(self, model, iter):
+ return model.get(iter, 1)[0] is None
+
+ def _set_profile(self, profile):
+ if profile != self.__profile:
+ self.__profile = profile
+ self.feedback.setProfile(profile)
+
+ def __selectActiveProfile(self):
+ iter = self.profileModel.get_iter_first()
+ while iter is not None:
+ if self.__profile == self.profileModel.get_value(iter, 0):
+ break
+ iter = self.profileModel.iter_next(iter)
+ self.__gui.get_widget('server_combo').set_active_iter(iter)
+
+ def _new_profile(self, profile):
+ self.__selectActiveProfile()
+ self.__addProfileDialog.setVisible(True)
+
# Gtk+ signal handlers
def _on_table_selected(self, selection):
@@ -481,9 +596,10 @@
"""Gtk+ callback"""
model = widget.get_model()
iter = widget.get_active_iter()
+ (method,) = model.get(iter, 1)
(profile,) = model.get(iter, 0)
- self.feedback.setProfile(profile)
-
+ method(profile)
+
def _on_chat_entry_activate(self, widget):
"""Gtk+ callback"""
text = widget.get_text()
Modified: trunk/glchess/src/lib/main.py
==============================================================================
--- trunk/glchess/src/lib/main.py (original)
+++ trunk/glchess/src/lib/main.py Sun Jan 18 13:06:32 2009
@@ -409,7 +409,7 @@
def onNewNetworkGame(self):
"""Called by ui.UIFeedback"""
self.networkDialog.setVisible(True)
-
+
def onQuit(self):
"""Called by ui.UIFeedback"""
self.application.quit()
Modified: trunk/glchess/src/lib/network.py
==============================================================================
--- trunk/glchess/src/lib/network.py (original)
+++ trunk/glchess/src/lib/network.py Sun Jan 18 13:06:32 2009
@@ -57,7 +57,7 @@
def setValue(self, value):
assert(self.type is GGZLine.TYPE_FIELD)
self.value = value
- self.text = '%s=%s' % (self.name, value)
+ self.text = '%s=%s\n' % (self.name, value)
class GGZConfig:
@@ -105,8 +105,22 @@
line.setValue(value)
return
elif wasInSection and not inSection:
- self.lines.insert(index, GGZLine('%s=%s' % (name, value), section))
+ line = GGZLine('%s=%s\n' % (name, value))
+ line.section = section
+ self.lines.insert(index, line)
return
+
+ # New section
+ if not wasInSection:
+ if len(self.lines) > 0:
+ self.lines.append(GGZLine('\n'))
+ line = GGZLine('[%s]\n' % section)
+ line.section = section
+ self.lines.append(line)
+
+ line = GGZLine('%s=%s\n' % (name, value))
+ line.section = section
+ self.lines.append(line)
def removeSection(self, name):
keptLines = []
@@ -149,6 +163,21 @@
server.password = None
return server
+
+ def updateServer(self, name, username, host, port):
+ self.setField(name, 'Host', host)
+ self.setField(name, 'Port', port)
+ self.setField(name, 'Login', username)
+ self.setField(name, 'Type', GGZConfig.TYPE_GUEST) # FIXME: Hardcoded
+
+ try:
+ servers = self.getField('Servers', 'ProfileList')
+ except KeyError, e:
+ self.setField('Servers', 'ProfileList', name.replace(' ', '\\ '))
+ else:
+ self.setField('Servers', 'ProfileList', servers + ' ' + name.replace(' ', '\\ '))
+
+ self.save()
def save(self):
lines = []
@@ -431,6 +460,28 @@
self.buffer = ''
self.profile = None
self.decoder = None
+
+ def addProfile(self, profile):
+ """Called by ui.NetworkFeedback"""
+ (name, username, host, port) = profile
+
+ # Make name unique
+ n = name
+ dupCount = 1
+ while True:
+ try:
+ self.ui.ggzConfig.getServer(n)
+ except KeyError:
+ break
+ else:
+ dupCount += 1
+ n = '%s (%d)' % (name, dupCount)
+ name = n
+
+ self.ui.ggzConfig.updateServer(name, username, host, port)
+
+ # FIXME: Return value is temporary
+ return self.ui.ggzConfig.getServer(name)
def setProfile(self, profile):
"""Called by ui.NetworkFeedback"""
Modified: trunk/glchess/src/lib/scene/opengl/texture.py
==============================================================================
--- trunk/glchess/src/lib/scene/opengl/texture.py (original)
+++ trunk/glchess/src/lib/scene/opengl/texture.py Sun Jan 18 13:06:32 2009
@@ -129,7 +129,7 @@
self.__width, # Width
self.__height, # Height
0, # Border
- GL_RGB, # Format
+ self.__format, # Format
GL_UNSIGNED_BYTE, # Type
self.__data)
@@ -143,7 +143,7 @@
if self.__texture is None:
self.__texture = self.__generate()
self.__data = None
-
+
# Use texture
glBindTexture(GL_TEXTURE_2D, self.__texture)
Modified: trunk/glchess/src/lib/ui/ui.py
==============================================================================
--- trunk/glchess/src/lib/ui/ui.py (original)
+++ trunk/glchess/src/lib/ui/ui.py Sun Jan 18 13:06:32 2009
@@ -33,6 +33,9 @@
class NetworkFeedback:
"""Template class for feedback from a network game selector"""
+ def addProfile(self, profile):
+ assert(False)
+
def setProfile(self, profile):
assert(False)
@@ -313,7 +316,7 @@
"""
"""
assert(False)
-
+
def onQuit(self):
"""Called when the user quits the program"""
assert(False)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]