예제 #1
0
def ask_new_partition(song):
  next_strophe_number = len([lyrics for lyrics in song.partitions if isinstance(lyrics, model.Lyrics) and _(u"Strophe #%s").replace(u"%s", u"") in lyrics.header]) + 1
  
  categories = []
  for category in model.VIEW_CATEGORIES:
    view_types = model.VIEWS[category]
    categories.append(
      PartitionCategory(_(category), u"", [model.Partition(None, view_type.default_instrument, view_type) for view_type in view_types])
      )
  categories.append(PartitionCategory(_(u"Lyrics"), u"", [
    model.Lyrics(None, header = _(u"Chorus")),
    model.Lyrics(None, header = _(u"Strophe #%s") % next_strophe_number),
    ]))
  categories = PartitionCategory(_(u"__add_partition__"), _(u"__add_partition_details__"), categories)

  r = [None]
  def on_validate(choice):
    if choice:
      if isinstance(choice, introsp.ObjectPack): r[0] = choice.objects[0]
      else:                                      r[0] = choice
    if not isinstance(r[0], model.TemporalData): r[0] = None
    else:                                        r[0].song = song
    
  editobj2.edit(categories, on_validate = on_validate, height = 680, expand_tree_at_level = 2)
  
  return r[0]
예제 #2
0
 def edit(self):
   import songwrite2.__editobj2__, editobj2
   
   def on_validate(obj):
     self.MIDI_USE_TEMP_FILE = self.MIDI_COMMAND.find("%s") != -1
     self.save()
     
   editobj2.edit(self, on_validate)
예제 #3
0
def ask_dirname(on_validate, path = "/"):
  filename = os.path.basename(path)
  path = os.path.dirname(path)
  file = File(path, 1, 1)
  for f in file.get_children():
    if f.filename == filename: break
  def _on_validate(o):
    if isinstance(o, File): on_validate(o.result())
  editobj2.edit(file, _on_validate, "v", selected = f)
예제 #4
0
 def on_click(self, *args):
   p = self
   while p:
     p = p.get_parent()
     if isinstance(p, gtk.Window) and p.get_modal():
       editobj2.edit(self.get_value(), undo_stack = self.undo_stack, on_validate = lambda obj: None)
       return
     
   editobj2.edit(self.get_value(), undo_stack = self.undo_stack)
예제 #5
0
  def on_insert_times(self, *args):
    class InsertTimesOptions(object):
      def __init__(self):
        self.nb_time       = 1
        self.details       = _(u"""Use negative values for deleting beats.""")
        self.icon_filename = os.path.join(globdef.DATADIR, "song.png")
      def __unicode__(self): return _(u"Insert/remove beats...")
    
    o = InsertTimesOptions()
    
    def on_validate(o):
      if (not o) or (not o.nb_time): return
      at = self.canvas.get_selected_time()
      delta = o.nb_time * 96
      removed = []
      
      def shift(delta):
        old_removed = removed[:]
        del removed[:]

        for partition in self.song.partitions:
          if isinstance(partition, model.Partition):
            i = 0
            while i < len(partition.notes):
              note = partition.notes[i]
              if note.time >= at:
                if (delta < 0) and note.time < at - delta:
                  #del partition.notes[i]
                  partition.remove(partition.notes[i])
                  removed.append((partition, note))
                  continue
                else: note.time += delta
              i += 1
              
        for partition, note in old_removed: partition.add_note(note)
        
        self.song.rythm_changed()
        
        self.canvas.render_all()
        self.canvas.update_time()
        
      def do_it  (): shift( delta)
      def undo_it(): shift(-delta)

      if o.nb_time > 0: name = _(u"insert %s beat(s)") %  o.nb_time
      else:             name = _(u"delete %s beat(s)") % -o.nb_time
      undoredo.UndoableOperation(do_it, undo_it, name, self.undo_stack)
      
    editobj2.edit(o, on_validate = on_validate)
예제 #6
0
 def on_note_arrange(self, *args):
   class ArrangeAtFretOptions(object):
     def __init__(self):
       self.fret          = 0
       self.details       = _(u"Arrange selected notes at fret?")
       self.icon_filename = os.path.join(globdef.DATADIR, "song.png")
     def __unicode__(self): return _(u"Arrange notes at fret...")
   
   o = ArrangeAtFretOptions()
   
   def on_validate(o):
     if o:
       self.canvas.arrange_selection_at_fret(o.fret)
       
   editobj2.edit(o, on_validate = on_validate)
