Esempio n. 1
0
PythonBrowserView::PythonBrowserView(PythonEngine *pythonEngine, PythonScriptingConsole *console, QWidget *parent)
    : QDockWidget(tr("Browser"), parent), pythonEngine(pythonEngine), console(console)
{
    setMinimumWidth(280);
    setObjectName("BrowserView");

    connect(pythonEngine, SIGNAL(executedExpression()), this, SLOT(executed()));
    connect(pythonEngine, SIGNAL(executedScript()), this, SLOT(executed()));

    trvBrowser = new QTreeWidget(this);
    trvBrowser->setContextMenuPolicy(Qt::CustomContextMenu);
    trvBrowser->setColumnCount(3);
    trvBrowser->setIndentation(18);
    trvBrowser->setColumnWidth(0, 200);
    trvBrowser->setColumnWidth(0, 200);

    QStringList headers;
    headers << tr("Name") << tr("Type") << tr("Value");
    trvBrowser->setHeaderLabels(headers);

    trvVariables = NULL;
    trvFunctions = NULL;
    trvClasses = NULL;
    trvOther = NULL;

    variableExpanded = true;
    functionExpanded = true;
    classExpanded = true;
    otherExpanded = false;

    executed();
    trvBrowser->sortItems(0, Qt::AscendingOrder);

    connect(trvBrowser, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(executeCommand(QTreeWidgetItem *, int)));
    connect(trvBrowser, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(doContextMenu(const QPoint &)));

    actCopyName = new QAction(icon(""), tr("Copy name"), this);
    connect(actCopyName, SIGNAL(triggered()), this, SLOT(copyName()));

    actCopyValue = new QAction(icon(""), tr("Copy value"), this);
    connect(actCopyValue, SIGNAL(triggered()), this, SLOT(copyValue()));

    actDelete = new QAction(icon(""), tr("&Delete"), this);
    connect(actDelete, SIGNAL(triggered()), this, SLOT(deleteVariable()));

    mnuContext = new QMenu(trvBrowser);
    mnuContext->addAction(actCopyName);
    mnuContext->addAction(actCopyValue);
    mnuContext->addSeparator();
    mnuContext->addAction(actDelete);

    setWidget(trvBrowser);
}
/*
 *  Constructs a VariableDialogBase as a child of 'parent', with the
 *  name 'name' and widget flags set to 'f'.
 *
 *  The dialog will by default be modeless, unless you set 'modal' to
 *  TRUE to construct a modal dialog.
 */
