📄 xptext.cpp
字号:
#include "XpText.h"#include "filedialog.h"#include "xptools.h"#include "dropin/config.h"//ezx#include <zapplication.h>#include <ezxutilcst.h>//#include <zglobal.h>#include <ezxres.h>#include <zmessagebox.h>#include <zmultilineedit.h>#include <zpushbutton.h>//qt#include <qvbox.h>#include <qfile.h>#include <qtextstream.h>#include <qtextcodec.h>#include <stdio.h>#include <qpixmap.h>//test#include <qfileinfo.h>#include <qdir.h>#include <qapplication.h>QString ChineseAndEnglish(const char*ChineseString);XpText::XpText(bool enwrap,const QString& fileName,QWidget *parent, char const *name,unsigned int f) : ZMainWidget("",true,parent, name,f){ // showFullScreen(); /* if (QFile::exists("walla.jpg")) { QWallpaper wpp; QPixmap *pix = new QPixmap("walla.jpg"); wpp.setAppWallpaperMode(QWallpaper::UseAppWallpaper); wpp.setAppWallpaper(pix); // I can make E680i user confuse 加入背景;) //wpp.setSysWallpaper(pix); delete pix; } */ b=enwrap; QVBox *cw = new QVBox(this); setContentWidget(cw); QVBox *vb = (QVBox*)getContentWidget(0); setGeometry(0,0,240,320); mTextEdit = new ZMultiLineEdit(vb, FALSE, 10); if (b){ mTextEdit->setWordWrap(ZMultiLineEdit::FixedPixelWidth); mTextEdit->setWrapColumnOrWidth(210); mTextEdit->setWrapPolicy(ZMultiLineEdit::Anywhere); }else{ mTextEdit->setWordWrap(ZMultiLineEdit::NoWrap); } // ZApplication::setMouseMode(mTextEdit,ZApplication::PRESS_HOLD); mTextEdit->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); UTIL_CST *cst = new UTIL_CST(this, ChineseAndEnglish("编码")); setCSTWidget(cst); mMiddleBtn = cst->getMidBtn(); mQuitBtn = cst->getRightBtn(); QObject::connect(mQuitBtn, SIGNAL(clicked()), this, SLOT(close())); m_encodingMenu = new QPopupMenu(cst, NULL); m_encodingMenu ->insertItem(ChineseAndEnglish("ISO 8859-1"), WestItem, WestItem); m_encodingMenu->insertItem(ChineseAndEnglish("简体中文/GBK"), ZhCNItem, ZhCNItem); m_encodingMenu->insertItem(ChineseAndEnglish("繁体中文/Big5"), ZhTWItem, ZhTWItem); m_encodingMenu->insertItem(ChineseAndEnglish("Unicode/UTF-8"), Utf8Item, Utf8Item); m_encodingMenu->setItemChecked(Utf8Item,TRUE); m_encodingMenu->insertItem(ChineseAndEnglish("Unicode/UTF-16"), Utf16Item, Utf16Item); QObject::connect(m_encodingMenu, SIGNAL(activated(int)), SLOT(menuSelect(int))); mMiddleBtn->setPopup(m_encodingMenu); mPopup = new QPopupMenu(cst, NULL); cm_wrap=mPopup->insertItem(ChineseAndEnglish("自动换行"),this,SLOT( cmwrap() )); mPopup->setItemChecked(cm_wrap,b); mPopup->insertItem(ChineseAndEnglish("保存"), SaveItem, SaveItem); mPopup->insertItem(ChineseAndEnglish("另存为..."), SaveAsItem, SaveAsItem); QObject::connect(mPopup, SIGNAL(activated(int)), SLOT(selectMenu(int))); mQuitBtn = cst->getLeftBtn(); mQuitBtn->setPopup(mPopup); vb->resize(240,288); m_saveas = TRUE; m_filename=fileName; load1(m_filename,3); QString current = m_filename; QFileInfo fi(current); current = fi.fileName(); QString status=ChineseAndEnglish("文件名")+"[ "+current+" ]"; getTitleBarWidget()->setText(status); }XpText::~XpText(){} void XpText::selectMenu(int idx){ if (idx == SaveItem) { save(); } else if (idx == SaveAsItem) { showSaveDialog(); } }void XpText::menuSelect(int miIndex){ if (miIndex == ZhCNItem) { m_encodingMenu->setItemChecked(ZhCNItem,TRUE); m_encodingMenu->setItemChecked(ZhTWItem,FALSE); m_encodingMenu->setItemChecked(WestItem,false); m_encodingMenu->setItemChecked(Utf8Item,FALSE); m_encodingMenu->setItemChecked(Utf16Item,FALSE); } else if (miIndex == ZhTWItem) { m_encodingMenu->setItemChecked(ZhCNItem,FALSE); m_encodingMenu->setItemChecked(ZhTWItem,TRUE); m_encodingMenu->setItemChecked(WestItem,false); m_encodingMenu->setItemChecked(Utf8Item,FALSE); m_encodingMenu->setItemChecked(Utf16Item,FALSE); }else if (miIndex == WestItem) { m_encodingMenu->setItemChecked(ZhCNItem,FALSE); m_encodingMenu->setItemChecked(ZhTWItem,FALSE); m_encodingMenu->setItemChecked(WestItem,TRUE); m_encodingMenu->setItemChecked(Utf8Item,FALSE); m_encodingMenu->setItemChecked(Utf16Item,FALSE); }else if (miIndex == Utf8Item) { m_encodingMenu->setItemChecked(ZhCNItem,FALSE); m_encodingMenu->setItemChecked(ZhTWItem,FALSE); m_encodingMenu->setItemChecked(WestItem,false); m_encodingMenu->setItemChecked(Utf8Item,TRUE); m_encodingMenu->setItemChecked(Utf16Item,FALSE); }else if (miIndex == Utf16Item) { m_encodingMenu->setItemChecked(ZhCNItem,FALSE); m_encodingMenu->setItemChecked(ZhTWItem,FALSE); m_encodingMenu->setItemChecked(WestItem,false); m_encodingMenu->setItemChecked(Utf8Item,FALSE); m_encodingMenu->setItemChecked(Utf16Item,TRUE); } load1(m_filename,miIndex); }void XpText::cmwrap(){ if (b){ mTextEdit->setWordWrap(ZMultiLineEdit::NoWrap); mPopup->setItemChecked(cm_wrap,false); b=false; }else { mTextEdit->setWordWrap(ZMultiLineEdit::FixedPixelWidth); mTextEdit->setWrapColumnOrWidth(210); mTextEdit->setWrapPolicy(ZMultiLineEdit::Anywhere); mPopup->setItemChecked(cm_wrap,TRUE); b=TRUE;} }void XpText::showSaveDialog(){ FileDialog *savedialog = new FileDialog(TRUE,"另存为",true,this); if (!m_filepath.isEmpty()) savedialog->setDir(m_filepath); if (savedialog->exec() == FileDialog::Accepted) { m_filename = savedialog->getFileName(); m_filepath = savedialog->getFilePath(); saveAs(m_filename); } delete savedialog;}void XpText::save(){ if (m_filename.isEmpty()) { showSaveDialog(); return; } else { m_saveas = FALSE; saveAs(m_filename); }}void XpText::saveAs(const QString& fileName){ RES_ICON_Reader ir; QFile f(fileName); if (f.exists() && m_saveas) { // the file exist switch (ZMessageBox::information(this, ir.getIcon(RES_ICON_DLG_WAITING,1), ChineseAndEnglish("文件已经存在,要覆盖吗?"), ChineseAndEnglish("覆盖"), ChineseAndEnglish("取消"))) { case 0: // overwrite break; case 1: // cancel return; break; default: return; break; } } if (!f.open(IO_WriteOnly)) { ZMessageBox::information(this, ir.getIcon(RES_ICON_DLG_ERROR,1), ChineseAndEnglish("这是只读文件,不能修改."), ChineseAndEnglish("关闭")); return; } QTextStream stream(&f); if (m_encodingMenu->isItemChecked(ZhCNItem)) { stream.setCodec(QTextCodec::codecForName("GBK")); } else if (m_encodingMenu->isItemChecked(ZhTWItem)) { stream.setCodec(QTextCodec::codecForName("Big5")); }else if (m_encodingMenu->isItemChecked(WestItem)) { stream.setCodec(QTextCodec::codecForName("ISO8859-1")); }else if (m_encodingMenu->isItemChecked(Utf8Item)) { stream.setCodec(QTextCodec::codecForName("utf8")); }else if (m_encodingMenu->isItemChecked(Utf16Item)) { stream.setCodec(QTextCodec::codecForName("utf16")); } stream << mTextEdit->text(); f.close(); mTextEdit->setEdited(FALSE); m_saveas = TRUE; ZMessageBox::timerMessage(this, ir.getIcon(RES_ICON_DLG_COMPLETE,1), ChineseAndEnglish("文件保存成功..."), 1);}void XpText::load(){ if (mTextEdit->edited()) { RES_ICON_Reader ir; switch (ZMessageBox::information(this, ir.getIcon(RES_ICON_DLG_WAITING,1), ChineseAndEnglish("这文件已改变,要保存吗?"), ChineseAndEnglish("保存"), ChineseAndEnglish("放弃"), ChineseAndEnglish("取消"))) { case 0: // save save(); break; case 1: // discard break; default: // cancel return; break; } } }void XpText::load1(const QString& fileName,int code ){ if (mTextEdit->edited()) { RES_ICON_Reader ir; switch (ZMessageBox::information(this, ir.getIcon(RES_ICON_DLG_WAITING,1), ChineseAndEnglish("这文件已改变,要保存吗?"), ChineseAndEnglish("保存"), ChineseAndEnglish("放弃"), ChineseAndEnglish("取消"))) { case 0: // save save(); break; case 1: // discard break; default: // cancel return; break; } } RES_ICON_Reader ir; QFile f(fileName); if (!f.open(IO_ReadOnly)) { ZMessageBox::timerMessage(this, ir.getIcon(RES_ICON_DLG_ERROR,1), ChineseAndEnglish("不能打开这文件..."), 1); return; } mTextEdit->setAutoUpdate(FALSE); QTextStream stream(&f); if (code == ZhCNItem) { stream.setCodec(QTextCodec::codecForName("GBK")); } else if (code == ZhTWItem) { stream.setCodec(QTextCodec::codecForName("Big5")); }else if (code == WestItem) { stream.setCodec(QTextCodec::codecForName("ISO8859-1")); }else if (code == Utf8Item) { stream.setCodec(QTextCodec::codecForName("utf8")); }else if (code == Utf16Item) { stream.setCodec(QTextCodec::codecForName("utf16")); } mTextEdit->setText(stream.read()); f.close(); mTextEdit->setAutoUpdate(TRUE); mTextEdit->setCursorPosition(0, 0); mTextEdit->repaint(); mTextEdit->setEdited(FALSE); }void XpText::closeEvent( QCloseEvent *event ){ if (!mTextEdit->edited()) { event->accept(); return; } RES_ICON_Reader ir; //the text has been changed switch (ZMessageBox::information(this, ir.getIcon(RES_ICON_DLG_WAITING,1), ChineseAndEnglish("这文件已改变,要保存吗?"), ChineseAndEnglish("保存"), ChineseAndEnglish("放弃"), ChineseAndEnglish("取消"))) { case 0: // save save(); event->accept(); break; case 1: // discard event->accept(); break; default: // cancel event->ignore(); break; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -