亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mainwindow.cpp

?? 編譯器 用C語言對下述文法和單詞表定義的語言設計編制一個編譯器
?? CPP
字號:
/*************************************************
 * mainwindow.cpp
 *
 * 2008-03-19 21:19
 * 周鑫(zhouxin63766@yahoo.com.cn)
 *
 * Make a GUI for parser.
 *****************************************************************************/

#include <QtGui>
#include "mainwindow.h"

MainWindow::MainWindow()
{
	textEdit = new QTextEdit;
	parser = new Parser;
	QFont font( "Times New Roman", 12, QFont::Bold );
	textEdit->setFont(font);
	//textEdit->setReadOnly( true );
	setCentralWidget( textEdit );

	createActions();
	createMenus();
	createDockWindows();

	connect( textEdit, SIGNAL( textChanged() ), this, SLOT( setFileChanged() ) );
	setWindowIcon( QIcon( ":/images/icon.png" ) );
	setWindowTitle( tr("parser") );
}

MainWindow::~MainWindow()
{
	delete textEdit;
	delete parser;
}

void MainWindow::createMenus()
{
	fileMenu = menuBar()->addMenu( tr("&File" ) );
	fileMenu->addAction( newAction );
	fileMenu->addAction( openAction );
	fileMenu->addAction( reloadAction );
	fileMenu->addAction( saveAction );
	fileMenu->addAction( saveAsAction );
	fileMenu->addSeparator();
	fileMenu->addAction( exitAction );

	buildMenu = menuBar()->addMenu( tr("&Build") );
	buildMenu->addAction( compileAction );

	viewMenu = menuBar()->addMenu( tr("&View") );

	helpMenu = menuBar()->addMenu( tr("&Help") );
	helpMenu->addAction( aboutAction );
}

void MainWindow::createActions()
{
	newAction = new QAction( QIcon(":/images/new.png"), tr("&New"), this );
	newAction->setShortcut( tr("Ctrl+N") );
	connect( newAction, SIGNAL( activated() ), this, SLOT( newFile() ) );

	openAction = new QAction( QIcon(":/images/open.png"), tr("&Open"), this );
	openAction->setShortcut( tr("Ctrl+O") );
	connect( openAction, SIGNAL( activated() ), this, SLOT( openFile() ) );

	reloadAction = new QAction( QIcon(":/images/reload.png"), tr("&Reload"), this );
	reloadAction->setShortcut( tr("Ctrl+R") );
	connect( reloadAction, SIGNAL( activated() ), this, SLOT( reloadFile() ) );

	saveAction = new QAction( QIcon(":/images/save.png"), tr("&Save"), this );
	saveAction->setShortcut( tr("Ctrl+S") );
	connect( saveAction, SIGNAL( activated() ), this, SLOT( saveFile() ) );

	saveAsAction = new QAction( QIcon(":/images/saveas.png"), tr("Save &As..."), this );
	saveAsAction->setShortcut( tr("Ctrl+SHIFT+S") );
	connect( saveAsAction, SIGNAL( activated() ), this, SLOT( saveAs() ) );

	compileAction = new QAction( QIcon(":/images/compile.png"), tr("&Compile"), this );
	compileAction->setShortcut( QKeySequence( Qt::Key_F5 ) );
	connect( compileAction, SIGNAL( activated() ), this, SLOT( compile() ) );

	exitAction = new QAction( QIcon(":/images/exit.png"), tr("&Exit"), this );
	exitAction->setShortcut( tr("Ctrl+W") );
	connect( exitAction, SIGNAL( activated() ), qApp, SLOT( quit() ) );

	aboutAction = new QAction( QIcon(":/images/about.png"), tr("&About"), this );
	aboutAction->setShortcut( tr("Ctrl+A") );
	connect( aboutAction, SIGNAL( activated() ), this, SLOT( about() ) );
}

