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 + -
显示快捷键?