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 ); }
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; }