mlhim-specs-dev team mailing list archive
-
mlhim-specs-dev team
-
Mailing list archive
-
Message #00793
[Branch ~cdd-dev/cdd/trunk] Rev 304: Enabled open, save and save_as in menu.
------------------------------------------------------------
revno: 304
committer: Eduardo Ribeiro <xcesar@xxxxxxxxx>
branch nick: devel
timestamp: Thu 2013-01-31 17:11:59 -0200
message:
Enabled open, save and save_as in menu.
modified:
src/2.0/aux_gui.py
src/2.0/cdd.py
src/2.0/container.py
src/2.0/metadata.py
--
lp:cdd
https://code.launchpad.net/~cdd-dev/cdd/trunk
Your team MLHIM Specifications Developers is subscribed to branch lp:cdd.
To unsubscribe from this branch go to https://code.launchpad.net/~cdd-dev/cdd/trunk/+edit-subscription
=== modified file 'src/2.0/aux_gui.py'
--- src/2.0/aux_gui.py 2013-01-30 14:24:46 +0000
+++ src/2.0/aux_gui.py 2013-01-31 19:11:59 +0000
@@ -9,6 +9,13 @@
from container import container
+# Debug purposes !
+import gettext
+gettext.bindtextdomain('CDD','locale/en')
+gettext.textdomain('CDD')
+_ = gettext.gettext
+# Debug purposes !
+
class EditableListControl(wx.ListCtrl,
listmix.ListCtrlAutoWidthMixin,
listmix.TextEditMixin):
@@ -37,6 +44,11 @@
def get_pydata(self, item):
return self.GetItemPyData(item)
+
+ def set_pydata(self, item, number):
+ data = wx.TreeItemData()
+ data.SetData(number)
+ self.SetItemData(item, data)
def setup_tree(self):
self.DeleteAllItems()
@@ -50,8 +62,21 @@
container.insert_node(1, ['definition', None, None, set()])
self.ExpandAll()
+ #self.SelectItem(metadata)
return [root, metadata, definition]
+
+ def construct_tree(self, cs):
+ r, m, definition = self.setup_tree()
+
+ self._construct_tree(cs, definition, 1)
+ self.ExpandAll()
+ return [r, m, definition]
+ def _construct_tree(self, cs, item, key):
+ self.set_pydata(item, key)
+ for child in cs[key][3]: # for each child
+ result = self.AppendItem(item, cs[child][0])
+ self._construct_tree(cs, result, child)
###########################################################################
## Misc functions - Maybe put them inside a class in the future
@@ -81,6 +106,38 @@
return l2
+def save_file_diag(self, filename, dir):
+ dlg = wx.FileDialog(
+ self, message="Save as...",
+ defaultDir=dir,
+ defaultFile=filename,
+ style=wx.SAVE
+ )
+
+ if dlg.ShowModal() == wx.ID_OK:
+ path = dlg.GetPath()
+ else:
+ return None
+
+ dlg.Destroy()
+ return path
+
+def open_file_diag(self, dir, wildcard='All files (*.*)|*.*'):
+ dlg = wx.FileDialog(
+ self, message="Choose a file",
+ defaultDir=dir,
+ defaultFile='',
+ wildcard=wildcard,
+ style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR
+ )
+
+ if dlg.ShowModal() == wx.ID_OK:
+ path = dlg.GetPath()
+ else:
+ return None
+
+ dlg.Destroy()
+ return path
def get_path(self):
#wildcard = "CDD files (*.cdd)|*.cdd|" \
=== modified file 'src/2.0/cdd.py'
--- src/2.0/cdd.py 2013-01-30 14:24:46 +0000
+++ src/2.0/cdd.py 2013-01-31 19:11:59 +0000
@@ -42,7 +42,7 @@
def init_things(self):
# Setup the tree
- self.root, self.metadata, self.definition = self.tree_ctrl_ccd.setup_tree()
+ self.root, self.metadata_item, self.definition_item = self.tree_ctrl_ccd.setup_tree()
# Setup the metadata
self.setup_config()
@@ -59,8 +59,10 @@
# except:
# pass
+ self.tree_ctrl_ccd.SelectItem(self.metadata_item)
+
def get_definition_child(self):
- child, cookie = self.tree.GetFirstChild(self.definition)
+ child, cookie = self.tree.GetFirstChild(self.definition_item)
txt = self.tree.GetItemText(child)
return txt
@@ -78,11 +80,13 @@
# Hack to make the metadata panel before it is called
# We need to make it before to be able to get the info from it
# at the program start
- self.dummy_panel = wx.Panel(self.panel_top_right, -1)
+ self.dummy_panel = wx.Panel(self, -1)
self.dummy_panel.Hide()
self.metadata = MetadataPanel(self.dummy_panel)
self.metadata.info = info
self.metadata.set_meta_info()
+ #self.metadata.Destroy()
+ #self.dummy_panel.Destroy()
def evt_button_remove(self, event): # wxGlade: MainFrame.<event_handler>
try:
@@ -127,9 +131,14 @@
c = self.panel_top_right.GetChildren()
if c:
for i in c:
- i.Destroy()
+ # HACK to not destroy metadata panel
+ # I should really change this on the next version
+ if i.__str__().startswith("<metadata.MetadataPanel"):
+ self.metadata.Reparent(self.dummy_panel)
+ else:
+ i.Destroy()
- item = event.GetItem()
+ item = event.GetItem()
selTextRaw = self.tree_ctrl_ccd.GetItemText(item)
selText = selTextRaw.split(' ')[0].strip()
@@ -152,10 +161,13 @@
self.button_ok.Hide()
self.button_remove.Hide()
self.Layout()
- choice = MetadataPanel(self.panel_top_right)
+ self.metadata.Reparent(self.panel_top_right)
+ self.metadata.SetClientSize(self.metadata.GetParent().GetSize())
+ #choice = MetadataPanel(self.panel_top_right)
# Necessary for exporting the metadata
- choice.info = info
+ self.metadata.info = info
+ #choice.info = info
elif selText == "definition":
@@ -285,13 +297,43 @@
not_implemented_diag(self)
def file_open(self, event): # wxGlade: MainFrame.<event_handler>
- not_implemented_diag(self)
+ wildcard = \
+ "Pickle files (*.pickle)|*.pickle|" \
+ "All files (*.*)|*.*"
- def file_save(self, event): # wxGlade: MainFrame.<event_handler>
- not_implemented_diag(self)
+ path = self.config_dialog.config.get('DEFAULT', 'workspace')
+
+ filename = open_file_diag(self, path, wildcard=wildcard)
+ if not filename: return
+ arq = open(filename, 'rb')
+ structure = container.load_structure(arq)
+ self.root, self.metadata_item, self.definition_item = self.tree_ctrl_ccd.construct_tree(structure)
+ container.set(structure)
+ md = container.get_metadata()
+ self.metadata.set_from_dict(md)
+ self.tree_ctrl_ccd.SelectItem(self.metadata_item)
+
+ def file_save(self, event, ask=False): # wxGlade: MainFrame.<event_handler>
+ path = self.config_dialog.config.get('DEFAULT', 'workspace')
+ try:
+ self.first_save
+ if ask or not self.pickle_name:
+ self.pickle_name = save_file_diag(self, 'CDD.pickle', path)
+ except AttributeError, e:
+ self.pickle_name = save_file_diag(self, 'CDD.pickle', path)
+
+ if self.pickle_name:
+ self.first_save = False
+ else:
+ return
+
+ arq = open(self.pickle_name, 'wb')
+ md = self.metadata.get_as_dict()
+ container.set_metadata(md)
+ container.save_structure(arq)
def file_save_as(self, event): # wxGlade: MainFrame.<event_handler>
- not_implemented_diag(self)
+ self.file_save(None, ask=True)
def file_validate(self, event): # wxGlade: MainFrame.<event_handler>
not_implemented_diag(self)
=== modified file 'src/2.0/container.py'
--- src/2.0/container.py 2013-01-30 14:24:46 +0000
+++ src/2.0/container.py 2013-01-31 19:11:59 +0000
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
+import pickle
from collections import OrderedDict
class Container(object):
@@ -9,6 +10,9 @@
def reset(self):
self.structure = OrderedDict()
+ def set(self, structure):
+ self.structure = structure
+
def exists(self, key):
return self.structure.has_key(key)
@@ -44,4 +48,17 @@
self.structure.pop(key)
+ def save_structure(self, fd):
+ pickle.dump(self.structure, fd)
+
+ @classmethod
+ def load_structure(self, fd):
+ return pickle.load(fd)
+
+ def set_metadata(self, md):
+ self.structure['metadata'] = md
+
+ def get_metadata(self):
+ return self.structure.get('metadata')
+
container = Container()
=== modified file 'src/2.0/metadata.py'
--- src/2.0/metadata.py 2013-01-30 14:24:46 +0000
+++ src/2.0/metadata.py 2013-01-31 19:11:59 +0000
@@ -7,6 +7,19 @@
class MetadataPanel(cdd_gui.MetadataPanel):
def __init__(self, *args, **kwds):
cdd_gui.MetadataPanel.__init__(self, *args, **kwds)
+
+ self.title = ''
+ self.description = ''
+ self.creator = ''
+ self.creator_email = ''
+ self.contributor = ''
+ self.publisher = ''
+ self.subject = ''
+ self.source = ''
+ self.rights = ''
+ self.relation = ''
+ self.coverage = ''
+ self.language = ''
self.info = None
self.init_config()
@@ -29,7 +42,7 @@
'description' : '',
'creator' : '',
'creator_email' : '',
- 'contributor' : '',
+ 'contributors' : '',
'publisher' : '',
'subject' : '',
'source' : '',
@@ -49,10 +62,13 @@
def read_config(self):
self.config.read(self.configname)
+ self.load_fields()
self.set_panel_configs()
def save_config(self, event=None): # wxGlade: MetadataPanel.<event_handler>
self.get_panel_configs()
+
+ self.store_fields()
try:
with open(self.configname, 'wb') as configfile:
configfile.write('# Concept Definition Designer Configuration\n# Do not edit the text to the left of the equal symbol (=)\n\n')
@@ -70,7 +86,7 @@
description = self.text_ctrl_description.GetValue().encode('utf8')
creator = self.text_ctrl_creator.GetValue().encode('utf8')
creator_email = self.text_ctrl_creator_email.GetValue().encode('utf8')
- contributor = self.text_ctrl_contributors.GetValue().encode('utf8')
+ contributors = self.text_ctrl_contributors.GetValue().encode('utf8')
publisher = self.text_ctrl_publisher.GetValue().encode('utf8')
subject = self.text_ctrl_subject.GetValue().encode('utf8')
@@ -84,42 +100,109 @@
tempo = self.datepicker_ctrl_date.GetValue()
date = '{Y}-{M:02}-{D:02}'.format(Y=tempo.GetYear(), M=tempo.GetMonth()+1, D=tempo.GetDay())
- self.info.get_metadata_info(title, description, date, creator, creator_email, contributor, language, publisher, subject, source, rights, relation, coverage)
+ self.info.get_metadata_info(title, description, date, creator, creator_email, contributors, language, publisher, subject, source, rights, relation, coverage)
def get_panel_configs(self):
- self.config.set('DEFAULT', 'title', self.text_ctrl_title.GetValue().encode('utf8'))
- self.config.set('DEFAULT', 'description', self.text_ctrl_description.GetValue().encode('utf8'))
- self.config.set('DEFAULT', 'creator', self.text_ctrl_creator.GetValue().encode('utf8'))
- self.config.set('DEFAULT', 'creator_email', self.text_ctrl_creator_email.GetValue().encode('utf8'))
- self.config.set('DEFAULT', 'contributor', self.text_ctrl_contributors.GetValue().encode('utf8'))
-
- self.config.set('DEFAULT', 'publisher', self.text_ctrl_publisher.GetValue().encode('utf8'))
- self.config.set('DEFAULT', 'subject', self.text_ctrl_subject.GetValue().encode('utf8'))
- self.config.set('DEFAULT', 'source', self.text_ctrl_source.GetValue().encode('utf8'))
- self.config.set('DEFAULT', 'rights', self.text_ctrl_rights.GetValue().encode('utf8'))
- self.config.set('DEFAULT', 'relation', self.text_ctrl_relation.GetValue().encode('utf8'))
- self.config.set('DEFAULT', 'coverage', self.text_ctrl_coverage.GetValue().encode('utf8'))
-
- self.config.set('DEFAULT', 'language', str(self.choice_lang.GetSelection()))
+ self.title = self.text_ctrl_title.GetValue().encode('utf8')
+ self.description = self.text_ctrl_description.GetValue().encode('utf8')
+ self.creator = self.text_ctrl_creator.GetValue().encode('utf8')
+ self.creator_email = self.text_ctrl_creator_email.GetValue().encode('utf8')
+ self.contributors = self.text_ctrl_contributors.GetValue().encode('utf8')
+
+ self.publisher = self.text_ctrl_publisher.GetValue().encode('utf8')
+ self.subject = self.text_ctrl_subject.GetValue().encode('utf8')
+ self.source = self.text_ctrl_source.GetValue().encode('utf8')
+ self.rights = self.text_ctrl_rights.GetValue().encode('utf8')
+ self.relation = self.text_ctrl_relation.GetValue().encode('utf8')
+ self.coverage = self.text_ctrl_coverage.GetValue().encode('utf8')
+
+ self.language = str(self.choice_lang.GetSelection())
def set_panel_configs(self):
- self.text_ctrl_title.SetValue(self.config.get('DEFAULT', 'title'))
- self.text_ctrl_description.SetValue(self.config.get('DEFAULT', 'description'))
- self.text_ctrl_creator.SetValue(self.config.get('DEFAULT', 'creator'))
- self.text_ctrl_creator_email.SetValue(self.config.get('DEFAULT', 'creator_email'))
- self.text_ctrl_contributors.SetValue(self.config.get('DEFAULT', 'contributor'))
-
- self.text_ctrl_publisher.SetValue(self.config.get('DEFAULT', 'publisher'))
- self.text_ctrl_subject.SetValue(self.config.get('DEFAULT', 'subject'))
- self.text_ctrl_source.SetValue(self.config.get('DEFAULT', 'source'))
- self.text_ctrl_rights.SetValue(self.config.get('DEFAULT', 'rights'))
- self.text_ctrl_relation.SetValue(self.config.get('DEFAULT', 'relation'))
- self.text_ctrl_coverage.SetValue(self.config.get('DEFAULT', 'coverage'))
-
- self.choice_lang.SetSelection(int(self.config.get('DEFAULT', 'language')))
-
+ self.text_ctrl_title.SetValue(self.title)
+ self.text_ctrl_description.SetValue(self.description)
+ self.text_ctrl_creator.SetValue(self.creator)
+ self.text_ctrl_creator_email.SetValue(self.creator_email)
+ self.text_ctrl_contributors.SetValue(self.contributors)
+
+ self.text_ctrl_publisher.SetValue(self.publisher)
+ self.text_ctrl_subject.SetValue(self.subject)
+ self.text_ctrl_source.SetValue(self.source)
+ self.text_ctrl_rights.SetValue(self.rights)
+ self.text_ctrl_relation.SetValue(self.relation)
+ self.text_ctrl_coverage.SetValue(self.coverage)
+
+ self.choice_lang.SetSelection(int(self.language))
+
+ def load_fields(self):
+ self.title = self.config.get('DEFAULT', 'title')
+ self.description = self.config.get('DEFAULT', 'description')
+ self.creator = self.config.get('DEFAULT', 'creator')
+ self.creator_email = self.config.get('DEFAULT', 'creator_email')
+ self.contributors = self.config.get('DEFAULT', 'contributors')
+
+ self.publisher = self.config.get('DEFAULT', 'publisher')
+ self.subject = self.config.get('DEFAULT', 'subject')
+ self.source = self.config.get('DEFAULT', 'source')
+ self.rights = self.config.get('DEFAULT', 'rights')
+ self.relation = self.config.get('DEFAULT', 'relation')
+ self.coverage = self.config.get('DEFAULT', 'coverage')
+
+ self.language = self.config.get('DEFAULT', 'language')
+
+ def store_fields(self):
+ self.config.set('DEFAULT', 'title', self.title)
+ self.config.set('DEFAULT', 'description', self.description)
+ self.config.set('DEFAULT', 'creator', self.creator)
+ self.config.set('DEFAULT', 'creator_email', self.creator_email)
+ self.config.set('DEFAULT', 'contributors', self.contributors)
+
+ self.config.set('DEFAULT', 'publisher', self.publisher)
+ self.config.set('DEFAULT', 'subject', self.subject)
+ self.config.set('DEFAULT', 'source', self.source)
+ self.config.set('DEFAULT', 'rights', self.rights)
+ self.config.set('DEFAULT', 'relation', self.relation)
+ self.config.set('DEFAULT', 'coverage', self.coverage)
+
+ self.config.set('DEFAULT', 'language', str(self.language))
+
+
+ def get_as_dict(self):
+ md = dict(
+ title = self.title,
+ description = self.description,
+ creator = self.creator,
+ creator_email = self.creator_email,
+ contributor = self.contributor,
+ publisher = self.publisher,
+ subject = self.subject,
+ source = self.source,
+ rights = self.rights,
+ relation = self.relation,
+ coverage = self.coverage,
+ language = self.language,
+ )
+ return md
+
+ def set_from_dict(self, dicto):
+ self.title = dicto['title']
+ self.description = dicto['description']
+ self.creator = dicto['creator']
+ self.creator_email = dicto['creator_email']
+ self.contributor = dicto['contributor']
+ self.publisher = dicto['publisher']
+ self.subject = dicto['subject']
+ self.source = dicto['source']
+ self.rights = dicto['rights']
+ self.relation = dicto['relation']
+ self.coverage = dicto['coverage']
+ self.language = dicto['language']
+
+ self.set_panel_configs()
+
def enable_ok(self, event): # wxGlade: MetadataPanel.<event_handler>
self.button_ok.Enable()
+
# end of class MetadataPanel