00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00028
00030
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() )
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 {
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
00300 YObject* AddEntry();
00301 void RemoveAll();
00302 void DeleteEntry();
00303
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);
00378 }
00379 YResourceActionListViewItem(YObject *o, QListViewItem *parent, QListViewItem *after=0) :
00380 YListViewItem( o, parent, after)
00381 {
00382 UpdateObject(o);
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
00397 case 0: { return YString::Justify( ((YResourceAction*)object)->GetTime().GetVisibleContentString() );
00398 }
00399
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
00440 virtual void TimeChanged(int t)
00441 {
00442 YListViewItem *item=listview->GetCurrentItem();
00443 if ( item )
00444 ((YResourceAction*)item->GetObject())->SetTime(t);
00445 }
00446
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
00454 virtual void ActionChanged(int t)
00455 {
00456 YListViewItem *item=listview->GetCurrentItem();
00457 if ( item )
00458 ((YResourceAction*)item->GetObject())->SetAction(t);
00459 }
00460
00461 virtual YObject* AddEntry();
00462
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
00477
00478 YListViewGroup::UpdateWidgets(item);
00479 }
00480
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