Exemplo n.º 1
0
AdminMainWidget::AdminMainWidget(LinQedInAdmin* ad,QWidget* parent):QFrame(parent),admin(ad){
    setAttribute(Qt::WA_DeleteOnClose);
    setStyleSheet(GUIStyle::generalStyle());
    mainVerticalLayout=new QVBoxLayout;

    logo=new QLabel;
    GUIStyle::initLogo(logo);
    mainVerticalLayout->addWidget(logo,0,Qt::AlignRight);

    loggedAsAdmin=new QLabel(tr("Modalità amministratore"));
    loggedAsAdmin->setStyleSheet(GUIStyle::headerStyle());
    mainVerticalLayout->addWidget(loggedAsAdmin,0,Qt::AlignCenter);
    mainVerticalLayout->addSpacing(15);

    searchLayout=new QHBoxLayout;
    initUsernameSearch();
    users=new QListWidget;
    users->setHidden(true);
    users->setEditTriggers(users->NoEditTriggers);
    users->setSelectionMode(QAbstractItemView::NoSelection);
    users->setMinimumWidth(450);
    users->setMinimumHeight(430);
    users->setStyleSheet("QListWidget{"+GUIStyle::borderStyle()+"padding:20px;padding-top:5px;}");
    searchLayout->addWidget(users,5,Qt::AlignHCenter | Qt::AlignTop);
    initNameSurnameSearch();
    mainVerticalLayout->addLayout(searchLayout);

    noUsers=new QLabel(tr("Nessun utente nel DB"));
    noUsers->setStyleSheet(GUIStyle::errorLabelStyle());
    mainVerticalLayout->addWidget(noUsers,0,Qt::AlignCenter);

    buttonsLayout=new QHBoxLayout;
    save=new QPushButton(tr("Salva modifiche al DB"));
    save->setCursor(QCursor(Qt::PointingHandCursor));
    save->setMaximumWidth(buttonsMaxWidth);
    connect(save,SIGNAL(clicked()),this,SLOT(saveDB()));
    buttonsLayout->addWidget(save,0,Qt::AlignCenter);
    add=new QPushButton(tr("Aggiungi un nuovo utente"));
    add->setCursor(QCursor(Qt::PointingHandCursor));
    add->setMaximumWidth(buttonsMaxWidth);
    connect(add,SIGNAL(clicked()),this,SLOT(addUserRequest()));
    buttonsLayout->addWidget(add,0,Qt::AlignCenter);
    logout=new QPushButton(tr("Logout"));
    logout->setCursor(QCursor(Qt::PointingHandCursor));
    connect(logout,SIGNAL(clicked()),this,SLOT(logoutRequest()));
    logout->setMaximumWidth(buttonsMaxWidth);
    buttonsLayout->addWidget(logout,0,Qt::AlignCenter);
    mainVerticalLayout->addLayout(buttonsLayout);

    populateList(admin->allUsers());
    setLayout(mainVerticalLayout);

    QShortcut *save=new QShortcut(QKeySequence("Ctrl+S"),this);
    connect(save,SIGNAL(activated()),this,SLOT(saveDB()));
}//AdminMainWidget
/*******************************************************************
*
* エレベーター制御文
*
*******************************************************************/
void Elevator::CntorolStatement()
{
	switch(m_ControlState)
	{
	case CONTROL::FREE://フリー状態
		break;

	case CONTROL::MOVE://目的フロア移動する状態
		//目的地でなければ
		if( !m_CDataSupport.isDestination() ){
			//エレベーター稼働
			Running();
		}
		//目的地ならば
		else{
			//エレベーター停止処理
			StopProcess();

			//全搭乗口の進路ガイドの方向を進路方向に変える
			setAllGuideVector(m_CDataSupport.m_CourseDirection);

			//制御を到着状態に
			m_ControlState = CONTROL::ARRIVE;
		}
		break;

	case CONTROL::ARRIVE://フロアに到着した状態
		//ゲートを開く
		if( m_CGate[m_Gate_Ypos]!=NULL ){
			//ゲートに開閉指示をだす
			m_CGate[m_Gate_Ypos]->StartOperation();
		}
		//制御を待機状態に
		m_ControlState = CONTROL::WAIT;
		break;

	case CONTROL::WAIT://待機状態
		//ゲートが完全に開いたら
		if( m_CGate[m_Gate_Ypos]->getDoorState() == ELEVATOR::OPEN ){
			//降りたい利用者を降ろす
			UserTakeDown();
			break;
		}
		//ゲートが半端なら
		else if( m_CGate[m_Gate_Ypos]->getDoorState() == ELEVATOR::HALF ){
			break;
		}
		//ゲートが完全に閉まっていれば
		else if( m_CGate[m_Gate_Ypos]->getDoorState() == ELEVATOR::CLOSE ){

			//待機時間をリセット
			m_CGate[m_Gate_Ypos]->OperationReset();

			//乗客がいれば
			if(m_isUserRiding){
				
				//同フロア対策
				m_State = m_CDataSupport.m_CourseDirection;

				//利用者の要求を追加
				addUserRequest();

				//始動準備させる
				StartSetting();
				break;
			}
			
			//要求が無ければ
			if( !m_CDataSupport.isCallRequest() )
			{
				DirectionClear();//エレベーターの方向データを全て初期化
				m_CGate[m_Gate_Ypos]->StateReset();//ゲートの状態を初期化
				m_ControlState = CONTROL::FREE;//制御をフリー状態に初期化
			}
		}
		break;
	}
}