コード例 #1
0
/*--------------------------------------------------------------------
 * remove_annote
 *
 */
static void
do_remove_annote(const event &, void *)
{
  vnode *vn = vman->get_selection();

  if (vn &&
     ((SuifObject*)vn->get_object())->isKindOf(Annote::get_class_name())) {
    Annote *ann = (Annote *) vn->get_object();
    AnnotableObject *parent = (AnnotableObject*) ann->get_parent();
    ProcedureDefinition *proc = get_procedure_definition( ann );
    parent->remove_annote(ann);


    delete vn;
    delete ann;

    /* post event, notifying that the object has been modified */

    if ( proc ) {
      vnode *p = create_vnode(proc);
      post_event(event(p, PROC_MODIFIED, 0));
    } else {
      FileBlock *fb = get_file_block( parent );
      if (fb) {
        post_event(event(  create_vnode(fb), FSE_MODIFIED, 0));
      } else {
        assert(false);		// this should not happen..
      }
    }
  } else {
    display_message(0, "No annote selected. Please select an annote first.");
    return;
  }
}
コード例 #2
0
/*--------------------------------------------------------------------
 * show_proc
 *
 */
static void do_show_proc(const event &, ProcedureDefinition* proc)
{
  vnode *vn = create_vnode( proc );
  post_event(event(vn, SELECTION, 0));
}
コード例 #3
0
/*--------------------------------------------------------------------
 * show_fse
 *
 */
static void do_show_fse( const event &, FileBlock *file)
{
  vnode *vn = create_vnode( file );
  post_event(event(vn, SELECTION, 0));
}
コード例 #4
0
/*--------------------------------------------------------------------
 * info_viewer::view
 *
 */
void info_viewer::view(vnode* vn)
{
  if ( !vn ) return;

  text->clear();
  text->tag_begin( vn );
  fstream& fout = text->fout();
  char *tag = vn->get_tag();

  text->tag_style(BOLD_BEGIN);
  fout << "Object: 0x" << (void*)vn->get_object() << '(' << tag << ")\n";
  text->tag_style(BOLD_END);

  /* properties */
  text->tag_style( BOLD_BEGIN );
  fout << "Properties:\n";
  text->tag_style( BOLD_END );

  list<vprop *> *plist = vn->get_prop_list();
  if ( !plist || plist->empty() ) {
    fout << "<No properties defined>\n";
  } else {
    for ( s_count_t i = 0; i < plist->size(); i++ ) {
      vprop* p = (*plist)[i];
      if ( p->name() ) {
	  char* desc = p->description();
	  fout << '[' << p->name() << "]: " << (desc ? desc : "") << endl;
      }
    }
  }
  fout << endl;

  SuifObject* obj;
  if ( tag == tag_suif_object ) {
    obj = (SuifObject*) vn->get_object();
  } else if ( tag == tag_code_fragment ) {
      code_fragment* f = (code_fragment*) vn->get_object();
      obj = (SuifObject*) f->node();
  } else {
      suif_assert_message(false, ("Unknown tag"));
  }

  text->tag_style( BOLD_BEGIN );
  const MetaClass *m = obj->get_meta_class();
  fout << "Suif object type: " << m->get_class_name().c_str() << "\n\n";
  text->tag_style( BOLD_END );

  // if obj is a file_set_block => print the whole file_set_block
  //   in all other cases just print the obj
  formater f(suif_env, text, -1 ); //is_file_set_block( obj ) ? -1 : 1 );

  if ( is_kind_of<FileSetBlock>( obj ) ) {
    // print only the annotes
    FileSetBlock *fb = to<FileSetBlock>(obj);
    Iter<Annote*> annote_iter = fb->get_annote_iterator();
    for ( int i = 0; i < (int)fb->get_annote_count(); i++ ) {
      Annote* ann = annote_iter.current();
      annote_iter.next();
      vn = create_vnode( ann );
      text->tag_begin( vn );
      f.print_zot( ann, fout );
      text->tag_end( vn );
      fout << endl;
    }
  } else {
    f.print_zot( obj, fout );
    fout << endl;
  } 

  text->tag_end( vn );
  text->update();
}