Project

General

Profile

Bug #1038 » mir_wcustomtableviewpushbutton.h

Łukasz Matuszewski, 11/18/2011 10:59 AM

 
#ifndef _MIR_WCUSTOMTABLEVIEWPUSHBUTTON_H_
#define _MIR_WCUSTOMTABLEVIEWPUSHBUTTON_H_

#include <Wt/Dbo/QueryModel>
#include <Wt/WPushButton>
#include <Wt/WSlider>

namespace SyNaT
{
namespace MIR
{
using namespace Wt;

template <class Result>
class WCustomTableViewImpl;

template <class Result>
class WCustomTableViewPushButton : public WPushButton
{
public:
WCustomTableViewPushButton(WCustomTableViewImpl<Result> *wctv = 0, WContainerWidget *parent = 0)
: m_wctv(wctv), WPushButton(parent)
{
}

WCustomTableViewPushButton(const WString& text, WCustomTableViewImpl<Result> *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<int>(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<Result> *m_wctv;
};
}
}


#endif /* _MIR_WCUSTOMTABLEVIEWPUSHBUTTON_H_ */
(2-2/4)