Ejemplo n.º 1
0
BOOL LLImageWorker::requestDecodedAuxData(LLPointer<LLImageRaw>& raw, S32 channel, S32 discard)
{
	// For most codecs, only mDiscardLevel data is available.
	//  (see LLImageDXT for exception)
	if (discard >= 0 && discard != mFormattedImage->getDiscardLevel())
	{
		llerrs << "Request for invalid discard level" << llendl;
	}
	checkWork();
	if (mDecodedType == -2)
	{
		return TRUE; // aborted, done
	}
	if (mDecodedType != channel)
	{
		if (!haveWork())
		{
			addWork(channel, mPriority);
		}
		return FALSE;
	}
	else
	{
		llassert_always(!haveWork());
		llassert_always(mDecodedType == channel);
		raw = mDecodedImage; // smart pointer acquires ownership of data
		mDecodedImage = NULL;
		return TRUE;
	}
}
Ejemplo n.º 2
0
	bool complete() { return checkWork(); }
Ejemplo n.º 3
0
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Блок действий с работой/доплатой
//------------------------------------------------------------------------------
//=====================================================================
// добавление/редактирование работы
TWork* TController::addWork()
{
	bool payment = false;	// добавляется доплата или работа
	if(formWork->rgType->ItemIndex == 1)
		payment = true;
	//--------------------------------------------------------------------------
	/* 1) проверяются, заполнены ли все поля  */
	if((Trim(formWork->edtNumber->Text) == "") || (Trim(formWork->memoTitle->Text) == ""))
	{
		ShowMessage("Не все поля заполнены!");
		return NULL;
	}
	//--------------------------------------------------------------------------
	// если добавляется доплата, смотрим, есть ли такая работа
	if(payment)
	{
		bool flag = false; // есть ли такая работа
		int wnum = 0;
		for(int i=0; i<selectedKHR->Works.size(); i++)
		{
			if(StrToInt(formWork->edtNumber->Text) == selectedKHR->Works[i]->ulWorkNum)
			{
				flag = true;
				wnum = i;
			}
		}
		if(!flag)
		{
			ShowMessage("Нет работы, к которой добавляется доплата.");
			return NULL;
		}
		else if (selectedKHR->Works[wnum]->havePayment && selectedWork == NULL)
		{
			ShowMessage("У этой работы уже есть доплата.");
			return NULL;
		}
	}
	else
	/* проверка на наличие такой работы */
	{
		for(int i=0; i<selectedKHR->Works.size(); i++)
		{
			// собственный номер работы пропускается
			if((selectedWork != NULL) && (selectedWork->ulWorkNum == selectedKHR->Works[i]->ulWorkNum))
				break;
			else if(StrToInt(formWork->edtNumber->Text) == selectedKHR->Works[i]->ulWorkNum && (!payment))
			{
				ShowMessage("Работа с таким номером существует!");
				return NULL;
			}
		}
	}
	//--------------------------------------------------------------------------
	/* проверка правильности ввода дат начала и окончания */
	if((int)formWork->dtStartDate->Date > (int)formWork->dtEndDate->Date)
	{
		ShowMessage("Работа не может начинаться раньше, чем заканчивается!");
		return NULL;
	}
	//--------------------------------------------------------------------------
	/* заполнение информации о работе */
	TWork *newWork = new TWork;
	newWork->ulWorkNum = StrToInt(formWork->edtNumber->Text);
	if(payment)
		newWork->bPayment = true;
	else
		newWork->bPayment = false;
	newWork->szTitle = STR(formWork->memoTitle->Text);
	for (int i=0; i < formWork->sgWorks->RowCount; i++)
	{
		if(formWork->sgWorks->Cells[0][i] != "")
		{
			if(StrToInt(formWork->sgWorks->Cells[0][i]) != newWork->ulWorkNum)
			{
				if(Model->existWork(selectedKHR, StrToInt(formWork->sgWorks->Cells[0][i])))
				{
					// добавить проверку на наличие такой работы в КХР
					TDependance *dep=new TDependance;
					dep->ulWork = StrToInt(formWork->sgWorks->Cells[0][i]);
					if(formWork->listReq->Items->Item[i]->Checked == true)
						dep->bNeedToStart = true;
					else
						dep->bNeedToStart = false;
					newWork->WorkDep.push_back(dep);
				}
				else
				{
					ShowMessage("Нет работы с номером, указанным в зависимости!");
					delete newWork;
					return NULL;
				}
			}
			else
			{
				ShowMessage("У работы не может быть связь от самой себя!");
				delete newWork;
				return NULL;
			}
		}
	}
	newWork->dtStart = StrToDate(DateToStr(formWork->dtStartDate->Date));
	newWork->dtEnd	 = StrToDate(DateToStr(formWork->dtEndDate->Date));
	newWork->ulLength = Model->numWorkDays(newWork->dtStart, newWork->dtEnd);
	newWork->center.x = workCoord.x;
	newWork->center.y = workCoord.y;

	/* 	в случае если происходит редактирование работы,
		её состояние и координаты должны сохраняться */
	if(!formMain->AddOrEdit)
		newWork->eWorkState = selectedWork->eWorkState;
	else
		newWork->eWorkState = E_WS_OPEN;


	//--------------------------------------------------------------------------
	/* 3) проверка на корректность связей: для доплаты проверка не производится */
	if (formWork->cbCorrect->Checked == true && !payment)
	{
		if(!checkWork(selectedKHR, newWork))
		{
			ShowMessage("Связи некорректны! ");
			delete newWork;
			return NULL;
		}
	}
	//--------------------------------------------------------------------------
	/* 4) проверка на наличие исполнителей */
	for (int i=0; i < formWork->sgVolume->RowCount; i++)
	{
		if(formWork->sgVolume->Cells[0][i] != "") //если строчка заполнена
		{
			// проверка на наличие исполнителя
			if(!Model->checkExecutor(selectedKHR, STR(formWork->sgVolume->Cells[0][i])))
			{
				if(MessageDlg("Такого исполнителя: " + formWork->sgVolume->Cells[0][i]+ " - не существует! Добавить в список?",
					mtInformation, TMsgDlgButtons() << mbNo << mbYes , 7) == 7)
				{
					// нажата кнопка "Отмена"
					delete newWork;
					return NULL;
				}
				else
				{
					// добавление нового исполнителя в список
					Model->addExecutor(selectedKHR, STR(formWork->sgVolume->Cells[0][i]));

					TWorkVolume *vol = new TWorkVolume;
					int id = Model->executorByName(selectedKHR, STR(formWork->sgVolume->Cells[0][i]));
					vol->ulExecutor = id;
					for(int j=1; j<formWork->sgVolume->ColCount; j++)
					{
						if(formWork->sgVolume->Cells[j][i] != "")
						{
							if(StrToFloat(Trim(formWork->sgVolume->Cells[j][i])) != 0)
							{
								bool k = Model->checkQuart(j, newWork->dtStart, newWork->dtEnd);
								if(!k)
								{
									ShowMessage("Неправильно распределена трудоёмкость по кварталам!");
									delete newWork;
									return NULL;
								}
							}
							vol->ulVolume[j-1] = StrToInt(formWork->sgVolume->Cells[j][i]);
						}
						else
							vol->ulVolume[j-1] = 0;
					}
					newWork->WorkVolume.push_back(vol);
				}
			}
			else
			{
				// исполнитель существует
				TWorkVolume *vol = new TWorkVolume;
				int id = Model->executorByName(selectedKHR, STR(formWork->sgVolume->Cells[0][i]));
				vol->ulExecutor = id;

				for(int j=1; j<formWork->sgVolume->ColCount; j++)
				{
					if(formWork->sgVolume->Cells[j][i] != "")
					{
						if(StrToFloat(Trim(formWork->sgVolume->Cells[j][i])) != 0)
						{
							bool k = Model->checkQuart(j, newWork->dtStart, newWork->dtEnd);
							if(!k)
							{
								ShowMessage("Неправильно распределена трудоёмкость по кварталам!");
								delete newWork;
								return NULL;
							}
						}
						vol->ulVolume[j-1] = StrToInt(formWork->sgVolume->Cells[j][i]);
					}
					else
						vol->ulVolume[j-1] = 0;
				}
				newWork->WorkVolume.push_back(vol);
		 	}
		}
	}
    // установка связи доплаты с работой при редактировании доплаты
	if(payment)
		if(!formMain->AddOrEdit)
		{
			for(int i = 0;i < selectedKHR->Works.size(); i ++)
			{
				if(selectedKHR->Works[i]->ulWorkNum == newWork->ulWorkNum)
				{
					selectedKHR->Works[i]->havePayment = true;
					Model->addPayment(selectedKHR->Works[i], selectedWork);
				}
				if(selectedKHR->Works[i]->ulWorkNum == selectedWork->ulWorkNum)
				{
					selectedKHR->Works[i]->connectPayment.clear();
					selectedKHR->Works[i]->havePayment = false;
				}
			}
		}
	// Изменение номера редактируемой работы у связанных с ней работ, доплат, вех
	if(!formMain->AddOrEdit)
		if(selectedWork->ulWorkNum != newWork->ulWorkNum)
		{
			vector <TWork*> workNext = Model->getNext(selectedKHR, selectedWork);
			vector <TWork*> workPrev;
			for(int t = 0; t < workNext.size(); t ++)
				for(int i = 0; i < selectedKHR->Works.size(); i++)
					if(selectedKHR->Works[i]->ulWorkNum == workNext[t]->ulWorkNum)
					{
						for(int j = 0; j < selectedKHR->Works[i]->WorkDep.size(); j++)
							if(selectedKHR->Works[i]->WorkDep[j]->ulWork == selectedWork->ulWorkNum)
								selectedKHR->Works[i]->WorkDep[j]->ulWork = newWork->ulWorkNum;
					}
			for(int i = 0; i < selectedKHR->Payments.size(); i++)
				if(selectedKHR->Payments[i]->ulWorkNum == selectedWork->ulWorkNum)
					selectedKHR->Payments[i]->ulWorkNum = newWork->ulWorkNum;
			for(int i = 0; i < selectedKHR->Stages.size(); i++)
				if(selectedKHR->Stages[i]->ulStageNum == selectedWork->ulWorkNum)
					selectedKHR->Stages[i]->ulStageNum = newWork->ulWorkNum;
			for(int i =0; i < selectedKHR->Connects.size(); i++)
				if(selectedKHR->Connects[i]->begin == selectedWork->ulWorkNum)
					selectedKHR->Connects[i]->begin = newWork->ulWorkNum;
		}
	/* проверки пройдены, работа включается в список
	   новая работа => добавление */
	if(formMain->AddOrEdit)
	{
		selectedWork = newWork;
		if(formWork->rgType->ItemIndex == 0)
		{
			selectedKHR->Works.push_back(newWork);
			Model->addConnections(selectedKHR, selectedWork);
		}
		else
		{
			// нужно изменить информацию о работе, к кот. добавляется доплата
			TWork* pwork = getWorkByNum(selectedKHR, newWork->ulWorkNum);
			pwork->havePayment = true;
			Model->addPayment(pwork, newWork);
			selectedKHR->Payments.push_back(newWork);
		}
	}
	else
	{
		newWork->center.x = selectedWork->center.x ;
		newWork->center.y = selectedWork->center.y ;
		Model->editWork(selectedWork, newWork);
		if(!selectedWork->bPayment)
			Model->addConnections(selectedKHR, selectedWork);
		coordClear();
		delete newWork;
	}
 //	clearSelected();	// ни работа, ни КХР не выбрана
	return selectedWork;
}