def __init__(self, parent=None): super(TaskWorkspace, self).__init__(parent) self.add_menu = AddTaskMenu(self) self.add_menu.setMinimumWidth(100) self.add_menu.buttonClicked.connect(self.on_add_menu_clicked) self.add_menu.setWindowFlags(QtCore.Qt.Popup) self.add_menu.hide() self.__layout = QtGui.QVBoxLayout() self.__layout.setContentsMargins(0, 0, 0, 0) self.setLayout(self.__layout) self.toolbar = TaskToolBar() self.toolbar.buttonClicked.connect(self.on_toolbar_clicked) self.__layout.addWidget(self.toolbar) # main area self.main_area = QtGui.QSplitter() self.main_area.setContentsMargins(10, 0, 10, 10) self.__layout.addWidget(self.main_area) # 添加任务树 self.task_tree_model = task_tree.TaskTreeModel() self.task_tree_view = task_tree.TaskTreeView() self.task_tree_view.add_default_headers() self.task_tree_view.setModel(self.task_tree_model) self.task_tree_model.set_view(self.task_tree_view) self.main_area.addWidget(self.task_tree_view) # 添加属性编辑器,时间线,流程图 self.side_area = QtGui.QStackedWidget() self.main_area.addWidget(self.side_area) self.task_attr_editor = task_editor.TaskEditor() self.side_area.addWidget(self.task_attr_editor) self.task_workflow = TaskWorkFlow() self.side_area.addWidget(self.task_workflow) self.task_timeline = TaskTimeLine() self.side_area.addWidget(self.task_timeline) self.task_tree_view.clicked.connect(self.on_select_task) self.task_attr_editor.attr_editor.save_task.connect(self.on_save_task) self.set_side_to_attribute()
class TaskWorkspace(QtGui.QWidget): add_menu = None attribute_editor = None def __init__(self, parent=None): super(TaskWorkspace, self).__init__(parent) self.add_menu = AddTaskMenu(self) self.add_menu.setMinimumWidth(100) self.add_menu.buttonClicked.connect(self.on_add_menu_clicked) self.add_menu.setWindowFlags(QtCore.Qt.Popup) self.add_menu.hide() self.__layout = QtGui.QVBoxLayout() self.__layout.setContentsMargins(0, 0, 0, 0) self.setLayout(self.__layout) self.toolbar = TaskToolBar() self.toolbar.buttonClicked.connect(self.on_toolbar_clicked) self.__layout.addWidget(self.toolbar) # main area self.main_area = QtGui.QSplitter() self.main_area.setContentsMargins(10, 0, 10, 10) self.__layout.addWidget(self.main_area) # 添加任务树 self.task_tree_model = task_tree.TaskTreeModel() self.task_tree_view = task_tree.TaskTreeView() self.task_tree_view.add_default_headers() self.task_tree_view.setModel(self.task_tree_model) self.task_tree_model.set_view(self.task_tree_view) self.main_area.addWidget(self.task_tree_view) # 添加属性编辑器,时间线,流程图 self.side_area = QtGui.QStackedWidget() self.main_area.addWidget(self.side_area) self.task_attr_editor = task_editor.TaskEditor() self.side_area.addWidget(self.task_attr_editor) self.task_workflow = TaskWorkFlow() self.side_area.addWidget(self.task_workflow) self.task_timeline = TaskTimeLine() self.side_area.addWidget(self.task_timeline) self.task_tree_view.clicked.connect(self.on_select_task) self.task_attr_editor.attr_editor.save_task.connect(self.on_save_task) self.set_side_to_attribute() def update_task_tree(self): if hc.TaskRoot: self.task_tree_model.add_project_task_tree(hc.TaskRoot) def load_current(self): hc.TaskRoot = hc.Project.task_tree() self.task_tree_model.add_project_task_tree(hc.TaskRoot) def get_selected_index(self): selects = self.task_tree_view.selectedIndexes() if selects: return selects[0] return None def on_toolbar_clicked(self, tool_name): if tool_name == "add": self.show_add_menu() if tool_name == "delete_task": self.delete_task() if tool_name == "update": self.update_task_tree() if tool_name == "attribute": self.set_side_to_attribute() if tool_name == "timeline": self.set_side_to_timeline() if tool_name == "workflow": self.set_side_to_workflow() def on_add_menu_clicked(self, menu_name): self.add_menu.hide() if menu_name == "add_task": self.add_task() def show_add_menu(self): pos = self.toolbar.mapToGlobal(QtCore.QPoint(0, 0)) self.add_menu.move(pos + QtCore.QPoint(0, self.toolbar.height())) self.add_menu.show() def set_side_to_attribute(self): self.side_area.setCurrentWidget(self.task_attr_editor) self.main_area.setSizes([self.width()*0.8, self.width()*0.2]) def set_side_to_timeline(self): self.task_timeline.clear() self.task_timeline.add_test() self.side_area.setCurrentWidget(self.task_timeline) self.main_area.setSizes([self.width()*0.2, self.width()*0.8]) def set_side_to_workflow(self): self.task_workflow.clear() self.task_workflow.add_test() self.side_area.setCurrentWidget(self.task_workflow) self.main_area.setSizes([self.width()*0.2, self.width()*0.8]) def add_task(self): add_task_dialog = task_dialog.AddTaskDialog(self) if add_task_dialog.exec_() == QtGui.QDialog.Accepted: data = add_task_dialog.get_data() if not hc.Project: return False data['project_code'] = hc.Project.project_code() data['parent_code'] = hc.Project.project_code() parent_index = self.get_selected_index() if parent_index: parent_task = self.task_tree_model.get_task(parent_index) data['parent_code'] = parent_task.task_code() print data task = honey.Task(data) if task.add_to_db(): if parent_index: self.task_tree_model.add_task(task, parent_index) self.task_tree_view.expand(parent_index) else: self.task_tree_model.add_task(task, QtCore.QModelIndex()) print "Add task %s successful." % task.name() return True return False def delete_task(self): sel_index = self.get_selected_index() if sel_index: task = self.task_tree_model.get_task(sel_index) conform_box = QtGui.QMessageBox.critical( None, u"删除确认", u"确认要删除任务 %s 么?" % task.name(), QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Cancel ) if conform_box == QtGui.QMessageBox.Ok: print "Remove task %s." % task.name() self.task_tree_model.remove_task(sel_index) return True else: return False def clear_sel(self): self.task_tree_view.clearSelection() def on_select_task(self, index): selects = self.task_tree_view.selectedIndexes() if selects: hc.BeginSelectIndex = selects[0] hc.EndSelectIndex = selects[-1] hc.CurrentTask = self.task_tree_model.get_task(index) self.task_attr_editor.load_current() def on_save_task(self): self.task_tree_model.changePersistentIndex(hc.BeginSelectIndex, hc.EndSelectIndex)