Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Examples  

taskwindow.h

Go to the documentation of this file.
00001 
00002 //
00003 // YASA task window declarations
00004 //
00005 // Project: Yasa 2
00006 // Author : Jan Blumenthal
00007 // Start  : 2002/02/28
00008 // $Header: /sources/yasa/yasagui/taskwindow.h,v 1.4 2003/01/24 15:47:43 bj Exp $
00009 //
00011 //
00012 // This program is free software; you can redistribute it and/or modify
00013 // it under the terms of the GNU General Public License as published by
00014 // the Free Software Foundation; either version 2 of the License, or
00015 // (at your option) any later version.
00016 //
00017 // This program is distributed in the hope that it will be useful,
00018 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00019 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020 // GNU General Public License for more details.
00021 //
00022 // You should have received a copy of the GNU General Public License
00023 // along with this program (See the included file COPYING);
00024 // if not, write to the Free Software Foundation, Inc.,
00025 // 675 Mass Ave, Cambridge, MA 02139, USA.
00026 //
00028 // This file contains all information about task windows
00030 #ifndef YASAGUI_TASKWINDOW_INCLUDE
00031 #define YASAGUI_TASKWINDOW_INCLUDE
00032 
00033 
00035 #include <qtextbrowser.h>
00036 #include "mainwindow.h"
00037 #include "widgets.h"
00038 #include "task.h"
00039 #include "project.h"
00040 
00041 
00044 class YTaskFrame : public YObjectFrame
00045 {   Q_OBJECT
00046     QScrollView         scrollview;
00047 public:                 YTaskFrame(QWidget *parent, YFrameArgs &args) :
00048                         YObjectFrame(args),
00049                         scrollview(parent)
00050                         {}
00051     virtual int         InitInstance();
00052     virtual QWidget*    GetMainWidget()                             { return &scrollview;   }
00053     static YFrame*      CreateTaskFrame( QWidget *parent, YFrameArgs &args)
00054                         {
00055                             return new YTaskFrame(parent, args);
00056                         }
00057 };
00058 
00059 
00061 class YPriorityWidget : public YIntegerWidget
00062 {   Q_OBJECT
00063 public:                 YPriorityWidget(YTask *task, QWidget *parent) : YIntegerWidget(task, parent)
00064                         {   setMinValue(YG_MIN_PRIORITY);
00065                             setMaxValue(YG_MAX_PRIORITY);
00066                             UpdateWidget();
00067                             updateDisplay();
00068                         }
00069 public slots:
00070     virtual void        UpdateWidget()                          { if ( value() != ((YTask*)object)->GetPriority() )
00071                                                                     setValue( ((YTask*)object)->GetPriority() );    }
00072     virtual void        UpdateValue(int value)                  { ((YTask*)object)->SetPriority( value );           }
00073 protected:
00074     virtual QString     mapValueToText(int v)                   {   if ( v==YG_MIN_PRIORITY) return QString(MSGP_TASK_PRIORITY_LOWEST);
00075                                                                     if ( v==YG_MAX_PRIORITY) return QString(MSGP_TASK_PRIORITY_HIGHEST);
00076                                                                     return QString::number(v);                      }
00077     virtual int         mapTextToValue(bool *ok)                {   if ( text()==MSGP_TASK_PRIORITY_LOWEST )    return YG_MIN_PRIORITY;
00078                                                                     if ( text()==MSGP_TASK_PRIORITY_HIGHEST )   return YG_MAX_PRIORITY;
00079                                                                     return text().toInt(ok);                        }
00080 };
00081 
00082 
00085 class YCPUTaskWidget : public YIntegerWidget
00086 {   Q_OBJECT
00087 public:
00088     YCPUTaskWidget(YTask *t, QWidget *parent) : YIntegerWidget(t, parent)
00089                         {   setMinValue( t->GetCPU().GetMinValue() );
00090                             UpdateWidget();
00091                             updateDisplay();
00092                         }
00093 public slots:
00094     virtual void        UpdateWidget()                          { setMaxValue( ((YProject*)object->GetSet()->GetParent())->GetMaxCPU().GetContent() );
00095                                                                   if ( value()!=((YTask*)object)->GetCPU().GetContent() )
00096                                                                     setValue( ((YTask*)object)->GetCPU().GetContent() );    }
00097     virtual void        UpdateValue(int value)                  { ((YTask*)object)->SetCPU( value );                }
00098 protected:
00099     virtual QString     mapValueToText(int v)                   {   if ( v==YG_MIN_CPU) return QString( MSGP_TASK_CPU_ANY );
00100                                                                     return QString::number(v);                      }
00101     virtual int         mapTextToValue(bool *ok)                {   if ( text()==MSGP_TASK_CPU_ANY )    return YG_MIN_CPU;
00102                                                                     return text().toInt(ok);                        }
00103 };
00104 
00105 
00107 class YPeriodWidget : public YYasaTimeWidget
00108 {   Q_OBJECT
00109 public:                 YPeriodWidget(YTask *task, QWidget *parent) : YYasaTimeWidget(task, parent)
00110                         {   UpdateWidget();
00111                             updateDisplay();    }
00112 public slots:
00113     virtual void        UpdateWidget()                          { if ( GetYasaTime()!=((YTask*)object)->GetPeriod() ) //.GetContent() )
00114                                                                     SetYasaTime( ((YTask*)object)->GetPeriod());    }
00115     virtual void        UpdateValue(YASA_TIME value)            { ((YTask*)object)->SetPeriod( value );         }
00116     virtual QString     mapValueToText(int v)                   {   if ( v==YTIME::YASA_TIME_MIN)   return QString( MSGP_YASA_TIME_INFINITY );
00117                                                                     return QString::number(v);                      }
00118     virtual int         mapTextToValue(bool *ok)                {   if ( text()==MSGP_YASA_TIME_INFINITY )  return YTIME::YASA_TIME_MIN;
00119                                                                     return text().toInt(ok);                        }
00120 };
00121 
00122 
00124 class YOffsetWidget : public YYasaTimeWidget
00125 {   Q_OBJECT
00126 public:                 YOffsetWidget(YTask *task, QWidget *parent) : YYasaTimeWidget(task, parent)
00127                         {   UpdateWidget();
00128                             updateDisplay();    }
00129 public slots:
00130     virtual void        UpdateWidget()                          { if ( GetYasaTime()!=((YTask*)object)->GetOffset() )
00131                                                                     SetYasaTime( ((YTask*)object)->GetOffset());    }
00132     virtual void        UpdateValue(YASA_TIME value)            { ((YTask*)object)->SetOffset( value );         }
00133 protected:
00134     virtual QString     mapValueToText(int v)                   {   if ( v==YTIME::YASA_TIME_MIN)   return QString( MSGP_TASK_OFFSET_NOOFFSET );
00135                                                                     return QString::number(v);                      }
00136     virtual int         mapTextToValue(bool *ok)                {   if ( text()==MSGP_TASK_OFFSET_NOOFFSET )    return YTIME::YASA_TIME_MIN;
00137                                                                     return text().toInt(ok);                        }
00138 };
00139 
00140 
00142 class YRequiredTimeWidget : public YYasaTimeWidget
00143 {   Q_OBJECT
00144 public:                 YRequiredTimeWidget(YTask *task, QWidget *parent) : YYasaTimeWidget(task, parent)
00145                         {   //setMinValue(YASA_REQUIREDTIME::YASA_MIN_REQUIRED_TIME);
00146                             UpdateWidget();
00147                             updateDisplay();
00148                         }
00149 public slots:
00150     virtual void        UpdateWidget()                          { if ( GetYasaTime()!=((YTask*)object)->GetRequiredTime() )
00151                                                                     SetYasaTime( ((YTask*)object)->GetRequiredTime());  }
00152     virtual void        UpdateValue(YASA_TIME value)                    { ((YTask*)object)->SetRequiredTime( value );           }
00153     virtual QString     mapValueToText(int v)                   {   if ( v==0)  return QString( MSGP_YASA_TIME_INFINITY );
00154                                                                     return QString::number(v);                      }
00155     virtual int         mapTextToValue(bool *ok)                {   if ( text()==MSGP_YASA_TIME_INFINITY )  return 0;
00156                                                                     return text().toInt(ok);                        }
00157 };
00158 
00159 
00161 class YDeadlineWidget : public YYasaTimeWidget
00162 {   Q_OBJECT
00163 public:                 YDeadlineWidget(YTask *task, QWidget *parent) : YYasaTimeWidget(task, parent)
00164                         {   UpdateWidget();
00165                             updateDisplay();
00166                         }
00167 public slots:
00168     virtual void        UpdateWidget()                          { if ( GetYasaTime()!=((YTask*)object)->GetDeadline() )
00169                                                                     SetYasaTime( ((YTask*)object)->GetDeadline());  }
00170     virtual void        UpdateValue(YASA_TIME value)            { ((YTask*)object)->SetDeadline( value );       }
00171 protected:
00172     virtual QString     mapValueToText(int v)                   {   if ( v<=0)  return QString( MSGP_YASA_TIME_INFINITY );
00173                                                                     return QString::number(v);                      }
00174     virtual int         mapTextToValue(bool *ok)                {   if ( text()==MSGP_YASA_TIME_INFINITY )  return -1;
00175                                                                     return text().toInt(ok);                        }
00176 };
00177 
00178 
00180 class YDeadlineToleranceWidget : public YYasaTimeWidget
00181 {   Q_OBJECT
00182 public:                 YDeadlineToleranceWidget(YTask *task, QWidget *parent) : YYasaTimeWidget(task, parent)
00183                         {   UpdateWidget();
00184                             updateDisplay();
00185                         }
00186 public slots:
00187     virtual void        UpdateWidget()                          { if ( GetYasaTime()!=((YTask*)object)->GetDeadlineTolerance() )
00188                                                                     SetYasaTime( ((YTask*)object)->GetDeadlineTolerance()); }
00189     virtual void        UpdateValue(YASA_TIME value)            { ((YTask*)object)->SetDeadlineTolerance( value );      }
00190     virtual QString     mapValueToText(int v)                   {   if ( v<=0)  return QString(MSGP_TASK_DEADLINE_TOLERANCE_NO);
00191                                                                     return QString::number(v);                      }
00192     virtual int         mapTextToValue(bool *ok)                {   if ( text()==MSGP_TASK_DEADLINE_TOLERANCE_NO)   return 0;
00193                                                                     return text().toInt(ok);                        }
00194 };
00195 
00196 
00198 class YTaskTypeWidget : public YComboWidget
00199 {   Q_OBJECT
00200 public:                 YTaskTypeWidget(YTask *task, QWidget *parent) : YComboWidget(task, parent)
00201                         {   insertItem(MSGP_TASKTYPE_NONPERIODIC);
00202                             insertItem(MSGP_TASKTYPE_PERIODIC);
00203                             insertItem(MSGP_TASKTYPE_APERIODIC);
00204 #if YASA_THREAD_MAXTYPE!=2
00205 #error Insert/Remove new item to combobox here !!!
00206 #endif
00207                             UpdateWidget();
00208                         }
00209 public slots:
00210     virtual void        UpdateWidget()                          { if ( currentItem()!=((YTask*)object)->GetTaskType() )
00211                                                                     setCurrentItem( ((YTask*)object)->GetTaskType());   }
00212     virtual void        UpdateValue(int value)                  { ((YTask*)object)->SetTaskType( value );       }
00213 };
00214 
00215 
00217 class YDeadlineBehaviourWidget : YComboWidget
00218 {   Q_OBJECT
00219 public:                 YDeadlineBehaviourWidget(YTask *task, QWidget *parent) : YComboWidget(task, parent)
00220                         {   insertItem(MSGP_DLBEHAVIOUR_IGNORE);
00221                             insertItem(MSGP_DLBEHAVIOUR_CANCEL_TASK);
00222                             insertItem(MSGP_DLBEHAVIOUR_SKIP);
00223                             insertItem(MSGP_DLBEHAVIOUR_EMERGENCY_TASK);
00224 #if YASA_DL_MAX!=3
00225 #error Insert/Remove new item to combobox here !!!
00226 #endif
00227                             UpdateWidget();
00228                         }
00229 public slots:
00230     virtual void        UpdateWidget()                          { if ( currentItem()!=((YTask*)object)->GetDeadlineBehaviour() )
00231                                                                     setCurrentItem( ((YTask*)object)->GetDeadlineBehaviour());  }
00232     virtual void        UpdateValue(int value)                  { ((YTask*)object)->SetDeadlineBehaviour( value );      }
00233 };
00234 
00235 
00237 class YInitFunctionWidget : public YStringWidget
00238 {   Q_OBJECT
00239 public:                 YInitFunctionWidget(YTask *task, QWidget *parent) : YStringWidget(task, parent) {   UpdateWidget(); }
00240 public slots:
00241     virtual void        UpdateWidget()                          { if ( ((YTask*)object)->GetInitFunction() != text() )
00242                                                                     setText( ((YTask*)object)->GetInitFunction().GetContent() );        }
00243     virtual void        UpdateValue( const QString &t)          { ((YTask*)object)->SetInitFunction( text() );
00244                                                                     Q_CONSTUNUSED(t);                                   }
00245 };
00246 
00247 
00249 class YExecuteFunctionWidget : public YStringWidget
00250 {   Q_OBJECT
00251 public:                 YExecuteFunctionWidget(YTask *task, QWidget *parent) : YStringWidget(task, parent)  {   UpdateWidget(); }
00252 public slots:
00253     virtual void        UpdateWidget()                          { if ( ((YTask*)object)->GetExecuteFunction() != text() )
00254                                                                     setText( ((YTask*)object)->GetExecuteFunction().GetContent() );     }
00255     virtual void        UpdateValue( const QString &t)          { ((YTask*)object)->SetExecuteFunction( text() );
00256                                                                     Q_CONSTUNUSED(t);                                       }
00257 };
00258 
00259 
00261 class YCleanupFunctionWidget : public YStringWidget
00262 {   Q_OBJECT
00263 public:                 YCleanupFunctionWidget(YTask *task, QWidget *parent) : YStringWidget(task, parent)  {   UpdateWidget(); }
00264 public slots:
00265     virtual void        UpdateWidget()                          { if ( ((YTask*)object)->GetCleanupFunction() != text())
00266                                                                     setText( ((YTask*)object)->GetCleanupFunction().GetContent() );     }
00267     virtual void        UpdateValue( const QString &t)          { ((YTask*)object)->SetCleanupFunction( text() );
00268                                                                     Q_CONSTUNUSED(t);                                       }
00269 };
00270 
00271 
00272 
00273 
00274 
00276 class YListViewGroup : public QGroupBox, public YWidget
00277 {   Q_OBJECT
00278 protected:
00279     YListView           *listview;
00280     QHBox               *hbox;
00281     QPushButton         *add;
00282     QPushButton         *del;
00283     QPushButton         *deleteall;
00284 public:                 YListViewGroup(YSet *set, QWidget *parent, const QString &title) :
00285                         QGroupBox(1,Horizontal,title, parent), YWidget(set),
00286                         listview(0),
00287                         hbox(0),
00288                         add(0),
00289                         del(0),
00290                         deleteall(0)
00291                         {
00292                             setAlignment(AlignHCenter);
00293                         }
00294     virtual int         InitInstance()                          { return 0;         }
00295     virtual QWidget*    GetWidget()                             { return this;      }
00296     void                InsertListView(YListView *l);
00297     int                 CreateWidgets(YSet *set, QWidget *parent);
00298 public slots:
00299     // Slots for buttons
00300     YObject*            AddEntry();
00301     void                RemoveAll();
00302     void                DeleteEntry();
00303     // Slots for listview
00304     virtual void        UpdateWidgets(QListViewItem *currentitem);
00305     virtual void        ListViewEmpty()                         { UpdateWidgets(0); }
00306 };
00307 
00308 
00310 class YResumeTimeListViewItem : public YListViewItem
00311 {   Q_OBJECT
00312 public:                 YResumeTimeListViewItem(YObject *o, QListView *parent, QListViewItem *after=0) :
00313                         YListViewItem( o, parent, after)
00314                         { }
00315                         YResumeTimeListViewItem(YObject *o, QListViewItem *parent, QListViewItem *after=0) :
00316                         YListViewItem( o, parent, after)
00317                         { }
00318 protected:
00319     QString             key(int column, bool ascending) const
00320                         {
00321                             if ( column==0)
00322                             {
00323                                 return YString::Justify( ((YResumeTime*)object)->GetTime().GetVisibleContentString() );
00324                             }
00325                             return text(column);
00326                             Q_UNUSED(ascending);
00327                         }
00328 };
00329 
00330 
00332 class YResumeTimeListView : public YListView
00333 {   Q_OBJECT
00334 public:                 YResumeTimeListView(YResumeTimeSet *s, QWidget *parent, const QString &title) :
00335                         YListView(s,parent,title)
00336                         {}
00337     virtual YListViewItem* CreateNewItem(QListViewItem *parent, YObject *object, QListViewItem *after=0)
00338                         {
00339                             if ( parent )
00340                                 return new YResumeTimeListViewItem(object,parent,after);
00341                             else
00342                                 return new YResumeTimeListViewItem(object,this,after);
00343                         }
00344 };
00345 
00346 
00348 class YResumeTimeWidget : public YListViewGroup
00349 {   Q_OBJECT
00350     QSpinBox            *edittime;
00351 public:                 YResumeTimeWidget(YResumeTimeSet *set, QWidget *parent) :
00352                         YListViewGroup(set, parent, MSGP_TASK_RESUME_TIMES),
00353                         edittime(0)
00354                         { }
00355     virtual int         InitInstance();
00356 public slots:
00357     virtual void        UpdateTime(int t);                          
00358     virtual YObject*    AddEntry();                                 
00359     virtual void        UpdateWidgets(QListViewItem *item);         
00360 };
00361 
00362 
00363 
00364 
00365 
00366 
00367 
00368 
00369 
00371 class YResourceActionListViewItem : public YListViewItem
00372 {   Q_OBJECT
00373 public:
00374     public:             YResourceActionListViewItem(YObject *o, QListView *parent, QListViewItem *after=0) :
00375                         YListViewItem( o, parent, after)
00376                         {
00377                             UpdateObject(o);                    // fill all columns
00378                         }
00379                         YResourceActionListViewItem(YObject *o, QListViewItem *parent, QListViewItem *after=0) :
00380                         YListViewItem( o, parent, after)
00381                         {
00382                             UpdateObject(o);                    // fill all columns
00383                         }
00384     YObject*            GetMutexObject()
00385                         {
00386                             return ((YResourceAction*)object)->GetMutex();
00387                         }
00388 public slots:
00389     virtual void        UpdateObject(YObject *);
00390 protected:
00392     QString             key(int column, bool ascending) const
00393                         {
00394                             switch ( column )
00395                             {
00396                             // column time
00397                             case 0: {   return YString::Justify( ((YResourceAction*)object)->GetTime().GetVisibleContentString() );
00398                                     }
00399                             // action time
00400                             default:return text(column);
00401                             }
00402                             Q_UNUSED(ascending);
00403                         }
00404 };
00405 
00407 class YResourceActionListView : public YListView
00408 {   Q_OBJECT
00409 public:                 YResourceActionListView(YResourceActionSet *s, QWidget *parent, const QString &title) :
00410                         YListView(s,parent,title)
00411                         {}
00412     virtual YListViewItem* CreateNewItem(QListViewItem *parent, YObject *object, QListViewItem *after=0)
00413                         {
00414                             if ( parent )
00415                                 return new YResourceActionListViewItem(object,parent,after);
00416                             else
00417                                 return new YResourceActionListViewItem(object,this,after);
00418                         }
00419 };
00420 
00421 
00422 
00424 class YResourceActionWidget : public YListViewGroup
00425 {   Q_OBJECT
00426     QSpinBox            *edittime;
00427     QComboBox           *actioncombo;
00428     QComboBox           *mutexcombo;
00429     YStringList         *mutexstringlist;
00430 public:                 YResourceActionWidget(YResourceActionSet *set, QWidget *parent) :
00431                         YListViewGroup(set, parent, MSGP_TASK_RESOURCE_TIMES),
00432                         edittime(0),
00433                         actioncombo(0),
00434                         mutexcombo(0),
00435                         mutexstringlist(0)
00436                         {}
00437     virtual int         InitInstance();
00438 public slots:
00439     // time in edit line was changed
00440     virtual void        TimeChanged(int t)
00441                         {
00442                             YListViewItem   *item=listview->GetCurrentItem();
00443                             if ( item )
00444                                 ((YResourceAction*)item->GetObject())->SetTime(t);
00445                         }
00446     // mutex id was changed
00447     virtual void        MutexChanged(int t)
00448                         {
00449                             YListViewItem   *item=listview->GetCurrentItem();
00450                             if ( item )
00451                                 ((YResourceAction*)item->GetObject())->SetMutex( mutexstringlist->FindObject(t) );
00452                         }
00453     // action type was changed
00454     virtual void        ActionChanged(int t)
00455                         {
00456                             YListViewItem   *item=listview->GetCurrentItem();
00457                             if ( item )
00458                                 ((YResourceAction*)item->GetObject())->SetAction(t);
00459                         }
00460     // Button "Add" pressed
00461     virtual YObject*    AddEntry();
00462     // CurrentItem changed or removed
00463     virtual void        UpdateWidgets(QListViewItem *item)
00464                         {
00465                             edittime->setEnabled( item );
00466                             actioncombo->setEnabled( item );
00467                             mutexcombo->setEnabled( item );
00468                             if ( item )
00469                             {
00470                                 edittime->setValue( ((YResourceAction*)((YResourceActionListViewItem*)item)->GetObject())->GetTime() );
00471                                 actioncombo->setCurrentItem( ((YResourceAction*)((YResourceActionListViewItem*)item)->GetObject())->GetAction() );
00472                                 mutexcombo->setCurrentItem( mutexstringlist->FindIndex(
00473                                     ((YResourceActionListViewItem*)item)->GetMutexObject())
00474                                     );
00475                             }
00476                             //else
00477                             //  edittime->setValue(0);
00478                             YListViewGroup::UpdateWidgets(item);
00479                         }
00480     // Stringlist(Mutex members) was changed
00481     void                MutexStringListChanged()
00482                         {
00483                             mutexcombo->clear();
00484                             mutexcombo->insertStringList(*mutexstringlist);
00485                             UpdateWidgets( listview->GetCurrentItem() );
00486                         }
00487 };
00488 
00489 
00490 
00491 
00492 
00494 #endif                                                                          // ifndef YASAGUI_TASKWINDOW_INCLUDE

Generated on Thu Feb 13 23:43:56 2003 for Yasa by doxygen1.3-rc3