/*-------------------------------------------------------------------- * 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; } }
/*-------------------------------------------------------------------- * show_proc * */ static void do_show_proc(const event &, ProcedureDefinition* proc) { vnode *vn = create_vnode( proc ); post_event(event(vn, SELECTION, 0)); }
/*-------------------------------------------------------------------- * show_fse * */ static void do_show_fse( const event &, FileBlock *file) { vnode *vn = create_vnode( file ); post_event(event(vn, SELECTION, 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(); }