예제 #7
0
 def open_filename(self, filename, do_check_save = 1):
   globdef.config.LAST_DIR = os.path.dirname(filename)
   
   if do_check_save and self.check_save(): return
   
   if not os.path.exists(filename):
     editobj2.edit(_(u"File does not exist!"), on_validate = lambda o: None)
   else:
     self.filename = filename
     song = model.get_song(filename)
     if isinstance(song, model.Song):
       self.set_songbook(None)
       self.set_song    (song)
     else:
       self.set_songbook(song)
       self.on_songbook_prop()
     globdef.config.add_previous_file(filename)
예제 #8
0
 def _treat_export_error(self):
   error_class, error, trace = sys.exc_info()
   sys.excepthook(error_class, error, trace)
   print
   
   if isinstance(error, model.SongwriteError):
     editobj2.edit(error)
     if isinstance(error, model.TimeError):
       self.canvas.deselect_all()
       if   error.note:
         self.canvas.partition_2_drawer[error.note.partition].select_note(error.note)
       elif error.partition and error.time:
         self.canvas.partition_2_drawer[error.partition].select_at(error.time, 0, 0)
       elif error.time:
         self.canvas.partition_2_drawer[self.song.partitions[0]].select_at(error.time, 0, 0)
   else:
     editobj2.edit(_(error.__class__.__name__) + "\n\n" + unicode(error))
예제 #9
0
  def send_edition(self):
    editobj2.GUI = "Html"
    form = editobj2.edit(self.edition.root)
    form.edit_child(self.edition.current, self.edition)
    
    self.send_html(u"""
<form name="editobj2" method="POST" action="%s">
%s
<input name="EDITOBJ2_obj" type="hidden" value="%s"/>
<br/>
<input type="submit" value="%s"/>
</form>
""" % (
  os.path.basename(sys.argv[0]),
  form.get_html(),
  self.edition.dumps(),
  self.ok_label,
  ))
예제 #10
0
파일: field.py 프로젝트: jdardon/debian-pkg
 def on_click(self, *args):
   editobj2.edit(self.get_value(), undo_stack = self.undo_stack)
예제 #11
0
descr = introsp.description(Sum)
descr.set_label("Sum")

descr = introsp.description(Substract)
descr.set_label("Substract")

descr = introsp.description(Multiply)
descr.set_label("Multiply")

descr = introsp.description(Divide)
descr.set_label("Divide")


# Hint: 

descr = introsp.description(Calculator)
descr.set_children_getter(lambda calculator: tuple(calculator.operations))
descr.set_label("Calculator")
descr.set_details("A calculator in EditObj2!")


calculator = Calculator()

if   "--gtk"    in sys.argv: editobj2.GUI = "Gtk"
elif "--tk"     in sys.argv: editobj2.GUI = "Tk"
elif "--qt"     in sys.argv: editobj2.GUI = "Qt"
elif "--qtopia" in sys.argv: editobj2.GUI = "Qtopia"

editobj2.edit(calculator).main()

