Example #1
0
// 鼠标按下捕获器
void CDrawWin::mousePressEvent(QMouseEvent* event)
{
    switch(m_curMenuStatus) {
    case MENU_STATUS_NONE:
    {
        qDebug() << __func__ << " " << __LINE__ ;
        bool bHit,bCtrlHit;
        m_curShape = HitTest(event,bHit,bCtrlHit);
        if(m_curShape != NULL) {
            if(bCtrlHit) {
                QApplication::setOverrideCursor(Qt::PointingHandCursor);
            }else {
                if(bHit) {
                    QApplication::setOverrideCursor(Qt::ClosedHandCursor);
                }
            }

            m_curShape->mousePressEvent(event);
        }

    }
        break;
    case MENU_STATUS_LINE:
    {
        process_line(event);
    }
        break;
    case MENU_STATUS_CIRCLE:
    {
        process_circle(event);
    }
        break;
    case MENU_STATUS_RECTANGE:
    {
        qDebug() << __func__ << " " << __LINE__ ;
        process_rectangle(event);
    }
        break;
    case MENU_STATUS_POLYGON:
    {
        qDebug() << __func__ << " " << __LINE__ ;
        process_polygon(event);
    }
        break;
    case MENU_STATUS_ANGLE:
    {
        process_angle(event);
    }
        break;
    case MENU_STATIS_DEL:
    {
        bool bHit,bCtrlHit;
        m_curShape = HitTest(event,bHit,bCtrlHit);
        if(m_curShape != NULL) {
            if(m_curShape == m_shapeList[0]) {
                QMessageBox msgBox;
                msgBox.setText("Can not delete the scale.");
                msgBox.exec();
                break;
            }
            if(bHit) {
                if(m_curShape == m_shapeList[m_shapeList.size() - 1]) {
                    m_shapeList.pop_back();
                    QApplication::setOverrideCursor(Qt::ArrowCursor);
                    update();
                }else {
                    QVector<CShape*>::iterator it = m_shapeList.begin();
                    for(;it != m_shapeList.end();it++) {
                        if((*it) == m_curShape) {
                            m_shapeList.erase(it);
                            QApplication::setOverrideCursor(Qt::ArrowCursor);
                            update();
                        }
                    }
                }
            }
        }
    }
        break;
    }
}
Example #2
0
int processOperator(Drawing d, char *op) {
	int res = 0;

	// Look for which operator it is and then process it
	for (int i = 0; i < N_OPS_AVAILABLE; i++) {
		if (strlen(op) == strlen(OPS_AVAILABLE[i]) && strcmp(op, OPS_AVAILABLE[i]) == 0) {
			switch (i) {
				case 0:
					res = process_sum(d->stack);
					break;
				case 1:
					res = process_subtraction(d->stack);
					break;
				case 2:
					res = process_multiplication(d->stack);
					break;
				case 3:
					res = process_division(d->stack);
					break;
				case 4:
					res = process_pi(d->stack);
					break;
				case 5:
					res = process_sin(d->stack);
					break;
				case 6:
					res = process_cos(d->stack);
					break;
				case 7:
					res = process_deg(d->stack);
					break;
				case 8:
					res = process_cm(d->stack);
					break;
				case 9:
					res = process_mm(d->stack);
					break;
				case 10:
					res = process_pt(d->stack);
					break;
				case 11:
					res = process_copy(d->stack);
					break;
				case 12:
					res = process_translate(d->stack);
					break;
				case 13:
					res = process_mtranslate(d->stack);
					break;
				case 14:
					res = process_rotate(d->stack);
					break;
				case 15:
					res = process_mrotate(d->stack);
					break;
				case 16:
					res = process_line(d);
					break;
				case 17:
					res = process_circle(d);
					break;
				case 18:
					res = process_fillcircle(d);
					break;
				case 19:
					res = process_show(d->stack);
					break;
				case 20:
					res = process_tan(d->stack);
					break;
				case 21:
					res = process_arcsin(d->stack);
					break;
				case 22:
					res = process_arccos(d->stack);
					break;
				case 23:
					res = process_arctan(d->stack);
					break;
				case 24:
					res = process_eraseline(d);
					break;
				case 25:
					res = process_e(d->stack);
					break;
				case 26:
					res = process_lg(d->stack);
					break;
				case 27:
					res = process_ln(d->stack);
					break;
				case 28:
					res = process_log(d->stack);
					break;
				case 29:
					res = process_abs(d->stack);
					break;
				default:
					res = throw_error(op, PROCESSOR_ERROR_ILEGAL_OP);
					break;
			}

			break;
		}
	}

	return res;
}