summaryrefslogtreecommitdiffstats
path: root/plugins/scheduler/bwswidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/scheduler/bwswidget.cpp')
-rw-r--r--plugins/scheduler/bwswidget.cpp334
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();
+ }
+}