예제 #12
0
  def on_insert_bars(self, *args):
    class InsertBarsOptions(object):
      def __init__(self):
        self.nb_bar        = 1
        self.details       = _(u"""Use negative values for deleting bars.""")
        self.icon_filename = os.path.join(globdef.DATADIR, "song.png")
      def __unicode__(self): return _(u"Insert/remove bars...")
    
    o = InsertBarsOptions()

    def on_validate(o):
      if (not o) or (not o.nb_bar): return
    
      mesures = self.canvas.get_selected_mesures()
      if mesures: mesure = mesures[0]
      else:       mesure = self.song.mesures[0]
      
      mesure_pos = self.song.mesures.index(mesure)
      at = mesure.time
      removed = []
      playlist_items_values = []
      
      def shift(nb_bar):
        # Add / remove mesures
        time = self.song.mesures[mesure_pos].time
        if nb_bar > 0:
          for i in range(mesure_pos, mesure_pos + nb_bar):
            self.song.mesures.insert(i, model.Mesure(self.song, time, mesure.tempo, mesure.rythm1, mesure.rythm2, mesure.syncope))
            time += mesure.duration
        else:
          del self.song.mesures[mesure_pos : mesure_pos - nb_bar]
          i = mesure_pos
          
        # Shift playlist
        if playlist_items_values:
          for item, from_mesure, to_mesure in playlist_items_values:
            item.from_mesure = from_mesure
            item.to_mesure   = to_mesure
          del playlist_items_values[:]
        else:
          for item in self.song.playlist.playlist_items:
            playlist_items_values.append((item, item.from_mesure, item.to_mesure))
            if   item.from_mesure >= mesure_pos:
              if item.from_mesure <  mesure_pos - nb_bar: item.from_mesure  = mesure_pos
              else:                                       item.from_mesure += nb_bar
            if   item.to_mesure   >= mesure_pos - 1:
              if item.to_mesure   <  mesure_pos-1-nb_bar: item.to_mesure   = mesure_pos - 1
              else:                                       item.to_mesure  += nb_bar
              
        # Shift notes
        old_removed = removed[:]
        del removed[:]

        delta = nb_bar * mesure.duration
        for partition in self.song.partitions:
          if isinstance(partition, model.Partition):
            i = 0
            while i < len(partition.notes):
              note = partition.notes[i]
              if note.time >= at:
                if (delta < 0) and note.time < at - delta:
                  partition.remove(partition.notes[i])
                  removed.append((partition, note))
                  continue
                else: note.time += delta
              i += 1
              
        for partition, note in old_removed: partition.add_note(note)

        self.song.rythm_changed() # AFTER moving the notes !!!
        
        self.canvas.render_all()
        self.canvas.update_time()
        
      def do_it  (): shift( o.nb_bar)
      def undo_it(): shift(-o.nb_bar)
      
      if o.nb_bar > 0: name = _(u"insert %s bar(s)") %  o.nb_bar
      else:            name = _(u"delete %s bar(s)") % -o.nb_bar
      undoredo.UndoableOperation(do_it, undo_it, name, self.undo_stack)
      
    editobj2.edit(o, on_validate = on_validate)
예제 #13
0
descr.set_children_getter(
  "downloads", # Children
  None, # Has children method
  lambda download_manager: Download("http://", ""), # New children method
  "insert", # Add method
  "remove", # Remove method
  1, # Reorderable
  )

descr.add_action(introsp.Action("Undo", lambda undo_stack, o: undo_stack.undo()))
descr.add_action(introsp.Action("Redo", lambda undo_stack, o: undo_stack.redo()))

if   "--gtk"    in sys.argv: editobj2.GUI = "Gtk"
elif "--tk"     in sys.argv: editobj2.GUI = "Tk"
elif "--qt"     in sys.argv: editobj2.GUI = "Qt"
elif "--qtopia" in sys.argv: editobj2.GUI = "Qtopia"


w = editobj2.edit(dm, direction = "v")

if editobj2.GUI == "Gtk":
  import gobject
  gobject.timeout_add(200, downloader) # Gtk / PyGtk does not like being used along with Python thread module
else:
  import thread; thread.start_new_thread(run_downloader, ())
 
observe.start_scanning_gui()

w.main()
예제 #14
0
    else:                           return os.path.join(os.path.dirname(sys.argv[0]), "./file.png")

  def has_children(self): return os.path.isdir(self.path)
  
  def get_children(self):
    if self.children is None:
      if os.path.isdir(self.path):
        self.children = [File(os.path.join(self.path, filename)) for filename in os.listdir(self.path) if not filename.startswith(".")]
        #self.children = range(10)
      else: self.children = []
    return self.children


descr = introsp.description(File)
descr.set_icon_filename(lambda o: o.get_icon_filename())
descr.set_field_for_attr("icon_filename", None)
descr.set_field_for_attr("size", field.IntField, unit = "Ko")
descr.set_children_getter("children", None, "has_children")



file = File(os.path.join(".."))

if   "--gtk"    in sys.argv: editobj2.GUI = "Gtk"
elif "--tk"     in sys.argv: editobj2.GUI = "Tk"
elif "--qt"     in sys.argv: editobj2.GUI = "Qt"
elif "--qtopia" in sys.argv: editobj2.GUI = "Qtopia"

editobj2.edit(file).main()

예제 #15
0
mod.submodules.append(Module(introsp))
mod.submodules.append(Module(observe))
mod.submodules.append(Module(undoredo))
mod.submodules.append(Module(editor))
mod.submodules.append(Module(field))
# mod.submodules.append(Module(treewidget))


descr = introsp.description(Module)
descr.set_field_for_attr("details", None)
descr.set_field_for_attr("icon_filename", None)
descr.set_children_getter("submodules")