void MainWindow::createDockWindows()
{
	QDockWidget *dock = new QDockWidget( tr("Output" ), this );
	dock->setAllowedAreas( Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea );
	debugList = new QListWidget( dock );
	debugList->addItems( QStringList()
		<< "Line 1\t Harmony Enterprises, 12 Lakeside, Ambleton"
		<< "Line 2\t Memorabilia, 23 Watersedge, Beaton"
		<< "Line 3\t Tiblanka, 38 Sea Views, Carlton"
		<< "Line 4\t Tiroli Tea, 67 Long River, Fedula" );
	dock->setWidget( debugList );
	addDockWidget( Qt::BottomDockWidgetArea, dock );
	viewMenu->addAction( dock->toggleViewAction() );
}

void MainWindow::newFile()
{
	currentFile = QString();
	setWindowTitle( tr("Parser *") );
	textEdit->clear();
	debugList->clear();
}

void MainWindow::openFile()
{
	QString fileName = QFileDialog::getOpenFileName( this, "Open File", "./",
			"PASCAL Files( *.pas *.txt )"); 
	if ( fileName.isEmpty() )
	{
		return;
	}
	else
	{
		loadFile( fileName );
	}
}

void MainWindow::reloadFile()
{
	if ( currentFile.isEmpty() )
	{
		QMessageBox::information( this, tr("Reload File Error!"),
				tr("Please open a file first!") );
	}
	else
	{
		loadFile( currentFile );
	}
}

void MainWindow::loadFile( const QString &fileName )
{
	QFile file( fileName );
	if ( !file.open( QFile::ReadOnly | QFile::Text ) )
	{
		QMessageBox::warning( this, tr("Load Files"),
			tr("Cannot read file %1:\n%2.").
			arg(fileName).arg(file.errorString()) );
		return;
	}

	QTextStream in( &file );
	QApplication::setOverrideCursor( Qt::WaitCursor );
	textEdit->setPlainText( in.readAll() );
	QApplication::restoreOverrideCursor();

	currentFile = fileName;
	if ( currentFile.isEmpty() )
	{
		setWindowTitle( tr("Parser") );
	}
	else
	{
		setWindowTitle( tr("%1 - %2").arg( tr("Parser File") )
				.arg( QFileInfo( currentFile ).fileName() ) );
	}

	debugList->clear();
}

void MainWindow::saveFile()
{
	if ( currentFile.isEmpty() )
	{
		saveAs();
	}
	else
	{
		saveFile( currentFile );
	}
}

void MainWindow::saveAs()
{
	QString fileName = QFileDialog::getSaveFileName( this );
	if ( fileName.isEmpty() )
	{
		return;
	}
	else
	{
		saveFile( fileName );
	}
}

void MainWindow::saveFile( const QString &fileName )
{
	QFile file( fileName );
	if ( !file.open( QFile::WriteOnly | QFile::Text ) )
	{
		QMessageBox::warning( this, tr("Recent Files"),
				tr("Cannot write file %1:\n%2.")
				.arg( fileName ).arg( file.errorString() ) );
		return;
	}

	QTextStream out( &file );
	QApplication::setOverrideCursor( Qt::WaitCursor );
	out << textEdit->toPlainText();
	QApplication::restoreOverrideCursor();

	currentFile = fileName;
	setWindowTitle( tr("%1 - %2").arg( tr("Parser File") )
				.arg( QFileInfo( fileName ).fileName() ) );
}

void MainWindow::compile()
{
	debugList->clear();

	if ( currentFile.isEmpty() )
	{
		QMessageBox::information( this, tr("Compile File Error!"),
				tr("Please open or save a file first!") );
	}
	else
	{
		if ( parser->build( currentFile ) )
		{
			debugList->addItems( parser->errorList() );
			QMessageBox::information( this, tr("Compile Successfully!"),
					QString("File %1 compiled successfully.").arg( currentFile ) );
		}
		else
		{
			debugList->addItems( parser->errorList() );
			QMessageBox::information( this, tr("Compile Error!"),
					QString("Error occure when compile file %1.\n"
						"Details description are in dock window.")
					.arg( currentFile ) );
		}
	}
}