VariableDialogBase::VariableDialogBase( QWidget* parent, const char* name, bool modal, WFlags fl )
    : QDialog( parent, name, modal, fl )
{
    if ( !name )
	setName( "VariableDialogBase" );
    VariableDialogBaseLayout = new QGridLayout( this, 1, 1, 11, 6, "VariableDialogBaseLayout"); 

    varView = new QListView( this, "varView" );
    varView->addColumn( tr( "Variable" ) );
    varView->addColumn( tr( "Access" ) );
    varView->setFrameShape( QListView::StyledPanel );
    varView->setFrameShadow( QListView::Sunken );
    varView->setAllColumnsShowFocus( TRUE );
    varView->setResizeMode( QListView::LastColumn );

    VariableDialogBaseLayout->addMultiCellWidget( varView, 0, 0, 0, 3 );

    deleteButton = new QPushButton( this, "deleteButton" );

    VariableDialogBaseLayout->addWidget( deleteButton, 1, 3 );

    propBox = new QGroupBox( this, "propBox" );
    propBox->setColumnLayout(0, Qt::Vertical );
    propBox->layout()->setSpacing( 6 );
    propBox->layout()->setMargin( 11 );
    propBoxLayout = new QGridLayout( propBox->layout() );
    propBoxLayout->setAlignment( Qt::AlignTop );

    TextLabel2 = new QLabel( propBox, "TextLabel2" );

    propBoxLayout->addWidget( TextLabel2, 1, 0 );

    TextLabel1 = new QLabel( propBox, "TextLabel1" );

    propBoxLayout->addWidget( TextLabel1, 0, 0 );

    varName = new QLineEdit( propBox, "varName" );

    propBoxLayout->addWidget( varName, 0, 1 );

    accessCombo = new QComboBox( FALSE, propBox, "accessCombo" );

    propBoxLayout->addWidget( accessCombo, 1, 1 );

    VariableDialogBaseLayout->addMultiCellWidget( propBox, 2, 2, 0, 3 );

    addButton = new QPushButton( this, "addButton" );

    VariableDialogBaseLayout->addWidget( addButton, 1, 2 );
    Spacer2 = new QSpacerItem( 0, 21, QSizePolicy::Expanding, QSizePolicy::Minimum );
    VariableDialogBaseLayout->addMultiCell( Spacer2, 1, 1, 0, 1 );

    cancelButton = new QPushButton( this, "cancelButton" );

    VariableDialogBaseLayout->addWidget( cancelButton, 3, 3 );

    okButton = new QPushButton( this, "okButton" );

    VariableDialogBaseLayout->addMultiCellWidget( okButton, 3, 3, 1, 2 );
    Spacer3 = new QSpacerItem( 0, 21, QSizePolicy::Expanding, QSizePolicy::Minimum );
    VariableDialogBaseLayout->addItem( Spacer3, 3, 0 );
    languageChange();
    resize( QSize(276, 320).expandedTo(minimumSizeHint()) );
    clearWState( WState_Polished );

    // signals and slots connections
    connect( cancelButton, SIGNAL( clicked() ), this, SLOT( reject() ) );
    connect( addButton, SIGNAL( clicked() ), this, SLOT( addVariable() ) );
    connect( okButton, SIGNAL( clicked() ), this, SLOT( okClicked() ) );
    connect( varName, SIGNAL( textChanged(const QString&) ), this, SLOT( nameChanged() ) );
    connect( deleteButton, SIGNAL( clicked() ), this, SLOT( deleteVariable() ) );
    connect( accessCombo, SIGNAL( activated(int) ), this, SLOT( accessChanged() ) );
    connect( varView, SIGNAL( currentChanged(QListViewItem*) ), this, SLOT( currentItemChanged(QListViewItem*) ) );
    connect( varView, SIGNAL( selectionChanged(QListViewItem*) ), this, SLOT( currentItemChanged(QListViewItem*) ) );

    // tab order
    setTabOrder( varView, addButton );
    setTabOrder( addButton, deleteButton );
    setTabOrder( deleteButton, varName );
    setTabOrder( varName, accessCombo );
    setTabOrder( accessCombo, okButton );
    setTabOrder( okButton, cancelButton );

    // buddies
    TextLabel2->setBuddy( accessCombo );
    TextLabel1->setBuddy( varName );
}
Esempio n. 3
0
bool pass_line(void)
{
	lineelement_t *lelem;
	lineelement_t *vle;
	lineelement_t nlelem;
	length_t len;
	int16_t rel;
	int32_t relLong;

	VARIABLE var;
	elength_t ve;
	linesize_t linepos_start;
	seglistsize_t segelemidx;
	const lineelement_t pcd = { LE_OPERAND, { OP_StarEq }};


	while( 1 )
	{
		vle=(lineelement_t*)pp_peek();
		if( vle==NULL ) {
			return false;
		}
		if( vle->typ==LE_EOL ) {
			break;
		}
		linepos_start = pp_getPos();

		len.len = 0;
		len.defined = true;

		switch( vle->typ )
		{
		case LE_NUMBER:
		case LE_TEXTNUM1:
		case LE_TEXTNUM2:
		case LE_TEXTNUM3:
		case LE_TEXTNUM4:
			error(EM_NumberWithoutOperand);
			return false;
		case LE_OPERAND:
			/* soft lineend? */
			if( vle->data.op==OP_Colon ) {
				/* replace ':' with LE_EOL */
				vle->typ = LE_EOL;
				break;
			}
			else if( vle->data.op==OP_Carro ) {
				/*
				 * if a single '#' ends up here which was not interpreted as a
				 * preproc command or a 'mne #number', it's an unknown preproc error!
				 */
				error(EM_UnknownPreproc);
				return false;
			}
			else if( vle->data.op==OP_Dot ) {
				/*
				 * if a single '.' ends up here which was not interpreted as a
				 * psyopcode or a macro, it's an unknown psyopcode error!
				 */
				error(EM_UnknownPsyOpcodeOrMacro);
				return false;
			}
			else if( !pp_skip() ) {
				return false;
			}

			lelem = (lineelement_t*)pp_peek();
			if( lelem==NULL ) {
				return false;
			}
			if( vle->data.op==OP_StarEq ||
			    ( vle->data.op==OP_Star && lelem->typ==LE_OPERAND && lelem->data.op==OP_Eq ) )
			{
				if( vle->data.op==OP_Star && !pp_skip() ) {
					return false;
				}
				lelem = (lineelement_t*)pp_peek();
				if( lelem==NULL ) {
					return false;
				}
				if( lelem->typ==LE_EOL )
				{
					segelemidx = segment_newSegElem(false, 0);
					pp_delItems(linepos_start, pp_getPos());
					vle->typ = LE_SEGELEMENTER;
					vle->data.segelemidx = segelemidx;
				}
				else if( !term_readVardef(&pcd, linepos_start) )
				{
					error(EM_AssignmentHasNoRightSide);
					return false;
				}
			}
			else if( !term_readVardef(vle, linepos_start) )
			{
				error(EM_AssignmentHasNoRightSide);
				return false;
			}
			break;
		case LE_PSYOPC:
			if( (ve=pass_psyopc()).err )
				return false;
			len = ve.len;
			break;
		case LE_MNE:
			if( (ve=parse_mne()).err )
				return false;
			len = ve.len;
			break;
		case LE_STRING:
			error(EM_StringWithoutOperand);
			return false;
		case LE_TEXT:
			if( !pp_skip() )
				return false;

			lelem = (lineelement_t*)pp_peek();
			if( lelem==NULL ) {
				return false;
			}
			switch( lelem->typ )
			{
			case LE_OPERAND:
				if( lelem->data.op!=OP_Colon )
				{
					/* and parse all together as a term */
					if( !term_readVardef(vle, linepos_start) )
					{
						error(EM_AssignmentHasNoRightSide);
						return false;
					}
					break;
				}
				else
				{
					/* clear ':' */
					lelem->typ = LE_EMPTY;
					/* and fallthrough */
				}
			case LE_EOF:
			case LE_EOL:
			case LE_PSYOPC:
			case LE_MNE:
				if( !term_makePCVar(vle->data.txt, linepos_start) )
					return false;
				break;
			case LE_NUMBER:
			case LE_STRING:
			case LE_TEXT:
			case LE_TEXTNUM1:
			case LE_TEXTNUM2:
			case LE_TEXTNUM3:
			case LE_TEXTNUM4:
				error(EM_ExpectingVarAssignment);
				return false;

			case BE_1BYTE:
			case BE_2BYTE:
			case BE_3BYTE:
			case BE_4BYTE:
			case BE_nBYTE:
			case TE_1BYTE:
			case TE_2BYTE:
			case TE_3BYTE:
			case TE_4BYTE:
			case TE_RBYTE:
			case TE_RLBYTE:
			case TE_FLEX:
			case TE_nBYTE:
			case TE_JIADR:
			case BE_DSB:
			case LE_EMPTY:
			case LE_SRC:
			case LE_VARDEF:
			case LE_VARTERM:
			case LE_SEGMENTENTER:
			case LE_SEGELEMENTER:
			case LE_LOCALBLOCK:
			case LE_PHASE:
			case LE_DEPHASE:
			case LE_SETCODE:
			case LE_ASIZE:
			case LE_XYSIZE:
			case LE_CPUTYPE:
			case LE_MACRODEF:
			case LE_PREPROC:
				/* This should never happen! */
				assert( false );
				break;
			};

			break;
		case BE_1BYTE:
		case BE_2BYTE:
		case BE_3BYTE:
		case BE_4BYTE:
			if( !pp_skip() )
				return false;
			len.len = (vle->typ&LINEELEMENT_TYPMASK)+1;
			break;
		case BE_DSB:
			if( !pp_skip() )
				return false;
			len.len = vle->data.dsb.length;
			break;
		case BE_nBYTE:
			if( !pp_skip() )
				return false;
			len.len = *(vle->data.b_nbyte);
			break;
		case TE_1BYTE:
		case TE_2BYTE:
		case TE_3BYTE:
		case TE_4BYTE:
			if( !read_term((TERMSIZE)(vle->typ&LINEELEMENT_TYPMASK),&var, true) )
				return false;
			allBytesResolved &= var.defined;
			if( var.defined )
				allTermsFinal &= var.final;
			len.len = (vle->typ&LINEELEMENT_TYPMASK)+1;
			break;
		case TE_RBYTE:
			if( !read_term(TS_RBYTE,&var, false) )
				return false;
			allBytesResolved &= var.defined;
			if( var.defined && segment_isPCDefined() )
			{
				pp_delItems(linepos_start, pp_getPos());
				nlelem.typ = BE_1BYTE;
				if( (rel=adr2rel(var.valt.value.num,segment_getPC()))==-1 )
					return false;
				nlelem.data.b_1byte = (uint8_t)rel;
				pp_replaceItem(linepos_start, &nlelem);
			}
			len.len = 1;
			break;
		case TE_RLBYTE:
			if( !read_term(TS_RLBYTE,&var, false) )
				return false;
			allBytesResolved &= var.defined;
			if( var.defined && segment_isPCDefined() )
			{
				pp_delItems(linepos_start, pp_getPos());
				nlelem.typ = BE_2BYTE;
				if( (relLong=adr2relLong(var.valt.value.num,segment_getPC()))==-1 )
					return false;
				nlelem.data.b_2byte = (uint8_t)relLong;
				pp_replaceItem(linepos_start, &nlelem);
			}
			len.len = 1;
			break;
		case TE_FLEX:
			if( !read_term(TS_FLEX,&var, true) )
				return false;
			if( (allBytesResolved&=(len.defined=var.defined)) )
				len.len = (vle->typ&LINEELEMENT_TYPMASK)+1;
			if( var.defined )
				allTermsFinal &= var.final;
			break;
		case TE_nBYTE:
			if( !read_term(TS_nBYTE, &var, true) )
				return false;
			if( (allBytesResolved&=(len.defined=var.defined)) )
				len.len = var.valt.byteSize;
			if( var.defined )
				allTermsFinal &= var.final;
			deleteVariable( &var );
			break;
		case TE_JIADR:
			if( !read_term(TS_2BYTE,&var, true) )
				return false;
			allBytesResolved &= var.defined;
			checkJmpInd(&var);
			len.len = 2;
			break;
		case LE_PREPROC:
		case LE_EOF:
		case LE_EOL:
		case LE_EMPTY:
		case LE_SRC:
		case LE_VARDEF:
		case LE_VARTERM:
		case LE_SEGMENTENTER:
		case LE_SEGELEMENTER:
		case LE_LOCALBLOCK:
		case LE_PHASE:
		case LE_DEPHASE:
		case LE_SETCODE:
		case LE_ASIZE:
		case LE_XYSIZE:
		case LE_CPUTYPE:
		case LE_MACRODEF:
			/* should never happen */
			assert( false );
		};

		segment_addLength(len);
	};
	return true;
}