Source Code (Use browser search to find items of interest.)

Class Index

kteatime'TopLevel (./kdetoys/kteatime/toplevel.h:20)

class TopLevel : public KTMainWindow
{
  Q_OBJECT

public:

  TopLevel();
  ~TopLevel();

protected:

  void paintEvent(QPaintEvent *);
  void mousePressEvent(QMouseEvent *);
  void timerEvent(QTimerEvent *);

private slots:

  void teaSelected(int index);
  void start();
  void config();
    
private:

  bool running, ready, frame1;
  
  QStringList teas, times;
  int seconds, teatime;
  
  QPopupMenu *menu;
  QPixmap *mugPixmap, *bagPixmap, *tea1Pixmap, *tea2Pixmap;

  bool beeping, popping;
  QString action;
};


kteatime'TopLevel::TopLevel() (./kdetoys/kteatime/toplevel.cpp:35)

TopLevel::TopLevel() 
  : KTMainWindow()
{
  QString n;
  unsigned int num;

  menu = new QPopupMenu();
  menu->setCheckable(true);

  KConfig *config = kapp->config();
  config->setGroup("Teas");
 
  teas.clear(); times.clear();

  teas.append(i18n("Black Tea (3 min)")); n.setNum(180); times.append(n);
  teas.append(i18n("Earl Grey (5 min)")); n.setNum(300); times.append(n);
  teas.append(i18n("Fruit Tea (8 min)")); n.setNum(480); times.append(n);

  num = config->readNumEntry("UserTea", 150);
  n = i18n("Other tea (%1s)").arg(num);
  teas.append(n); n.setNum(num); times.append(n);

  for (QStringList::ConstIterator it = teas.begin(); it != teas.end(); it++)
    menu->insertItem(*it);

  connect(menu, SIGNAL(activated(int)), this, SLOT(teaSelected(int)));

  num = config->readNumEntry("Tea",0);
  if (num > teas.count())
    num = 0;
  for (unsigned int i=0; i < teas.count(); i++)
    menu->setItemChecked(i, i == num);
  teatime = (*times.at(num)).toInt();

  menu->insertSeparator();
  menu->insertItem(i18n("&Start"), this, SLOT(start()));
  menu->insertSeparator();
  menu->insertItem(i18n("&Configure..."), this, SLOT(config()));
  menu->insertItem(i18n("Quit"), kapp, SLOT(quit()));

  beeping = config->readBoolEntry("Beep", true);
  popping = config->readBoolEntry("Popup", true);
  action = config->readEntry("Action");
    
  mugPixmap = new QPixmap(mug);
  bagPixmap = new QPixmap(bag);
  tea1Pixmap = new QPixmap(tea1);
  tea2Pixmap = new QPixmap(tea2);

  running = ready = false;

  QToolTip::add(this, i18n("The Tea Cooker"));
}



kteatime'TopLevel::~TopLevel() (./kdetoys/kteatime/toplevel.cpp:90)

TopLevel::~TopLevel()
{
  delete menu;
  delete mugPixmap;
  delete bagPixmap;
  delete tea1Pixmap;
  delete tea2Pixmap;
}



kteatime'TopLevel::mousePressEvent() (./kdetoys/kteatime/toplevel.cpp:100)

void TopLevel::mousePressEvent(QMouseEvent *event) 
{
  if (event->button() == 1)
  {
    if (ready)
    {
      killTimers();
      ready = false;
      repaint();
    }
    else
      if (!running)
        start();
  }
  else
  {
    menu->move(-1000,-1000);
    menu->show();
    menu->hide();
    QRect g = KWM::geometry( this->winId() );
    if ( g.x() > QApplication::desktop()->width()/2 &&
      g.y()+menu->height() > QApplication::desktop()->height() )
      menu->popup(QPoint( g.x(), g.y() - menu->height()));
    else
      menu->popup(QPoint( g.x() + g.width(), g.y() + g.height()));
  }
}



kteatime'TopLevel::paintEvent() (./kdetoys/kteatime/toplevel.cpp:129)

void TopLevel::paintEvent(QPaintEvent *) 
{
  QPixmap *pm;

  if (running)
    pm = bagPixmap;
  else
  {
    if (ready)
    {
      if (frame1)
        pm = tea1Pixmap;
      else
        pm = tea2Pixmap;
    }
    else
      pm = mugPixmap;
  }

  QPainter p(this);
  int x = 1 + (12 - pm->width()/2);
  int y = 1 + (12 - pm->height()/2);
  p.drawPixmap(x , y, *pm);
  p.end();
}



kteatime'TopLevel::start() (./kdetoys/kteatime/toplevel.cpp:156)

