Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/FortuneMaker.activity
diff options
context:
space:
mode:
authorJustin Lewis <jtl1728@rit.edu>2010-01-22 23:28:45 (GMT)
committer Justin Lewis <jtl1728@rit.edu>2010-01-22 23:28:45 (GMT)
commitfcd9bc54af3b39d20efb3ab6349eda42ca8ed057 (patch)
treebc53382ac27ba21d67b1e78b5f49bf5edb23da87 /FortuneMaker.activity
parent03e496150b0a117f2f59cb5fb91a22ab01855676 (diff)
Switching to menu bar, added some features and content
Diffstat (limited to 'FortuneMaker.activity')
-rw-r--r--FortuneMaker.activity/Dungeon.py4
-rw-r--r--FortuneMaker.activity/FortuneMaker.py137
-rw-r--r--FortuneMaker.activity/Room.py19
3 files changed, 124 insertions, 36 deletions
diff --git a/FortuneMaker.activity/Dungeon.py b/FortuneMaker.activity/Dungeon.py
index 502a4d4..bb647a2 100644
--- a/FortuneMaker.activity/Dungeon.py
+++ b/FortuneMaker.activity/Dungeon.py
@@ -1,9 +1,10 @@
from Room import Room
class Dungeon:
- def __init__( self, name, theme, width, height, room_str = None ):
+ def __init__( self, name, theme, next, width, height, room_str = None ):
self.name = name
self.theme = theme
+ self.next = next
self.width = width
self.height = height
@@ -27,6 +28,7 @@ class Dungeon:
def export(self):
text = str(self.width) + "x" + str(self.height) + "\n"
text += str(self.theme) + "\n"
+ text += str(self.next) + "\n"
for row in self.roomlist:
for room in row:
text += room.room_to_string() + "\n"
diff --git a/FortuneMaker.activity/FortuneMaker.py b/FortuneMaker.activity/FortuneMaker.py
index 66ca241..bea2c1e 100644
--- a/FortuneMaker.activity/FortuneMaker.py
+++ b/FortuneMaker.activity/FortuneMaker.py
@@ -10,6 +10,10 @@ from sugar.activity.activity import Activity, ActivityToolbox
from sugar.datastore import datastore
from gettext import gettext as _
+from sugar.activity.activity import ActivityToolbox
+from sugar.graphics.toolbutton import ToolButton
+from sugar.util import unique_id
+
import gtk
import os
import re
@@ -30,15 +34,60 @@ class FortuneMaker(Activity):
# INITIALIZE GUI
################
- self.set_title('File Share')
+ self.set_title('FortuneMaker')
# Create Toolbox
- toolbox = ActivityToolbox(self)
- self.set_toolbox(toolbox)
- toolbox.show()
+ self.build_toolbars()
+ self.enable_room_icons(False, False)
self.show_dungeon_selection()
- #self.set_create_dungeon_settings()
+
+ def build_toolbars(self):
+ self.dungeon_buttons = {}
+ self.dungeon_bar = gtk.Toolbar()
+ self.view_bar = gtk.Toolbar()
+
+ # BUILD CUSTOM TOOLBAR
+ self.dungeon_buttons['new'] = ToolButton('add')
+ self.dungeon_buttons['new'].set_tooltip(_("New Dungeon"))
+ self.dungeon_buttons['new'].connect("clicked", self.view_change_cb, 'new')
+ self.dungeon_bar.insert(self.dungeon_buttons['new'], -1)
+
+ self.dungeon_buttons['load'] = ToolButton('fileopen')
+ self.dungeon_buttons['load'].set_tooltip(_("Open Dungeon"))
+ self.dungeon_buttons['load'].connect("clicked", self.view_change_cb, 'load')
+ self.dungeon_bar.insert(self.dungeon_buttons['load'], -1)
+
+ self.dungeon_buttons['save'] = ToolButton('filesave')
+ self.dungeon_buttons['save'].set_tooltip( _("Save dungeon file to journal") )
+ self.dungeon_buttons['save'].connect("clicked", self.view_change_cb, 'export')
+ self.dungeon_bar.insert(self.dungeon_buttons['save'], -1)
+ self.dungeon_buttons['save'].set_sensitive( False )
+
+ self.dungeon_buttons['layout'] = ToolButton('view-freeform')
+ self.dungeon_buttons['layout'].set_tooltip(_("View Dungeon Layout"))
+ self.dungeon_buttons['layout'].connect("clicked", self.view_change_cb, 'layout')
+ self.view_bar.insert(self.dungeon_buttons['layout'], -1)
+ self.dungeon_buttons['layout'].set_sensitive( False )
+
+ self.dungeon_buttons['room'] = ToolButton('view-box')
+ self.dungeon_buttons['room'].set_tooltip(_("View Room Layout"))
+ self.dungeon_buttons['room'].connect("clicked", self.view_change_cb, 'room')
+ self.view_bar.insert(self.dungeon_buttons['room'], -1)
+ self.dungeon_buttons['room'].set_sensitive( False )
+
+ self.toolbox = ActivityToolbox(self)
+ self.toolbox.add_toolbar(_("Dungeon"), self.dungeon_bar)
+ self.toolbox.add_toolbar(_("View"), self.view_bar)
+
+ self.set_toolbox(self.toolbox)
+ self.toolbox.show()
+
+ def enable_room_icons(self, dn=True, rm = True):
+ self.dungeon_buttons['save'].set_sensitive( dn )
+ self.dungeon_buttons['layout'].set_sensitive( dn )
+ self.dungeon_buttons['room'].set_sensitive( rm )
+
def view_change_cb(self, widget, view=None):
if view == 'stats':
@@ -49,6 +98,11 @@ class FortuneMaker(Activity):
self.view_room()
elif view == 'export':
self.export_view()
+ elif view == 'new':
+ ##TODO CONFIRM
+ self.set_create_dungeon_settings()
+ elif view == 'load':
+ self.show_dungeon_selection()
def list_fh_files(self):
ds_objects, num_objects = datastore.find({'FortuneMaker_VERSION':'1'})
@@ -80,13 +134,14 @@ class FortuneMaker(Activity):
if num_objects == 0:
# Create a datastore object
file_dsobject = datastore.create()
+ file_dsobject.metadata['FM_UID'] = unique_id()
else:
file_dsobject = ds_objects[0]
# Write any metadata (here we specifically set the title of the file and
# specify that this is a plain text file).
file_dsobject.metadata['title'] = filename
- file_dsobject.metadata['mime_type'] = 'text/plain'
+ file_dsobject.metadata['mime_type'] = 'text/fm_map'
file_dsobject.metadata['FortuneMaker_VERSION'] = '1'
#Write the actual file to the data directory of this activity's root.
@@ -116,26 +171,12 @@ class FortuneMaker(Activity):
def get_button_bar(self):
button_tabs = gtk.HBox()
+
stats = gtk.Button( _("Dungeon Summary") )
stats.set_alignment(0,.5)
stats.connect( 'clicked', self.view_change_cb, 'stats')
button_tabs.pack_start( stats, False )
- layout = gtk.Button( _("Dungeon Layout") )
- layout.set_alignment(0,.5)
- layout.connect( 'clicked', self.view_change_cb, 'layout')
- button_tabs.pack_start( layout, False )
-
- room = gtk.Button( _("Room Layout") )
- room.set_alignment(0,.5)
- room.connect( 'clicked', self.view_change_cb, 'room')
- button_tabs.pack_start( room, False )
-
- dump = gtk.Button( _("Export") )
- dump.set_alignment(0,.5)
- dump.connect( 'clicked', self.view_change_cb, 'export' )
- button_tabs.pack_start( dump, False )
-
return button_tabs
def show_dungeon_selection(self):
@@ -207,6 +248,27 @@ class FortuneMaker(Activity):
row.pack_end( theme )
container.pack_start( row, False )
+ # Next Dungeon
+ row = gtk.HBox()
+ label = gtk.Label(_("Next Dungeon:"))
+ label.set_alignment( 0, .5)
+ row.pack_start( label )
+
+ next_dungeon = gtk.combo_box_new_text()
+
+ file_list = self.list_fh_files()
+ file_list_map = {}
+ file_list_map["0"] = _("None")
+ next_dungeon.append_text( file_list_map["0"] )
+ next_dungeon.set_active(0)
+
+ for dfile in file_list:
+ file_list_map[dfile.metadata['FM_UID']] = dfile.metadata['title']
+ next_dungeon.append_text( dfile.metadata['title'] )
+
+ row.pack_start(next_dungeon)
+ container.pack_start( row, False )
+
frame.add( container )
window_container.pack_start( frame, False )
@@ -240,7 +302,9 @@ class FortuneMaker(Activity):
## Make Dungeon Button
make_dungeon = gtk.Button(_("Create Dungeon"))
- make_dungeon.connect("clicked", self.create_dungeon_cb, {'name':name,'theme':theme,'width':widthspin,'height':heightspin})
+ make_dungeon.connect("clicked", self.create_dungeon_cb, {'name':name,
+ 'theme':theme,'width':widthspin, 'height':heightspin,
+ 'next_dungeon':next_dungeon, 'd_list':file_list_map})
window_container.pack_start( make_dungeon, False )
@@ -270,21 +334,26 @@ class FortuneMaker(Activity):
elif grab == 1:
theme = int(line)
grab = 2
-
elif grab == 2:
+ next = line
+ grab = 3
+ elif grab == 3:
room_str.append(line)
- self.dungeon = Dungeon( name, theme, x, y, room_str)
+ self.dungeon = Dungeon( name, theme, next, x, y, room_str)
+ self.enable_room_icons(True, False)
self.view_dungeon_stats()
def create_dungeon_cb(self, widget, data):
name = data['name'].get_text()
theme = data['theme'].get_active() #.get_active_text()
+ next = find_key( data['d_list'], data['next_dungeon'].get_active_text())
width = data['width'].get_value_as_int()
height = data['height'].get_value_as_int()
- self.dungeon = Dungeon( name, theme, width, height )
+ self.dungeon = Dungeon( name, theme, next, width, height )
+ self.enable_room_icons(True, False)
self.view_dungeon_stats()
def view_dungeon_stats(self):
@@ -309,7 +378,7 @@ class FortuneMaker(Activity):
self.set_gui_view( scroll, True )
def view_room(self):
-
+ self.enable_room_icons(True, True)
lbl_size = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
input_size = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
@@ -327,6 +396,7 @@ class FortuneMaker(Activity):
door_flags = [ _("None") ]
door_flags.extend( DOOR_FLAGS.values() )
+
for door_key in DOOR_INDEX:
row = gtk.HBox()
label = gtk.Label(DOOR_INDEX[door_key])
@@ -460,14 +530,6 @@ class FortuneMaker(Activity):
self.set_gui_view( room_center, True )
def save_room(self, widgit, data):
-
- def find_key(dic, val):
- """return the key of dictionary dic given the value"""
- try:
- return [k for k, v in dic.iteritems() if v == val][0]
- except:
- return False
-
for key in data['doors']:
value = find_key( DOOR_FLAGS, data['doors'][key].get_active_text())
if value:
@@ -506,3 +568,10 @@ if __name__ == "__main__":
#ADD SET ITEM WHEN CODED
print aroom.room_to_string()
+
+def find_key(dic, val):
+ """return the key of dictionary dic given the value"""
+ try:
+ return [k for k, v in dic.iteritems() if v == val][0]
+ except:
+ return False
diff --git a/FortuneMaker.activity/Room.py b/FortuneMaker.activity/Room.py
index 876c586..4c4741c 100644
--- a/FortuneMaker.activity/Room.py
+++ b/FortuneMaker.activity/Room.py
@@ -13,6 +13,10 @@ class Room:
self.enemy = []
self.item = []
+ self.has_doors = False
+ self.has_enemy = False
+ self.has_item = False
+
for index in DOOR_INDEX:
self.doors[index] = ['0', '0']
@@ -45,12 +49,14 @@ class Room:
if door == "0":
return
elif door in DOOR_INDEX and flag in DOOR_FLAGS:
+ self.has_doors = True
self.doors[door] = [door, flag]
else:
print "INVALID DOOR AND/OR FLAG"
def remove_door(self, door):
if door in DOOR_INDEX:
+ #TODO Check if should change has_door
self.doors[door] = ['0', '0']
else:
print "INVALID DOOR"
@@ -72,6 +78,8 @@ class Room:
if enemy == "0":
return
elif pos >= 0 and pos <=3 and enemy in ENEM_INDEX:
+ if enemy != '0':
+ self.has_enemy = True
self.enemy[pos] = enemy
else:
print "INVALID ENEMY POS OR ID"
@@ -84,6 +92,8 @@ class Room:
if id == "0":
return
elif pos >= 0 and pos <=3 and id in ITEM_INDEX and flag in ITEM_FLAGS:
+ if item != '0':
+ self.has_item = True
self.item[ pos ] = [id, flag]
else:
print "INVALID POS OR ID OR FLAG"
@@ -103,7 +113,14 @@ class Room:
return str
+ def not_empty_room(self):
+ return self.has_doors or self.has_enemy or self.has_item
+
def render_room(self):
- but = gtk.Button("(%d, %d)" %(self._x, self._y))
+ if self.not_empty_room():
+ but = gtk.Button("(%d, %d)" %(self._x, self._y))
+ else:
+ but = gtk.Button("")
+
but.set_size_request(100, 100)
return but