reference_editor.cpp
来自「ncbi源码」· C++ 代码 · 共 737 行 · 第 1/2 页
CPP
737 行
ref_class->menu()[0].do_callback(ref_class, (void *)1); } }void CReferenceEntryForm::ActivateRefClassMenu(Fl_Widget* w, void *u){ CReferenceEntryForm* ref = (CReferenceEntryForm*) w->user_data(); Fl_Choice* ref_class = ref->m_Class; for (int i = 1; ref_class->text(i); i++) { ref_class->mode(i, 0); } // the default Ref Class is Journal (1) int menu_value = 1; if (ref->m_FlatPub.m_PubClass != SEditorFlatPub::eUnpub) { menu_value = SRefClassMenu.FindEntry (ref->m_FlatPub.m_PubClass); } ref_class->value(menu_value); // Issue the callback for a Ref Class change if (ref_class->menu()[menu_value].callback()) { // user data is 1 to so that a Show will // be issued (look in cb_PubUI and cb_UnpubUI) ref_class->menu()[menu_value].do_callback(ref_class, (void *)1); }}SMenuEntryInfo StandardRemarkEntries [] = { { " ", 0 }, { "AA by submitter", 0, &CReferenceEntryForm::cb_StandardRemark}, { "NT by submitter", 0, &CReferenceEntryForm::cb_StandardRemark}, { "NT and AA by submitter", 0, &CReferenceEntryForm::cb_StandardRemark}, { "AA by database", 0, &CReferenceEntryForm::cb_StandardRemark}, { "NT by database", 0, &CReferenceEntryForm::cb_StandardRemark}, { "NT and AA by database", 0, &CReferenceEntryForm::cb_StandardRemark}, { 0, 0, &CReferenceEntryForm::cb_StandardRemark}};CEntryFormMenu SStandardRemarkMenu(StandardRemarkEntries);void CReferenceEntryForm::cb_UnpubUI(Fl_Widget* w, void *u){ CReferenceEntryForm *ref_ui = (CReferenceEntryForm *) (w->user_data()); ref_ui->x_UnpubUI(); // If user data is set, issue a Show to resize // and redraw the window. // The Show will be issued if the call back was // triggered by a Pub Class menu change. The redraw // is not issued if called from the constructor. if (u) { ref_ui->Show(); }}void CReferenceEntryForm::x_UnpubUI (){ string title; string remark; SEditorFlatPub& flatpub = m_FlatPub; CPubdesc* pubdesc = flatpub.m_Pubdesc; CPub* pub = flatpub.m_Pub; x_Clear(); auto_ptr<CEntryFormTable> t(new CEntryFormTable(GetFormWidget()->GetFormWidth(), 5)); t->AddTitleRow ("Publication Information"); if (flatpub.m_CitType == CPub::e_Gen) { const CCit_gen& g = pub->GetGen(); m_Title = t->AddInputRow("Title", " "); if (g.IsSetTitle() && m_Title) { m_Title->value(g.GetTitle().c_str()); } } m_Remark = t->AddInputRow("Remark", " "); if (pubdesc->IsSetComment() && m_Remark) { m_Remark->value(pubdesc->GetComment().c_str()); } m_StandardRemark = t->AddMenuRow("Use Standard Remark", SStandardRemarkMenu, 0, this); t->End(); AddEditWidget(t.release()); x_AuthUI(flatpub); x_DateUI(flatpub);}void CReferenceEntryForm::cb_PubUI(Fl_Widget* w, void *u){ CReferenceEntryForm *ref_ui = (CReferenceEntryForm *) (w->user_data()); ref_ui->x_PubUI(); // If user data is set, issue a Show to resize // and redraw the window. // The Show will be issued if the call back was // triggered by a Pub Class menu change. The redraw // is not issued if called from the constructor. if (u) { ref_ui->Show(); }}void CReferenceEntryForm::x_PubUI(){ string data = " "; string remark; x_Clear(); CPubdesc* pubdesc = m_FlatPub.m_Pubdesc; auto_ptr<CEntryFormTable> t(new CEntryFormTable(GetFormWidget()->GetFormWidth(), 5)); t->AddTitleRow ("Publication Information"); if (m_FlatPub.m_Title) { try { data = m_FlatPub.m_Title->GetTitle(); } catch (...) { data = " "; } } m_Title = t->AddInputRow("Title", data.c_str()); m_Remark = t->AddInputRow("Remark", " "); if (pubdesc->IsSetComment() && m_Remark) { m_Remark->value(pubdesc->GetComment().c_str()); } m_StandardRemark = t->AddMenuRow("Use Standard Remark", SStandardRemarkMenu, 0, this); t->End(); AddEditWidget(t.release());// SEditorFlatPub::EPubClass pub_class; int pub_class = RefClassEntries[m_Class->value()].m_Value; switch (pub_class) { case SEditorFlatPub::eJournal: x_AuthUI(m_FlatPub); x_JournalUI(); x_DateUI(m_FlatPub); break; default: break; }}void CReferenceEntryForm::x_JournalUI(){ string data; string title = " "; string volume = " "; string issue = " "; string pages = " "; string muid = " "; string pmid = " "; auto_ptr<CEntryFormTable> t(new CEntryFormTable(GetFormWidget()->GetFormWidth(), 5)); t->AddTitleRow ("Journal Information"); if (m_FlatPub.m_FromTitle) { try { title = m_FlatPub.m_FromTitle->GetTitle(); } catch (...) { title = " "; } } CImprint* imp = m_FlatPub.m_Imprint; if (imp) { if (imp->IsSetVolume()) { volume = imp->GetVolume(); } if (imp->IsSetIssue()) { issue = imp->GetIssue(); } if (imp->IsSetPages()) { pages = imp->GetPages(); } } if (m_FlatPub.m_Muid) { muid = NStr::IntToString(m_FlatPub.m_Muid); } if (m_FlatPub.m_Pmid) { pmid = NStr::IntToString(m_FlatPub.m_Pmid); } m_Title = t->AddInputRow("Title", title.c_str(), CEntryFormTable::eSingleLine); m_Volume = t->AddInputRow("Volume", volume.c_str(), CEntryFormTable::eSingleLine); m_Issue = t->AddInputRow("Issue", issue.c_str(), CEntryFormTable::eSingleLine); m_Pages = t->AddInputRow("Pages", pages.c_str(), CEntryFormTable::eSingleLine); m_Muid = t->AddInputRow("muid", muid.c_str(), CEntryFormTable::eInteger); m_Pmid = t->AddInputRow("pmid", pmid.c_str(), CEntryFormTable::eInteger); t->End(); AddEditWidget(t.release());}void CReferenceEntryForm::cb_StandardRemark (Fl_Widget* w, void *u) { CReferenceEntryForm *ref_ui = (CReferenceEntryForm *) (w->user_data()); Fl_Choice* menu = ref_ui->m_StandardRemark; const char* std_remark = menu->menu()[menu->value()].label(); Fl_Input* input = ref_ui->m_Remark; CNcbiStrstream new_remark; new_remark << input->value() << " " << std_remark; input->value(new_remark.str());}SMenuEntryInfo DateMonthEntries [] = { { " ", 0 }, { "January", 1 }, { "February", 2 }, { "March", 3 }, { "April", 4 }, { "May", 5 }, { "June", 6 }, { "July", 7 }, { "August", 8 }, { "September", 9 }, { "October", 10 }, { "November", 11 }, { "December", 12 }, { 0, 0 }};CEntryFormMenu SDateMonthMenu(DateMonthEntries);void CReferenceEntryForm::x_DateUI(SEditorFlatPub& flatpub){ CDate* date = flatpub.m_Date; auto_ptr<CEntryFormTable> t (new CEntryFormTable(GetFormWidget()->GetFormWidth(), 5)); t->AddTitleRow("Date"); m_Year = t->AddInputRow("Year", " ", CEntryFormTable::eInteger); m_Month = t->AddMenuRow("Month", SDateMonthMenu, 0); m_Day = t->AddInputRow("Day", " ", CEntryFormTable::eInteger); t->End(); AddEditWidget(t.release()); if (date == 0) return; if (date->IsStd()) { const CDate_std& std_date = date->GetStd(); m_Year->value(NStr::IntToString(std_date.GetYear()).c_str()); if (std_date.IsSetMonth()) { m_Month->value(std_date.GetMonth()); } if (std_date.IsSetDay()) { m_Day->value(NStr::IntToString(std_date.GetDay()).c_str()); } }}void CReferenceEntryForm::x_AuthUI(SEditorFlatPub& flatpub){ CAuth_list* auth_list = flatpub.m_Auth_list; auto_ptr<CAuthEntryFormTable> t(new CAuthEntryFormTable(GetFormWidget()->GetFormWidth(), 5)); t->AddTitleRow("Authors"); if (auth_list && auth_list->GetNames().IsStd()) { ITERATE (CAuth_list::C_Names::TStd, iter, auth_list->GetNames().GetStd()) { const CPerson_id& id = (*iter)->GetName(); if (id.IsName()) { const CName_std& name = id.GetName(); Fl_Group* row = t->AddAuthRow(); if (name.IsSetFirst()) { t->FirstName(row, name.GetFirst().c_str()); if (name.IsSetMiddle()) { t->MiddleName(row, name.GetMiddle().c_str()); } } else if (name.IsSetInitials()) { const char* initials = name.GetInitials().c_str(); int len = name.GetInitials().size(); char letter[2] = " "; if (len) { *letter = *initials; t->FirstName(row, letter); if (len == 2 && initials[1] == '.') { *letter = initials[1]; t->MiddleName(row, letter); } else if (len >= 3) { *letter = initials[2]; t->MiddleName(row, letter); } } } t->LastName(row, name.GetLast().c_str()); } } } t->AddButtonRow(); t->End(); m_Auth_list = t.get(); AddEditWidget(t.release());} void CReferenceEntryForm::x_Clear(){ while (GetFormWidget()->GetNumEntries() > 1) { GetFormWidget()->RemoveWidget(1); } /** Fl_Pack* edit_pack = GetEditPack(); // remove and delete all the form tables in the entry form // except the Publication type (the first form table). while (edit_pack->children() > 1) { Fl_Widget* w = edit_pack->child(1); edit_pack->remove(w); delete w; } **/} END_NCBI_SCOPE
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?