#ifndef _MIR_WCUSTOMTABLEVIEWPUSHBUTTON_H_ #define _MIR_WCUSTOMTABLEVIEWPUSHBUTTON_H_ #include #include #include namespace SyNaT { namespace MIR { using namespace Wt; template class WCustomTableViewImpl; template class WCustomTableViewPushButton : public WPushButton { public: WCustomTableViewPushButton(WCustomTableViewImpl *wctv = 0, WContainerWidget *parent = 0) : m_wctv(wctv), WPushButton(parent) { } WCustomTableViewPushButton(const WString& text, WCustomTableViewImpl *wctv = 0, WContainerWidget *parent = 0) : m_wctv(wctv), WPushButton(text, parent) { } void slt_first_page_clicked() { bool nbnu = false; if (this->m_wctv->pageCount() > 0) { if (this->m_wctv->m_current_page != 0) this->m_wctv ->scrollTo( this->m_wctv->model()->index(0, 0), WTableView::PositionAtTop); this->m_wctv->m_current_page = 0; this->m_wctv->m_first_page_in_nav_bar = 0; this->m_wctv->m_last_page_in_nav_bar = this->m_wctv->m_num_of_pages_in_nav_bar - 1; nbnu = true; } if (nbnu) { this->m_wctv->slider().setValue(this->m_wctv->slider().maximum()); // this->m_wctv->update_slider(); } this->m_wctv->update_page_nav_bar(nbnu); } void slt_prev_page_clicked() { bool nbnu = false; if (this->m_wctv->pageCount() > 0) { if (this->m_wctv->m_current_page > 0) { this->m_wctv ->scrollTo( this->m_wctv->model() ->index((--this->m_wctv->m_current_page) * (this->m_wctv->rowsPerPage()), 0), WTableView::PositionAtTop); if (this->m_wctv->m_first_page_in_nav_bar > this->m_wctv->m_current_page) { this->m_wctv->m_first_page_in_nav_bar--; this->m_wctv->m_last_page_in_nav_bar--; nbnu = true; } this->m_wctv->slider().setValue((int) (this->m_wctv->slider().maximum() - ((this->m_wctv->m_current_page * 1.0) / (this->m_wctv->pageCount() - 1)) * this->m_wctv->slider().maximum()) ); // this->m_wctv->update_slider(); } } this->m_wctv->update_page_nav_bar(nbnu); } void slt_next_page_clicked() { bool nbnu = false; if (this->m_wctv->pageCount() > 0) { if ((this->m_wctv->m_current_page + 1) < (this->m_wctv->pageCount())) { this->m_wctv ->scrollTo( this->m_wctv->model() ->index((++(this->m_wctv->m_current_page)) * (this->m_wctv->rowsPerPage()), 0), WTableView::PositionAtTop); if (this->m_wctv->m_last_page_in_nav_bar < this->m_wctv->m_current_page) { this->m_wctv->m_first_page_in_nav_bar++; this->m_wctv->m_last_page_in_nav_bar++; nbnu = true; } this->m_wctv->slider().setValue((int) (this->m_wctv->slider().maximum() - ((this->m_wctv->m_current_page * 1.0) / (this->m_wctv->pageCount() - 1)) * this->m_wctv->slider().maximum()) ); // this->m_wctv->update_slider(); } } this->m_wctv->update_page_nav_bar(nbnu); } void slt_last_page_clicked() { bool nbnu = false; if (this->m_wctv->pageCount() > 0) { if (this->m_wctv->m_current_page != (this->m_wctv->pageCount())) { int pageCount = this->m_wctv->pageCount(); int currentPage = --pageCount; //int row = (pageCount + (this->m_wctv->pageCountReminder() > 0 ? -1 : -2))* this->m_wctv->rowsPerPage(); int row = currentPage * this->m_wctv->rowsPerPage(); this->m_wctv ->scrollTo( this->m_wctv->model() ->index(row, 0), WTableView::PositionAtTop); //this->m_wctv->m_current_page = (pageCount + (this->m_wctv->pageCountReminder() > 0 ? -1 : -2)); this->m_wctv->m_current_page = currentPage; this->m_wctv->m_first_page_in_nav_bar = this->m_wctv->m_current_page - this->m_wctv->m_num_of_pages_in_nav_bar + 1; if (this->m_wctv->m_first_page_in_nav_bar < 0) this->m_wctv->m_first_page_in_nav_bar = 0; this->m_wctv->m_last_page_in_nav_bar = this->m_wctv->m_current_page; nbnu = true; } } if (nbnu) { this->m_wctv->slider().setValue((int) (this->m_wctv->slider().maximum() - ((this->m_wctv->m_current_page * 1.0) / (this->m_wctv->pageCount() - 1)) * this->m_wctv->slider().maximum()) ); // this->m_wctv->update_slider(); } this->m_wctv->update_page_nav_bar(nbnu); } void slt_page_clicked() { bool nbnu = false; if (this->m_wctv->pageCount() > 0) { int page_clicked = boost::lexical_cast(this->text().toUTF8()); page_clicked--; if ((page_clicked < this->m_wctv->pageCount()) && (this->m_wctv->m_current_page != page_clicked)) { this->m_wctv ->scrollTo( this->m_wctv->model() ->index(page_clicked * (this->m_wctv->rowsPerPage()), 0), WTableView::PositionAtTop); this->m_wctv->m_current_page = page_clicked; nbnu = true; } } if (nbnu) { this->m_wctv->slider().setValue((int) (this->m_wctv->slider().maximum() - ((this->m_wctv->m_current_page * 1.0) / (this->m_wctv->pageCount() - 1)) * this->m_wctv->slider().maximum()) ); // this->m_wctv->update_slider(); } this->m_wctv->update_page_nav_bar(nbnu); } void slt_next_pages_clicked() { if (this->m_wctv->m_first_page_in_nav_bar < (this->m_wctv->pageCount() - this->m_wctv->m_num_of_pages_in_nav_bar)) { this->m_wctv->m_first_page_in_nav_bar += this->m_wctv->m_num_of_pages_in_nav_bar; this->m_wctv->m_last_page_in_nav_bar += this->m_wctv->m_num_of_pages_in_nav_bar; this->m_wctv->update_page_nav_bar(true); } } void slt_prev_pages_clicked() { if (this->m_wctv->m_first_page_in_nav_bar >= this->m_wctv->m_num_of_pages_in_nav_bar) { this->m_wctv->m_first_page_in_nav_bar -= this->m_wctv->m_num_of_pages_in_nav_bar; this->m_wctv->m_last_page_in_nav_bar -= this->m_wctv->m_num_of_pages_in_nav_bar; this->m_wctv->update_page_nav_bar(true); } } protected: WCustomTableViewImpl *m_wctv; }; } } #endif /* _MIR_WCUSTOMTABLEVIEWPUSHBUTTON_H_ */