SourceSelectorWidget::SourceSelectorWidget(QLineEdit* edit, QWidget* parent)
    :StylableWidget(parent)
{
    QGridLayout* grid = new QGridLayout(this);

    m_edit = edit;
    m_edit->setParent(this);

    grid->setContentsMargins( 0, 0, 0, 0 );
    grid->addWidget(m_edit, 0, 0);

    m_button = new QPushButton(tr("Add"));
    grid->addWidget(m_button, 0, 1);
    grid->setColumnStretch(0, 3);
    onTextChanged(m_edit->text());

    m_list = new QListWidget();
    m_list->setIconSize(QSize(0,0));
    grid->addWidget(m_list, 1, 0, 1, 2);

    connect(m_edit, SIGNAL(returnPressed()), SLOT(emitAdd())); 
    connect(m_edit, SIGNAL(textChanged(QString)), SLOT(onTextChanged(QString)));
    connect(m_button, SIGNAL(clicked()), SLOT(emitAdd()));
    connect(m_list, SIGNAL(itemActivated(QListWidgetItem *)), SIGNAL(itemActivated(QListWidgetItem *)));
}
Example #2
0
static void genExp(TreeNode *tree, TreeType ttype)
{
	TreeNode *t1, *t2;
	int loc = 0;
	int tempvar_loc = 0;

	t1 = tree->child[0];
	t2 = tree->child[1];
	switch (tree->kind.exp)
	{
	case ConstK:
		//emitLOC(REG_EAX, tree->attr.token.val);
		break;

	case IdK:
		//loc = st_lookup(tree->attr.token.stype);
		//emitLOV_N(REG_EAX, loc);
		break;

	case OpK:
		genExp(t1, LEFT);
		genExp(t2, RIGHT);

		switch (t1->kind.exp)
		{
		case ConstK:
			emitLOC(REG_EAX, t1->attr.token.val);
			break;

		case IdK:
			loc = st_lookup(t1->attr.token.stype);
			emitLOV_N(REG_EAX, loc);
			tempvar_loc = mallocTempVar();
			emitMov(REG_EAX, tempvar_loc, VTYPE_TEMP);
			break;

		case OpK:
			break;
		}

		switch (t2->kind.exp)
		{
		case ConstK:
			emitLOC(REG_EBX, t2->attr.token.val);
			break;

		case IdK:
			loc = st_lookup(t2->attr.token.stype);
			emitLOV_N(REG_EBX, loc);
			break;

		case OpK:
			break;
		}

		switch (ttype)
		{
		int tempvar_loc;
		case ROOT:
			switch (tree->attr.token.ttype)
			{
			case ADD:
				emitLOV(REG_EAX, 0, VTYPE_TEMP);
				emitLOV(REG_EBX, 1, VTYPE_TEMP);
				emitAdd(REG_EBX, REG_EAX);
				freeTempVar();
				freeTempVar();
				break;
			case SUB:


				break;
			case MUL:
				emitLOV(REG_EAX, 0, VTYPE_TEMP);
				emitLOV(REG_EBX, 1, VTYPE_TEMP);
				emitMul(REG_EBX, REG_EAX);
				freeTempVar();
				freeTempVar();
				break;

			case DIV:
				break;
			}

		break;

		case LEFT:
			switch (tree->attr.token.ttype)
			{
			case ADD:
				emitAdd(REG_EBX, REG_EAX);
				tempvar_loc = mallocTempVar();
				emitMov(REG_EAX, tempvar_loc, VTYPE_TEMP);
				break;
			case SUB:

				break;

			case MUL:
				emitMul(REG_EBX, REG_EAX);
				tempvar_loc = mallocTempVar();
				emitMov(REG_EAX, tempvar_loc, VTYPE_TEMP);
				break;

			case DIV:
				break;
			}
		break;

		case RIGHT:
			switch (tree->attr.token.ttype)
			{
			case ADD:
				emitAdd(REG_EAX, REG_EBX);
				tempvar_loc = mallocTempVar();
				emitMov(REG_EBX, tempvar_loc, VTYPE_TEMP);
				break;

			case SUB:
				break;

			case MUL:
				emitMul(REG_EAX, REG_EBX);
				tempvar_loc = mallocTempVar();
				emitMov(REG_EBX, tempvar_loc, VTYPE_TEMP);
				break;

			case DIV:
				break;
			}
		 break;
		};

	break;
	}
}