void MainWindow::about()
{
	QMessageBox::about( this, tr("About parser!"),
			tr( "<h2><center>parser 1.0</center></h2>"
				"<p>Copyright &copy; 2008 xidian University.</p>"
				"parser is an application that read "
				"<b><font color=red>PASCAL source file</font></b> "
				"then analyse the glossary and the syntax.<br>"
				"Contact to:<a href='mailto:zhouxin63766@yahoo.com.cn'>"
				"zhouxin63766@yahoo.com.cn</a>" ) );
}

void MainWindow::setFileChanged()
{
	setWindowTitle( tr("%1 - %2 *").arg( tr("Parser File") )
				.arg( QFileInfo( currentFile ).fileName() ) );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美综合色| 欧洲精品一区二区三区在线观看| 欧美高清精品3d| 亚洲mv在线观看| 777久久久精品| 美女视频一区在线观看| 精品久久一区二区三区| 国产盗摄一区二区三区| 亚洲欧美一区二区视频| 欧美性猛交一区二区三区精品 | 久久视频一区二区| 成人免费视频app| 一区二区三区四区国产精品| 欧美三级电影在线看| 久久精品国产精品青草| 欧美国产综合色视频| 日本乱人伦一区| 美国毛片一区二区三区| 国产精品网站在线| 精品污污网站免费看| 久久国产日韩欧美精品| 中文字幕av不卡| 欧美裸体bbwbbwbbw| 国产精品一区二区三区99| 亚洲精品国产精华液| 欧美不卡123| 在线日韩av片| 国产精品亚洲午夜一区二区三区 | 欧美日韩一级黄| 天天综合网 天天综合色| 精品三级av在线| 99久久婷婷国产综合精品电影| 一区二区三区四区乱视频| 久久无码av三级| 欧美性大战久久久| 国产高清无密码一区二区三区| 久久久.com| 欧美激情综合五月色丁香小说| 极品少妇一区二区三区精品视频| 91精品国产91综合久久蜜臀| 日韩国产一二三区| 日本一区二区动态图| 欧美日韩国产小视频| 成人精品电影在线观看| 青椒成人免费视频| 亚洲黄色片在线观看| 国产亚洲一本大道中文在线| 欧美乱妇23p| 色综合久久久久综合体桃花网| 久久9热精品视频| 午夜日韩在线观看| 亚洲日本丝袜连裤袜办公室| 久久先锋影音av鲁色资源| 91精品婷婷国产综合久久性色| 99re热这里只有精品视频| 国产一区久久久| 另类小说综合欧美亚洲| 洋洋成人永久网站入口| 亚洲视频综合在线| 日本一区二区三区视频视频| 精品日韩欧美一区二区| 日韩一区二区电影网| 91黄色激情网站| 99久久久免费精品国产一区二区| 国产精品一二三| 国产精品一区二区在线播放| 国精产品一区一区三区mba视频| 日本美女一区二区三区视频| 亚洲不卡av一区二区三区| 亚洲女人的天堂| 亚洲精品中文字幕在线观看| 亚洲欧美一区二区在线观看| 中文字幕一区二区在线观看| 国产精品久久久久久妇女6080| 国产日本亚洲高清| 中文字幕免费观看一区| 国产日韩精品久久久| 国产精品久久久久久久裸模| 国产精品成人免费精品自在线观看 | 艳妇臀荡乳欲伦亚洲一区| 亚洲黄色录像片| 亚洲一区二区欧美日韩| 亚洲国产综合人成综合网站| 亚洲成a人片在线不卡一二三区| 亚洲一区二区三区三| 亚洲综合免费观看高清完整版在线| 亚洲精品国产精华液| 亚洲在线免费播放| 日韩电影免费在线看| 精品在线播放免费| 国产99久久久久| 色综合久久久久久久久久久| 91国内精品野花午夜精品| 欧美性色黄大片手机版| 日韩小视频在线观看专区| 2020国产成人综合网| 亚洲国产精华液网站w| 一区精品在线播放| 亚洲一区视频在线观看视频| 免费成人结看片| 国产精品一区二区久激情瑜伽| 成人国产在线观看| 色一区在线观看| 欧美一区二区国产| 国产亚洲自拍一区| 亚洲欧美一区二区三区孕妇| 香蕉乱码成人久久天堂爱免费| 老司机午夜精品| 成人国产亚洲欧美成人综合网 | 国产jizzjizz一区二区| 波多野结衣中文一区| 在线观看欧美日本| 欧美日韩国产另类不卡| 久久久久久久综合狠狠综合| 亚洲人亚洲人成电影网站色| 欧美aaaaaa午夜精品| 成人av在线播放网址| 欧美日韩电影在线| 日本一区二区三区久久久久久久久不| 亚洲私人黄色宅男| 蜜臀久久99精品久久久画质超高清| 国产精品主播直播| 欧美日韩亚洲综合在线| 亚洲国产精品高清| 石原莉奈在线亚洲二区| 成人黄色a**站在线观看| 日韩一区二区麻豆国产| 亚洲男人的天堂一区二区 | 国产成a人无v码亚洲福利| 精品视频一区三区九区| 国产欧美日韩精品一区| 日韩在线一区二区| 成人91在线观看| 精品久久久影院| 亚洲国产中文字幕在线视频综合| 国产成人av福利| 日韩精品自拍偷拍| 一区二区三区视频在线看| 国产精品一区三区| 日韩午夜在线观看视频| 一区二区三区日本| 国产成人一区二区精品非洲| 4438x成人网最大色成网站| 亚洲天天做日日做天天谢日日欢| 精品在线视频一区| 在线不卡中文字幕播放| 亚洲精品综合在线| caoporn国产精品| 国产亚洲欧美日韩日本| 免费高清成人在线| 欧美日韩国产高清一区| 亚洲精品自拍动漫在线| 成人黄色在线视频| 国产日韩欧美不卡在线| 国产一区二区三区四区在线观看| 6080日韩午夜伦伦午夜伦| 一个色妞综合视频在线观看| 99re热这里只有精品免费视频| 中文字幕欧美区| av电影在线观看不卡| 国产欧美日韩卡一| 福利一区福利二区| 国产三级欧美三级| 大桥未久av一区二区三区中文| 欧美va天堂va视频va在线| 麻豆91精品视频| 日韩一区二区在线看片| 青青青伊人色综合久久| 91精品欧美久久久久久动漫| 偷窥国产亚洲免费视频| 欧美日韩亚洲另类| 午夜视频一区二区三区| 欧美一级欧美一级在线播放| 日本在线不卡视频一二三区| 制服丝袜av成人在线看| 欧美aaaaa成人免费观看视频| 日韩欧美专区在线| 精品亚洲成a人在线观看| 2021久久国产精品不只是精品| 精品一区二区在线播放| 国产亚洲美州欧州综合国| 成人在线一区二区三区| 国产精品成人免费| 欧美三级日韩三级| 久久精品国产**网站演员| 久久免费午夜影院| 成人免费高清视频| 一区二区三区久久| 欧美一区二区三区系列电影| 精品一区二区三区视频在线观看| 久久久国产精华| 99久久精品国产一区二区三区| 玉足女爽爽91| 日韩视频一区二区三区在线播放| 国产精品自在在线| 亚洲精品日产精品乱码不卡| 欧美美女黄视频| 成人小视频在线| 亚洲va欧美va人人爽午夜| 精品国产青草久久久久福利|