// edit_schedulercodes.cpp
//
// Edit the scheduler codes of a cart
//
//   (C) Copyright Stefan Gabriel <stg@st-gabriel.de>
//   (C) Copyright 2002-2019 Fred Gleason <fredg@paravelsystems.com>
//
//   This program is free software; you can redistribute it and/or modify
//   it under the terms of the GNU General Public License version 2 as
//   published by the Free Software Foundation.
//
//   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., 675 Mass Ave, Cambridge, MA 02139, USA.
//

#include <qpainter.h>
#include <qmessagebox.h>

#include "edit_schedulercodes.h"

EditSchedulerCodes::EditSchedulerCodes(QString *sched_codes,
				       QString *remove_codes,QWidget *parent)
  : RDDialog(parent)
{
  edit_sched_codes=sched_codes;
  edit_remove_codes=remove_codes;

  QString sql;
  RDSqlQuery *q;
  QString str;

  setWindowTitle("RDLibrary - "+tr("Select Scheduler Codes"));

  //
  // Fix the Window Size
  //
  if(edit_remove_codes==NULL) {
    setMinimumWidth(sizeHint().width());
    setMaximumWidth(sizeHint().width());
    }
  else {
    setMinimumWidth(2*sizeHint().width());
    setMaximumWidth(2*sizeHint().width());
    }
  setMinimumHeight(sizeHint().height());
  setMaximumHeight(sizeHint().height());

  //
  // Services Selector
  //
  codes_sel=new RDListSelector(this);
  codes_sel->setGeometry(10,10,380,200);
  codes_sel->sourceSetLabel(tr("Available Codes"));
  if(edit_remove_codes==NULL) {
    codes_sel->destSetLabel(tr("Assigned Codes"));
    }
  else {
    codes_sel->destSetLabel(tr("ASSIGN to Carts"));
    
    remove_codes_sel=new RDListSelector(this);
    remove_codes_sel->setGeometry(sizeHint().width()+10,10,380,200);
    remove_codes_sel->sourceSetLabel(tr("Available Codes"));
    remove_codes_sel->destSetLabel(tr("REMOVE from Carts"));
    }
  
  //
  //  Ok Button
  //
  QPushButton *ok_button=new QPushButton(this);
  if(edit_remove_codes==NULL) 
    ok_button->setGeometry(sizeHint().width()-180,sizeHint().height()-60,80,50);
  else  
    ok_button->setGeometry(2*sizeHint().width()-180,sizeHint().height()-60,80,50);
  ok_button->setDefault(true);
  ok_button->setFont(buttonFont());
  ok_button->setText(tr("&OK"));
  connect(ok_button,SIGNAL(clicked()),this,SLOT(okData()));

  //
  //  Cancel Button
  //
  QPushButton *cancel_button=new QPushButton(this);
  if(edit_remove_codes==NULL) 
    cancel_button->setGeometry(sizeHint().width()-90,sizeHint().height()-60,
			     80,50);
  else			     
    cancel_button->setGeometry(2*sizeHint().width()-90,sizeHint().height()-60,
			     80,50);
  cancel_button->setFont(buttonFont());
  cancel_button->setText(tr("&Cancel"));
  connect(cancel_button,SIGNAL(clicked()),this,SLOT(cancelData()));


  for(int i=0;i<edit_sched_codes->length()/11;i++) {
    codes_sel->destInsertItem(edit_sched_codes->mid(i*11,11).stripWhiteSpace());
    } 
  if(edit_remove_codes!=NULL) {
    for(int i=0;i<edit_remove_codes->length()/11;i++) {
      remove_codes_sel->destInsertItem(remove_codes->mid(i*11,11).stripWhiteSpace());
      } 
    }
       
  sql=QString().sprintf("select CODE from SCHED_CODES");
  q=new RDSqlQuery(sql);
  while(q->next()) {
    if(codes_sel->destFindItem(q->value(0).toString())==0) {
      codes_sel->sourceInsertItem(q->value(0).toString());
    }
    if(edit_remove_codes!=NULL) {
      if(remove_codes_sel->destFindItem(q->value(0).toString())==0) {
        remove_codes_sel->sourceInsertItem(q->value(0).toString());
      }
    }
  }
  delete q;
}


EditSchedulerCodes::~EditSchedulerCodes()
{
}


QSize EditSchedulerCodes::sizeHint() const
{
  return QSize(400,292);
} 


QSizePolicy EditSchedulerCodes::sizePolicy() const
{
  return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
}


void EditSchedulerCodes::paintEvent(QPaintEvent *e)
{
  QPainter *p=new QPainter(this);
  p->setPen(QColor(Qt::black));
  p->drawLine(sizeHint().width(),10,sizeHint().width(),210);
  p->end();
}


void EditSchedulerCodes::okData()
{
  *edit_sched_codes="";
  //
  // Add New Objects
  //
  for(unsigned i=0;i<codes_sel->destCount();i++) {
    *edit_sched_codes+=codes_sel->destText(i).append("           ").left(11);
  }
  if (edit_sched_codes->length()>254)
    {
    QMessageBox::information(this,"Warning","There is a maximum of 23 Codes per Cart!",QMessageBox::Ok);
    *edit_sched_codes=edit_sched_codes->left(253);
    }
  *edit_sched_codes+=".";

  if(edit_remove_codes!=NULL) {
  	*edit_remove_codes="";
    for(unsigned i=0;i<remove_codes_sel->destCount();i++) {
      *edit_remove_codes+=remove_codes_sel->destText(i).append("           ").left(11);
    }
    if (edit_remove_codes->length()>254)
      {
      QMessageBox::information(this,"Warning","There is a maximum of 23 Codes per Cart!",QMessageBox::Ok);
      *edit_remove_codes=edit_remove_codes->left(253);
      }
    *edit_remove_codes+=".";
    }

  done(0);
}


void EditSchedulerCodes::cancelData()
{
  done(-1);
}