void TopLevel::start()
{
  killTimers();
  seconds = teatime;
  startTimer(1000);
 
  running = true; ready = false;
  repaint();
}



kteatime'TopLevel::timerEvent() (./kdetoys/kteatime/toplevel.cpp:167)

void TopLevel::timerEvent(QTimerEvent *)
{
  if (running)
  {
    seconds--;

    if (seconds <= 0)
    {
      running = false; ready = true;

      // invoke action
      if (beeping)
        kapp->beep();
      if (!action.isEmpty())
        system(action.data());
      if (popping)
        KMessageBox::information(0, i18n("The tea is now ready!"));

      repaint();
    }
  }
  else
    if (ready)
    {
      frame1 = frame1 ? false : true;
      repaint();
    }
}



kteatime'TopLevel::teaSelected() (./kdetoys/kteatime/toplevel.cpp:197)

void TopLevel::teaSelected(int index)
{
  if (index >=0 && index < (int)teas.count())
  {
    for (unsigned int i=0; i < teas.count(); i++)
      menu->setItemChecked(i, (int)i == index);

    KConfig *config = kapp->config();
    config->setGroup("Teas");
  
    config->writeEntry("Tea",index);  

    bool ok;
    teatime = (*times.at(index)).toInt(&ok);
    if (!ok)
      teatime = 300;
  }
}



kteatime'TopLevel::config() (./kdetoys/kteatime/toplevel.cpp:217)

void TopLevel::config()
{
  QDialog *dlg = new QDialog(this, "", true);
  dlg->setCaption(i18n("Configure The Tea Cooker"));
  dlg->resize(320,180);

  QVBoxLayout *box = new QVBoxLayout(dlg,4,8);
  
  QGridLayout *grid = new QGridLayout(5,2);
  box->addLayout(grid);
  
  QSpinBox *spin = new QSpinBox(1,10000,10,dlg);
  spin->setFixedHeight(spin->sizeHint().height());

  QLabel *l = new QLabel(spin, i18n("Your Tea Time (s):"), dlg);
  l->setFixedSize(l->sizeHint());

  grid->addWidget(l,0,0);
  grid->addWidget(spin,0,1);

  QLineEdit *actionEdit = new QLineEdit(dlg);
  l = new QLabel(actionEdit, i18n("Action:"), dlg);
  l->setMinimumSize(l->sizeHint());
  actionEdit->setFixedHeight(actionEdit->sizeHint().height());

  grid->addWidget(l,1,0);
  grid->addWidget(actionEdit,1,1);

  QCheckBox *beep = new QCheckBox(i18n("Beep"), dlg);
  QCheckBox *popup = new QCheckBox(i18n("Popup"), dlg);
  beep->setFixedHeight(beep->sizeHint().height());
  popup->setFixedHeight(popup->sizeHint().height());

  grid->addWidget(beep, 2,1);
  grid->addWidget(popup, 3,1);

  grid->setRowStretch(4,1);

  QFrame *f = new QFrame(dlg);
  f->setFrameStyle(QFrame::HLine | QFrame::Raised);
  box->addStretch(1);
  box->addWidget(f);

  QHBoxLayout *hbox = new QHBoxLayout();
  box->addLayout(hbox);
  hbox->addStretch();

  QPushButton *ok = new QPushButton(i18n("OK"),dlg);
  ok->setDefault(true);
  QPushButton *cancel = new QPushButton(i18n("Cancel"), dlg);
  connect(ok, SIGNAL(pressed()), dlg, SLOT(accept()));
  connect(cancel, SIGNAL(pressed()), dlg, SLOT(reject()));
  ok->setFixedSize(ok->sizeHint());
  cancel->setFixedSize(cancel->sizeHint());

  hbox->addWidget(ok);
  hbox->addWidget(cancel);

  box->activate();

  // -------------------------

  beep->setChecked(beeping);
  popup->setChecked(popping);
  actionEdit->setText(action);
  bool done;
  int num = (*times.at(teas.count()-1)).toInt(&done);
  if (!done)
    num = 300;
  spin->setValue(num);

  if (dlg->exec() == QDialog::Accepted)
  {
    beeping = beep->isChecked();
    popping = popup->isChecked();
    action = actionEdit->text();
    teas.remove(teas.last()); 
    times.remove(teas.last());
    QString n,n2;
    num = spin->value();
    n = i18n("Other tea (%1s)").arg(num);
    teas.append(n); n2.setNum(num); times.append(n2);
    menu->changeItem(n, teas.count()-1);

    KConfig *config = kapp->config();
    config->setGroup("Teas");
    config->writeEntry("Beep",beeping);
    config->writeEntry("Popup",popping);
    config->writeEntry("UserTea",num);
    config->writeEntry("Action",action);    
  }
}