diff options
Diffstat (limited to 'plugins/scheduler/bwswidget.cpp')
-rw-r--r-- | plugins/scheduler/bwswidget.cpp | 334 |
1 files changed, 334 insertions, 0 deletions
diff --git a/plugins/scheduler/bwswidget.cpp b/plugins/scheduler/bwswidget.cpp new file mode 100644 index 0000000..b430de3 --- /dev/null +++ b/plugins/scheduler/bwswidget.cpp @@ -0,0 +1,334 @@ +/*************************************************************************** + * Copyright (C) 2006 by Ivan Vasić * + * ivasic@gmail.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#include "bwswidget.h" +#include "schedulerpluginsettings.h" + +#include <klocale.h> +#include <qstringlist.h> +#include <qpixmap.h> +#include <qtable.h> +#include <qpainter.h> +#include <qrect.h> +#include <qfont.h> +#include <qcolor.h> + +#include <kglobal.h> +#include <kstandarddirs.h> + +namespace kt +{ + BWSWidget::BWSWidget(QWidget* parent, const char* name, bool useColors) + : QTable(parent,name), m_leftCategory(1), m_rightCategory(0), draw_focus(true), right_click(false), use_colors(useColors) + { + use_colors = SchedulerPluginSettings::useColors(); + + QStringList days; + QStringList hours; + + days << i18n("MON") << i18n("TUE") << i18n("WED") << i18n("THU") << i18n("FRI") << i18n("SAT") << i18n("SUN"); + hours << + "00:00-00:59h" << "01:00-01:59h" << + "02:00-02:59h" << "03:00-03:59h" << + "04:00-04:59h" << "05:00-05:59h" << + "06:00-06:59h" << "07:00-07:59h" << + "08:00-08:59h" << "09:00-09:59h" << + "10:00-10:59h" << "11:00-11:59h" << + "12:00-12:59h" << "13:00-13:59h" << + "14:00-14:59h" << "15:00-15:59h" << + "16:00-16:59h" << "17:00-17:59h" << + "18:00-18:59h" << "19:00-19:59h" << + "20:00-20:59h" << "21:00-21:59h" << + "22:00-22:59h" << "23:00-23:59h"; + + insertRows(0,24); + insertColumns(0,7); + + setColumnLabels(days); + setRowLabels(hours); + + setFocusPolicy(QWidget::StrongFocus); + + QFont f; + f.setPointSize(8); + setFont(f); + + for(int i=0; i<7; ++i) { + setColumnWidth(i,40); + setColumnStretchable(i, true); + } + for(int i=0; i<24; ++i) { + setColumnWidth(i,40); + setRowStretchable(i, true); + } + + setColumnMovingEnabled(false); + setRowMovingEnabled(false); + + setSorting(false); + + adjustSize(); + + for(int i=0; i<5; ++i) { + m_pix[i] = 0; + m_pixf[i] = 0; + m_color[i] = 0; + m_colorf[i] = 0; + } + + setType(use_colors); + + resetSchedule(); + + setSelectionMode(QTable::NoSelection); + + setHScrollBarMode(QTable::AlwaysOff); + setVScrollBarMode(QTable::AlwaysOff); + + connect(this, SIGNAL(currentChanged( int, int )), this, SLOT(cellSelectionChanged( int, int ))); + connect(this, SIGNAL(pressed(int, int, int, const QPoint&)), this, SLOT(cellMouseDown(int, int, int, const QPoint& ))); + } + + BWSWidget::~BWSWidget() + { + for(int i=0; i<5; ++i) { + if(m_pix[i]) + delete m_pix[i]; + if(m_pixf[i]) + delete m_pixf[i]; + } + } + + void BWSWidget::paintFocus(QPainter* p, const QRect& cr) + { + int x = rowAt(cr.y()); + int y = columnAt(cr.x()); + + if(x == 1 && y == 1) { + int trt = 0; + ++trt; + } + + if(lastFocused.x != x || lastFocused.y != y) + updateCell(lastFocused.x, lastFocused.y); + + if(draw_focus) { + + if(right_click) + drawCell(p, m_rightCategory, true); + else + drawCell(p, m_leftCategory, true); + + lastFocused.x = x; + lastFocused.y = y; + } else { + lastFocused.x = -1; + lastFocused.y = -1; + } + } + + void BWSWidget::cellSelectionChanged(int row, int col) + { + if(right_click) + setText(row, col, QString::number(m_rightCategory)); + else + setText(row, col, QString::number(m_leftCategory)); + } + + void BWSWidget::paintCell(QPainter* p, int row, int col, const QRect& cr, bool selected) + { + if(selected) + return; + + bool ok; + int cat = text(row,col).toInt(&ok); + if((ok || cat == 0) && cat >= 0 && cat <= 4) + drawCell(p, cat); + else + setText(row,col,QString::number(0)); + // QTable::paintCell(p,row,col,cr,selected); + } + + void BWSWidget::resetSchedule() + { + for(int i=0; i<7; ++i) + for(int j=0; j<24; ++j) + setText(j,i, "0"); + draw_focus = false; + clearSelection(); + updateHeaderStates(); + } + + void BWSWidget::repaintWidget() + { + for(int i=0; i<7; ++i) + for(int j=0; j<24; ++j) + updateCell(j,i); + } + + void BWSWidget::cellMouseDown(int row, int col, int button, const QPoint& mousePos) + { + right_click = button == 2; + draw_focus = true; + cellSelectionChanged(row,col); + } + + void BWSWidget::clearSelect() + { + draw_focus = false; + clearSelection(); + updateHeaderStates(); + repaintWidget(); + } + + void BWSWidget::setLeftCategory(const int& theValue) + { + m_leftCategory = theValue; + } + + void BWSWidget::setRightCategory(const int& theValue) + { + m_rightCategory = theValue; + } + + + void BWSWidget::setUseColors(bool theValue) + { + use_colors = theValue; + } + + void BWSWidget::drawCell(QPainter* p, int category, bool focus) + { + if(use_colors) { + if(focus) { + p->fillRect(0,0,40,20,*m_colorf[category]); + } else { + p->fillRect(0,0,40,20,*m_color[category]); + } + + switch(category) { + case 0: + // p->drawText(QRect(0,0,40,20), Qt::AlignCenter | Qt::SingleLine, "normalllll"); + break; + case 1: + case 2: + case 3: + p->drawText(QRect(0,0,40,20), Qt::AlignCenter | Qt::SingleLine, QString::number(category)); + break; + case 4: + p->drawText(QRect(0,0,40,20), Qt::AlignCenter | Qt::SingleLine, "off"); + break; + } + + p->drawRect(0,0,40,20); + } else { + if(focus) + p->drawPixmap(0,0,*m_pixf[category]); + else + p->drawPixmap(0,0, *m_pix[category]); + } + } + + void BWSWidget::setType(bool color) + { + if(color) { + for(int i=0; i<5; ++i) { + if(m_pix[i]) + delete m_pix[i]; + if(m_pixf[i]) + delete m_pixf[i]; + + m_pix[i] = 0; + m_pixf[i] = 0; + } + + m_color[0] = new QColor(30,165,105); + m_color[1] = new QColor(195,195,70); + m_color[2] = new QColor(195,195,70); + m_color[3] = new QColor(195,195,70); + m_color[4] = new QColor(190,30,30); + + m_colorf[0] = new QColor(40,200,130); + m_colorf[1] = new QColor(210,220,130); + m_colorf[2] = new QColor(210,220,130); + m_colorf[3] = new QColor(210,220,130); + m_colorf[4] = new QColor(230,40,40); + + } else { + for(int i=0; i<5; ++i) { + if(m_color[i]) + delete m_color[i]; + if(m_colorf[i]) + delete m_colorf[i]; + + m_color[i] = 0; + m_colorf[i] = 0; + } + + m_pix[0] = new QPixmap(locate("data", QString("ktorrent/icons/cell-a-0000.png"))); + m_pix[1] = new QPixmap(locate("data", QString("ktorrent/icons/cell-a-0001.png"))); + m_pix[2] = new QPixmap(locate("data", QString("ktorrent/icons/cell-a-0002.png"))); + m_pix[3] = new QPixmap(locate("data", QString("ktorrent/icons/cell-a-0003.png"))); + m_pix[4] = new QPixmap(locate("data", QString("ktorrent/icons/cell-a-0004.png"))); + + m_pixf[0] = new QPixmap(locate("data", QString("ktorrent/icons/cell-b-0000.png"))); + m_pixf[1] = new QPixmap(locate("data", QString("ktorrent/icons/cell-b-0001.png"))); + m_pixf[2] = new QPixmap(locate("data", QString("ktorrent/icons/cell-b-0002.png"))); + m_pixf[3] = new QPixmap(locate("data", QString("ktorrent/icons/cell-b-0003.png"))); + m_pixf[4] = new QPixmap(locate("data", QString("ktorrent/icons/cell-b-0004.png"))); + } + + use_colors = color; + + repaintWidget(); + } + + void BWSWidget::setSchedule(const BWS& theValue) + { + m_schedule = theValue; + for(int i=0; i<7; ++i) + for(int j=0; j<24; ++j) + setText(j,i, QString::number((int) m_schedule.getCategory(i,j))); + } + + const BWS& BWSWidget::schedule() + { + for(int i=0; i<7; ++i) + { + for(int j=0; j<24; ++j) + { + bool ok; + ScheduleCategory cat = (ScheduleCategory) text(j,i).toInt(&ok); + + if((ok || cat == 0) && cat >= 0 && cat <= 4) //precaution + m_schedule.setCategory(i,j, cat); + else + m_schedule.setCategory(i,j,(ScheduleCategory) 0); + } + } + + return m_schedule; + } + + void BWSWidget::focusOutEvent(QFocusEvent* e) + { + if(e->lostFocus()) + clearSelect(); + } +} |