/** * @file SubmitWorkflowDialog.h * @brief 提交工作流对话框 * @date 2014-12-10 */ #ifndef PAI_FRAME_WORKFLOWVIEW_SUBMITWORKFLOWDIALOG_H_ #define PAI_FRAME_WORKFLOWVIEW_SUBMITWORKFLOWDIALOG_H_ #include "PaiDialog.h" #include "Job.h" #include class QStackedWidget; class QTableWidget; namespace pai { namespace gui { class PaiPushButton; class PaiLabel; class PaiNameLineEdit; class PaiCheckBox; class PaiCollapsibleWidget; } } namespace pai { namespace gui { /** * @class SubmitWorkflowDialog * @brief 提交工作流对话框 */ class SubmitWorkflowDialog : public PaiDialog { Q_OBJECT public: /** * @brief 表示一条资源信息 */ struct ResItem { QString queueName; // 队列名称 QString mainTitle; // 主标题 QString totalTitle; // 总资源量标题 QString freeTitle; // 可用资源量标题 QString usedTitle; // 已经使用资源量标题 long total; // 总资源量 long used; // 已经使用资源量 long required; // 所需资源量 }; /** * @brief 构造函数 * @param[in] pParent 父窗口句柄 */ SubmitWorkflowDialog(QWidget *pParent = NULL); /** * @brief 析构函数 */ virtual ~SubmitWorkflowDialog(); /** * @brief 设置map slot的资源信息 * @param[in] item 槽资源的信息 */ void SetCpuItem(const ResItem& item); /** * @brief 设置配额资源的信息 * @param[in] item 配额资源信息 */ void SetStorageItem(const ResItem& item); /** * @brief 设置作业名称 * @param[in] jobName 作业名称 */ void SetJobName(const QString& jobName); /** * @brief 获取作业名称 * @return 作业名称 */ QString GetJobName(); /** * @brief 根据槽信息和配额信息添加Widget */ void SetWidgets(); /** * @brief 获取作业优先级 * @return 作业优先级 */ pai::ios::job::JobPriority GetPriority(); /** * @brief 获取队列名称 * @return 队列名称 */ QString GetQueueName(); private slots: /** * @brief 点击NormalRadioButton时触发 * @param[in] toggled true选中,false取消选中 */ void ToggleNormalRadio(bool toggled); /** * @brief 点击SpecialRadioButton时触发 * @param[in] toggled true选中,false取消选中 */ void ToggleSpecialRadio(bool toggled); /** * @brief 显示所有的特殊队列 */ void ExpandAllSpecilaQueue(); /** * @brief 收起所有的特殊队列 */ void CollapseAllSpecilaQueue(); /** * @brief 选中当前被选中radioButton所在行 * @param[in] toggled true选中,false取消选中 */ void SelectCurrentRow(bool toggled); /** * @brief 选中当前行以及当前行的radioButton */ void SelectCurrentRadioBtn(); /** * @brief 权限checkBox选中 * @param[in] checked true选中,false取消选中 */ void SetPriority(int checked); private: /** * @brief 清理槽Widget */ void ClearCpuWidget(); /** * @brief 设置特殊队列时,槽资源的Widget */ void SetSpecialCpuWidget(); /** * @brief 根据队列名称获取队列的槽信息 * @param[in] name 队列名称 * @return 槽信息 */ ResItem GetSpecialQueueResItem(const QString& name); /** * @brief 获取所有特殊队列的槽信息 * @return 所有特殊队列槽信息 */ QList GetSpecialQueueResItems(); /** * @brief 设置普通队列的槽Widget */ void SetCpuWidget(); /** * @brief 设置配额的Widget */ void SetStorageWidget(); /** * @brief 根据item信息添加Widget * @param[in] item 槽或者配额信息 * @param[in] pIcon 槽或者配额对应图标 */ QWidget* AddItemWidget(const ResItem& item, PaiLabel *pIcon); /** * @brief 根据队列槽总数设置continue状态 * @param[in] name 队列名称 */ void UpdateContinueBtn(const QString& name); /** * @brief 根据队列名称获取当前的特殊队列的槽资源 * @param[in] name 队列名称 */ ResItem GetCurrentItem(const QString& name); private: QWidget *m_pCpuWgt; //普通队列槽信息Widget显示容器 QWidget *m_pSpecialCpuWgt; //特殊队列槽信息Widget显示容器 QStackedWidget *m_pStack; //槽信息分页显示布局器 QWidget *m_pStorage; //配额信息Widget显示容器 PaiPushButton *m_pContinuePBtn; //continue按钮 PaiPushButton *m_pCancelPBtn; //Cancel按钮 PaiNameLineEdit *m_pJobNameEdit; //作业名称编辑框 ResItem m_cpuItem; //普通队列槽信息 ResItem m_storageItem; //配额信息 QCheckBox *m_priorityCheckBox; //作业优先级设置checkBox PaiCollapsibleWidget *m_pExtendCtrl; //所有特殊队列展示控制控件 QTableWidget *m_pTable; //展示特殊队列的表格 pai::ios::job::JobPriority m_priority; //记录当前的作业优先级 QString m_currentSQueue; //当前队列名称 QList m_items; //特殊队列的槽资源信息 }; } } #endif