# The following are not needed because EditObj2 is smart enough to guess them;
# they are kept only for documentation purpose.

# descr.set_field_for_attr("submodules", None)
# descr.set_details(lambda o: o.details)
# descr.set_label  (lambda o: unicode(o))

if "--gtk" in sys.argv:
    editobj2.GUI = "Gtk"
elif "--tk" in sys.argv:
    editobj2.GUI = "Tk"
elif "--qt" in sys.argv:
    editobj2.GUI = "Qt"
elif "--qtopia" in sys.argv:
    editobj2.GUI = "Qtopia"

editobj2.edit(mod).main()
예제 #16
0
descr = introsp.description(Security)
descr.set_label("Security")
descr.set_field_for_attr("level"           , field.EnumField({"low":0, "medium":1, "high":2, "paranoid":3}))
descr.set_field_for_attr("allow_javascript", field.BoolField)
descr.set_field_for_attr("block_popup"     , field.BoolField)

descr = introsp.description(Plugin)
descr.set_field_for_attr("active", field.BoolField)

descr = introsp.description(Config)
descr.set_label("Configuration")
descr.set_children_getter("plugins")

# The following are not needed because EditObj2 is smart enough to guess them;
# they are kept only for documentation purpose.

#descr.set_field_for_attr("identification", field.ObjectAttributeField)
#descr.set_field_for_attr("connection"    , field.ObjectAttributeField)
#descr.set_field_for_attr("security"      , field.ObjectAttributeField)
#descr.set_label  (lambda o: unicode(o))


if   "--gtk"    in sys.argv: editobj2.GUI = "Gtk"
elif "--tk"     in sys.argv: editobj2.GUI = "Tk"
elif "--qt"     in sys.argv: editobj2.GUI = "Qt"
elif "--qtopia" in sys.argv: editobj2.GUI = "Qtopia"

editobj2.edit(config).main()

예제 #17
0
 def edit(self, o, *args, **kargs):
   editobj2.edit(o, undo_stack = self.undo_stack, *args, **kargs)
예제 #18
0
    self.children = l
    
  def __unicode__(self): return "Tests"

cerealizer.register(Test)
cerealizer.register(Tests)

descr = introsp.description(Test)
descr.set_field_for_attr("nom", field.StringField)
descr.set_field_for_attr("age", field.StringField)
descr.set_field_for_attr("language", field.StringField)

descr.set_details(u"Test EditObj2 en HTML")



test1 = Test("Jiba", 29)
test2 = Test("Blam", 28)

tests = Tests([test1, test2])

editobj2.GUI = "Html"

form = editobj2.edit(tests)

s = form.get_html()

print s

open("/tmp/t.html", "w").write(s)
예제 #19
0
def _edit_in_new_window_action(undo_stack, o):
  import editobj2.editor
  editobj2.edit(o, undo_stack = undo_stack)
예제 #20
0
파일: login.py 프로젝트: sdemircan/editobj2
descr = introsp.description(User)
descr.set_field_for_attr("icon_filename", None)
descr.set_field_for_attr("session", field.EnumField([u"WindowMaker", u"FluxBox", u"MacOS X", u"Gnome", u"KDE"]))
descr.set_field_for_attr("language", field.EnumField([u"Français", u"Italiano", u"English", u"Esperanto"], long_list = 1))

# The following are not needed because EditObj2 is smart enough to guess them;
# they are kept only for example purpose.
#descr.set_field_for_attr("password", field.PasswordField)
#descr.set_icon_filename(lambda o: o.icon_filename)

descr = introsp.description(UserSelection)
descr.set_children_getter("users")
descr.set_details(u"1) Choose a user\n2) Type a valid password\n3) Login!")

descr.add_action(introsp.Action("Undo", lambda o: undoredo.stack.undo()))
descr.add_action(introsp.Action("Redo", lambda o: undoredo.stack.redo()))


def on_validate(user):
  if isinstance(user, User):
    print "%s has loged in in with password '%s', language '%s' and session type '%s'." % (user.login, user.password, user.language, user.session)
  else:
    print "User has canceled."

if   "--gtk"    in sys.argv: editobj2.GUI = "Gtk"
elif "--tk"     in sys.argv: editobj2.GUI = "Tk"
elif "--qt"     in sys.argv: editobj2.GUI = "Qt"
elif "--qtopia" in sys.argv: editobj2.GUI = "Qtopia"

editobj2.edit(user_selection, on_validate = on_validate).main()