📄 pager.cpp
字号:
CNCBINode* CPager::GetPageInfo(void) const{ if (m_ItemCount <= m_PageSize) { return 0; } int lastPage = (m_ItemCount - 1) / m_PageSize; return new CHTMLPlainText( "Page " + NStr::IntToString(m_DisplayPage + 1) + " of " + NStr::IntToString(lastPage + 1));}CNCBINode* CPager::GetItemInfo(void) const{ CHTML_div* node = new CHTML_div; node->SetClass("medium2"); if (m_ItemCount == 0) { node->AppendChild(new CHTMLPlainText("0 items found")); } else { int firstItem = m_DisplayPage * m_PageSize + 1; int endItem = min((m_DisplayPage + 1) * m_PageSize, m_ItemCount); if (firstItem != endItem) { node->AppendChild(new CHTMLPlainText("Items " + NStr::IntToString(firstItem) + "-" + NStr::IntToString(endItem))); } else { node->AppendChild(new CHTMLPlainText("Item " + NStr::IntToString(firstItem)) ); } node->AppendChild(new CHTMLPlainText(" of " + NStr::IntToString(m_ItemCount))); } return node;}CNCBINode* CPager::GetPagerView(const string& imgDir, const int imgX, const int imgY, const string& js_suffix /*kEmptyStr*/) const{ if (m_ItemCount <= m_PageSize) { return 0; } switch (m_view) { case eButtons: return new CPagerViewButtons(*this, js_suffix); default: break; } // Default old behavor return new CPagerView(*this, imgDir, imgX, imgY);}CPagerView::CPagerView(const CPager& pager, const string& imgDir, const int imgX, const int imgY) : m_ImagesDir(imgDir), m_ImgSizeX(imgX), m_ImgSizeY(imgY), m_Pager(pager){ return;}void CPagerView::AddImageString(CNCBINode* node, int number, const string& prefix, const string& suffix){ string s = NStr::IntToString(number + 1); string name = CPager::KParam_Page + s; CHTML_image* img; for ( size_t i = 0; i < s.size(); ++i ) { img = new CHTML_image(name, m_ImagesDir + prefix + s[i] + suffix, 0); img->SetAttribute("Alt", name); if ( m_ImgSizeX ) img->SetWidth( m_ImgSizeX ); if ( m_ImgSizeY ) img->SetHeight( m_ImgSizeY ); node->AppendChild( img ); }}void CPagerView::AddInactiveImageString(CNCBINode* node, int number, const string& prefix, const string& suffix){ string s = NStr::IntToString(number + 1); CHTML_img* img; for ( size_t i = 0; i < s.size(); ++i ) { img = new CHTML_img(m_ImagesDir + prefix + s[i] + suffix); img->SetAttribute("Alt", s); if( m_ImgSizeX ) img->SetWidth( m_ImgSizeX ); if( m_ImgSizeY ) img->SetHeight( m_ImgSizeY ); node->AppendChild( img ); }}void CPagerView::CreateSubNodes(){ int column = 0; int pageSize = m_Pager.m_PageSize; int blockSize = m_Pager.m_PageBlockSize; int currentPage = m_Pager.m_DisplayPage; int itemCount = m_Pager.m_ItemCount; int firstBlockPage = currentPage - currentPage % blockSize; int lastPage = max(0, (itemCount + pageSize - 1) / pageSize - 1); int lastBlockPage = min(firstBlockPage + blockSize - 1, lastPage); if (firstBlockPage > 0) { CHTML_image* img = new CHTML_image(CPager::KParam_PreviousPages, m_ImagesDir + "prev.gif", 0); img->SetAttribute("Alt", CPager::KParam_PreviousPages); if ( m_ImgSizeX ) img->SetWidth( m_ImgSizeX ); if ( m_ImgSizeY ) img->SetHeight( m_ImgSizeY ); InsertAt(0, column++, img); } for (int i = firstBlockPage; i <= lastBlockPage ; ++i) { if (i == currentPage) { // current link AddImageString(Cell(0, column++), i, "black_", ".gif"); } else { // normal link AddImageString(Cell(0, column++), i, "", ".gif"); } } if (lastPage != lastBlockPage) { CHTML_image* img = new CHTML_image(CPager::KParam_NextPages, m_ImagesDir + "next.gif", 0); img->SetAttribute("Alt", CPager::KParam_NextPages); if ( m_ImgSizeX ) img->SetWidth( m_ImgSizeX ); if ( m_ImgSizeY ) img->SetHeight( m_ImgSizeY ); InsertAt(0, column++, img); }}CPagerViewButtons::CPagerViewButtons(const CPager& pager, const string& js_suffix) : m_Pager(pager), m_jssuffix(js_suffix){}void CPagerViewButtons::CreateSubNodes(){ int column = 0; int pageSize = m_Pager.m_PageSize; int currentPage = m_Pager.m_DisplayPage; int itemCount = m_Pager.m_ItemCount; int lastPage = max(0, (itemCount + pageSize - 1) / pageSize - 1); if (currentPage > 0) { CHTML_a* prev = new CHTML_a("javascript:var frm = " \ "document.frmQueryBox; " \ "frm.inputpage.value=" + NStr::IntToString(currentPage) + "; Go('Pager');", "Previous"); prev->SetClass("dblinks"); InsertAt(0, column, prev); InsertAt(0, column++, new CHTML_nbsp); } CHTML_input* butt = new CHTML_input("BUTTON", "GoToPage"); butt->SetClass("dblinks"); butt->SetAttribute("value", "Page"); butt->SetEventHandler(eHTML_EH_Click, "form.cmd.value='';form." + CPager::KParam_InputPage + ".value=form.textpage" + m_jssuffix + ".value;Go('Pager');"); InsertAt(0, column, butt); InsertAt(0, column, new CHTML_nbsp); CHTML_input* textpage = new CHTML_text("textpage" + m_jssuffix, 4, NStr::IntToString(currentPage + 1)); textpage->SetClass("dblinks"); string suffix; if ( m_jssuffix.empty() ) { suffix = "1"; } textpage->SetEventHandler(eHTML_EH_Change, "if(form.textpage" + suffix + "){form.textpage" + suffix +".value=" + "this.value}"); textpage->SetEventHandler(eHTML_EH_KeyPress, "form." + CPager::KParam_InputPage +".value=" "this.value;KeyPress('Pager',event);"); InsertAt(0, column++, textpage); CHTML_div* div = new CHTML_div; div->SetClass("medium2"); div->AppendChild(new CHTML_nbsp); div->AppendChild(new CHTMLPlainText("of")); div->AppendChild(new CHTML_nbsp); div->AppendChild(new CHTMLPlainText(NStr::IntToString(lastPage + 1))); InsertAt(0, column++, div); // place holder for page num, to explicitly tell about new page num InsertAt(0, column++, new CHTML_hidden(CPager::KParam_InputPage + m_jssuffix, kEmptyStr)); if (currentPage < lastPage) { CHTML_a* next = new CHTML_a("javascript:var frm = " \ "document.frmQueryBox;" \ "frm.inputpage.value=" + NStr::IntToString(currentPage + 2) + ";Go('Pager');", "Next"); next->SetClass("dblinks"); InsertAt(0, column, next); InsertAt(0, column++, new CHTML_nbsp(2)); }}END_NCBI_SCOPE/* * =========================================================================== * $Log: pager.cpp,v $ * Revision 1000.2 2004/06/01 19:15:56 gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.39 * * Revision 1.39 2004/05/17 20:59:50 gorelenk * Added include of PCH ncbi_pch.hpp * * Revision 1.38 2003/11/03 17:03:08 ivanov * Some formal code rearrangement. Move log to end. * * Revision 1.37 2003/10/02 18:24:38 ivanov * Get rid of compilation warnings; some formal code rearrangement * * =========================================================================== */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -