#include "ymbasicwidget.h" #include "../Json/sjson.h" #include "../common.h" #include #include #include #include #include #include #include #include #include #include #include #include #define D_NOT_SELECT -1 #define SAFE_DELETE(x) if(x != NULL) { delete x; x = NULL; } #define SAFE_DELETEARRAY(x) if(x != NULL) { delete [] x; x = NULL; } #define SAFE_RELEASE(x) if(x != NULL) { x->Release(); x = NULL; } YMBasicWidget::YMBasicWidget(QWidget *parent) :YMorphereWidget(parent) { if(!setListMorphere(m_strlistMorphere, m_strlistMorphereko)) { m_strlistMorphere << "NNG" <<"NNP"<<"NNB"<<"NNBC"<<"NR"<<"NP"<<"VV"<<"VA"<<"VX"<<"VCP"<<"VCN"<<"MM"<<"MAG"<<"MAJ"<<"IC"<<"JKS"<<"JKC"<<"JKG"<<"JKO"<<"JKB"<<"JKV"<<"JKQ"<<"JX"<<"JC"<<"EP"<<"EF"<<"EC"<<"ETN"<<"ETM"<<"XPN"<<"XSN"<<"XSV"<<"XSA"<<"XR"<<"SF"<<"SE"<<"SSO"<<"SSC"<<"SC"<<"SY"<<"SL"<<"SH"<<"SN"; m_strlistMorphereko << "NNG" <<"NNP"<<"NNB"<<"NNBC"<<"NR"<<"NP"<<"VV"<<"VA"<<"VX"<<"VCP"<<"VCN"<<"MM"<<"MAG"<<"MAJ"<<"IC"<<"JKS"<<"JKC"<<"JKG"<<"JKO"<<"JKB"<<"JKV"<<"JKQ"<<"JX"<<"JC"<<"EP"<<"EF"<<"EC"<<"ETN"<<"ETM"<<"XPN"<<"XSN"<<"XSV"<<"XSA"<<"XR"<<"SF"<<"SE"<<"SSO"<<"SSC"<<"SC"<<"SY"<<"SL"<<"SH"<<"SN"; } QVBoxLayout *vMainLayout = new QVBoxLayout; vMainLayout->setAlignment(Qt::AlignVCenter); QVBoxLayout *vboxlayout = new QVBoxLayout; QGroupBox *gBox = setMorphereList(); QGroupBox *gDate = setDate(); QGroupBox *gFilter = setFilter(); QGroupBox *gOther = setOther(); QGroupBox *gSort = setSort(); QHBoxLayout *hboxlayout = new QHBoxLayout; QGroupBox *gDictionary = setDictionary(); hboxlayout->addWidget(gBox,5); vboxlayout->addWidget(gDate,3); //vboxlayout->addWidget(gFilter,3); vboxlayout->addWidget(gSort,2); vboxlayout->addWidget(gOther,2); vboxlayout->addWidget(gDictionary,2); hboxlayout->addLayout(vboxlayout,5); vMainLayout->addLayout(hboxlayout, 2); m_ptwData = new QTabWidget; m_ptwData->setTabsClosable(true); connect(m_ptwData,SIGNAL(tabCloseRequested(int)),this,SLOT(CloseTab(int))); connect(m_ptwData,SIGNAL(tabBarDoubleClicked(int)),this,SLOT(DoubleClickTab(int))); AddTable("Start"); vMainLayout->addWidget(m_ptwData, 8); setLayout(vMainLayout); } QGroupBox *YMBasicWidget::setMorphereList() { QVBoxLayout *vlayout = new QVBoxLayout; QVBoxLayout *vlayout1 = new QVBoxLayout; QHBoxLayout *hlayout = new QHBoxLayout; QGroupBox *groupBox = new QGroupBox(tr("Morphere List")); m_plwMorphereList = new QListWidget; m_plwMorphereAdd = new QListWidget; m_plwMorphereList->setSelectionMode(QAbstractItemView::MultiSelection); m_plwMorphereAdd->setSelectionMode(QAbstractItemView::ExtendedSelection); for(int i=0;isetData(Qt::UserRole, QVariant(m_strlistMorphere.at(i))); } for(int i=0;isetData(Qt::UserRole, QVariant(m_strlistMorphere.at(i))); } for(int i=0;icount();i++) { m_plwMorphereAdd->item(i)->setHidden(true); } QPushButton *ppbAdd = new QPushButton("Add"); QPushButton *ppbDel = new QPushButton("Del"); vlayout->addWidget(m_plwMorphereList); vlayout->addWidget(ppbAdd); vlayout1->addWidget(m_plwMorphereAdd); vlayout1->addWidget(ppbDel); connect(ppbAdd, SIGNAL(released()),this, SLOT(MorphereListAdd())); connect(ppbDel, SIGNAL(released()),this, SLOT(MorphereListDel())); hlayout->addLayout(vlayout); hlayout->addLayout(vlayout1); groupBox->setLayout(hlayout); groupBox->setCheckable(true); return groupBox; } QGroupBox *YMBasicWidget::setDate() { QHBoxLayout *hlayout = new QHBoxLayout; QHBoxLayout *hlayout1 = new QHBoxLayout; QVBoxLayout *vlayout = new QVBoxLayout; QGroupBox *groupBox = new QGroupBox(tr("Date")); m_pdeStart = new QDateEdit(QDate::currentDate()); m_pdeEnd = new QDateEdit(QDate::currentDate()); m_pdeStart->setDateRange(QDate(2003, 5, 20),QDate::currentDate()); m_pdeEnd->setDateRange(QDate(2003, 5, 20),QDate::currentDate()); QCalendarWidget *pCalender = new QCalendarWidget(); m_pdeStart->setCalendarWidget(pCalender); m_pdeStart->setCalendarPopup(true); m_pdeEnd->setCalendarWidget(pCalender); m_pdeEnd->setCalendarPopup(true); m_pcbDate = new QComboBox; m_pcbDate->addItems(QStringList() << "ALL" << "NotAll"); m_pcbPeriod = new QComboBox; m_pcbPeriod->addItems(QStringList() << "None" << "1 Day" << "1 Week" << "1 Month"); hlayout->addWidget(m_pcbDate); hlayout->addWidget(new QLabel("Start:")); hlayout->addWidget(m_pdeStart); hlayout->addWidget(new QLabel("End:")); hlayout->addWidget(m_pdeEnd); hlayout1->addWidget(new QLabel("Period:")); hlayout1->addWidget(m_pcbPeriod); vlayout->addLayout(hlayout); vlayout->addLayout(hlayout1); vlayout->addLayout(hlayout); vlayout->addLayout(hlayout1); groupBox->setCheckable(true); groupBox->setLayout(vlayout); return groupBox; } QGroupBox *YMBasicWidget::setFilter() { QHBoxLayout *hlayout = new QHBoxLayout; m_pleKeyword = new QLineEdit; m_pleTop = new QLineEdit; hlayout->addWidget(new QLabel("Top: <")); hlayout->addWidget(m_pleTop); hlayout->addWidget(new QLabel("Keyword:")); hlayout->addWidget(m_pleKeyword); QGroupBox *groupBox = new QGroupBox(tr("Filter")); groupBox->setCheckable(true); groupBox->setLayout(hlayout); groupBox->setChecked(false); return groupBox; } QGroupBox *YMBasicWidget::setOther() { QHBoxLayout *hlayout = new QHBoxLayout; m_pcbThread = new QComboBox; hlayout->addWidget(new QLabel("Thread:")); hlayout->addWidget(m_pcbThread); m_pcbThread->addItems(QStringList() << "1" << "2" << "4" << "8"); QGroupBox *groupBox = new QGroupBox(tr("Other")); groupBox->setCheckable(true); groupBox->setLayout(hlayout); return groupBox; } QGroupBox *YMBasicWidget::setSort() { QHBoxLayout *hlayout = new QHBoxLayout; m_rbDateMorphere = new QRadioButton("Date/Morphere"); m_rbMorphereDate = new QRadioButton("Morphere/Date"); m_bgRadioGroup = new QButtonGroup; m_bgRadioGroup->addButton(m_rbMorphereDate); m_bgRadioGroup->addButton(m_rbDateMorphere); m_rbMorphereDate->setChecked(true); hlayout->addWidget(m_rbMorphereDate); hlayout->addWidget(m_rbDateMorphere); QGroupBox *groupBox = new QGroupBox(tr("Sort")); groupBox->setCheckable(true); groupBox->setLayout(hlayout); return groupBox; } QGroupBox *YMBasicWidget::setDictionary() { QHBoxLayout *hlayout = new QHBoxLayout; m_pcbDictionary = new QComboBox; m_pcbDictionary->setEditable(true); m_pcbDictionary->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); QPushButton* add = new QPushButton; QPushButton* del = new QPushButton; add->setText(tr("+")); del->setText(tr("-")); //hlayout->addWidget(new QLabel(tr("User-Dict: "))); hlayout->addWidget(m_pcbDictionary); hlayout->addWidget(add); hlayout->addWidget(del); connect(add, SIGNAL(released()),this, SLOT(AddDictionary())); connect(del, SIGNAL(released()),this, SLOT(DelDictionary())); QGroupBox *groupBox = new QGroupBox(tr("User Dictionary")); groupBox->setCheckable(true); groupBox->setLayout(hlayout); return groupBox; } void YMBasicWidget::AddDictionary() { QStringList strFilenames = QFileDialog::getOpenFileNames(0,"Dictionary file",QDir::currentPath(), "dic files (*.dic);;All files (*.*)",new QString("Dictionary files (*.dic)")); foreach(QString strFilename, strFilenames) { QFile file(strFilename); if (!file.open(QIODevice::ReadOnly)) return; } for(int i = 0; i < m_pcbDictionary->count(); i++) { if(strFilenames.contains(m_pcbDictionary->itemText(i))) strFilenames.removeOne(m_pcbDictionary->itemText(i)); } m_pcbDictionary->addItems(strFilenames); } QString YMBasicWidget::getUserDictList() { QStringList strList; for(int i = 0; i < m_pcbDictionary->count();i++) { strList << m_pcbDictionary->itemText(i); } return strList.join(","); } void YMBasicWidget::DelDictionary() { m_pcbDictionary->removeItem(0); qDebug() << getUserDictList(); } bool YMBasicWidget::isSortMorphereDateChecked() { return m_rbMorphereDate->isChecked(); } bool YMBasicWidget::isSortDateMorphereChecked() { return m_rbDateMorphere->isChecked(); } void YMBasicWidget::MorphereListAdd() { QList listitem = m_plwMorphereList->selectedItems(); foreach(QListWidgetItem *item, listitem) { for(int i = 0; i < m_plwMorphereAdd->count();i++) { if(item->data(Qt::UserRole) == m_plwMorphereAdd->item(i)->data(Qt::UserRole)) m_plwMorphereAdd->item(i)->setHidden(false); } } } void YMBasicWidget::MorphereListDel() { for(int i = m_plwMorphereAdd->count() - 1; i >= 0 ;i--) { if(m_plwMorphereAdd->item(i)->isSelected()) { m_plwMorphereAdd->item(i)->setHidden(true); } } } QTableWidget *YMBasicWidget::AddTable(QString _str) { STable *pTable = new STable; m_ptwData->addTab(pTable,_str); return (QTableWidget *)pTable; } void YMBasicWidget::CloseTab(int index) { ((STable*)(m_ptwData->widget(index)))->clear(); m_ptwData->removeTab(index); } void YMBasicWidget::DoubleClickTab(int index) { bool ok; if (index < 0) return; QString text = QInputDialog::getText(this,"Tab name change","Name : ", QLineEdit::Normal,m_ptwData->tabText(index), &ok); if (ok) { m_ptwData->setTabText(index,text); } } void YMBasicWidget::FileImport() { QString strFilename = QFileDialog::getOpenFileName(0,"Import file",QDir::currentPath(), "csv files (*.csv);;All files (*.*)",new QString("Text files (*.csv)")); QFile file(strFilename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; clearResult(); m_mapViewResult.clear(); //qDebug() << "clear is complete"; QTextStream in(&file); while(!in.atEnd()) { QString strLine = in.readLine(); strLine = strLine.replace("\"",""); //qDebug() << strLine; QStringList strListLine = strLine.split(","); if(strListLine.size() != 4) continue; //qDebug() << strListLine.at(4).trimmed().toInt(); QString strKey = strListLine.at(0).trimmed() + "~!@" + strListLine.at(1).trimmed() + "~!@" + strListLine.at(2).trimmed(); m_mapResult.insert(strKey, strListLine.at(3).trimmed().toInt()); } file.close(); for(QMap::iterator iterPos = m_mapResult.begin(); iterPos != m_mapResult.end(); iterPos++) { QString strkey = iterPos.key(); int count = iterPos.value(); QStringList strlistKey = strkey.split("~!@"); QString strDate = strlistKey.at(0); QString strMorphere = strlistKey.at(1); QString strKeyword = strlistKey.at(2); if(m_mapViewResult.contains(strDate)) { if(m_mapViewResult.value(strDate).contains(strMorphere)) { m_mapViewResult[(strDate)][(strMorphere)].insertMulti(count, strKeyword); } else { QMap qLast; qLast.insert(count, strKeyword); m_mapViewResult[(strDate)].insert(strMorphere, qLast); } } else { QMap qLast; qLast.insert(count , strKeyword); QMap > qMedium; qMedium.insert(strMorphere, qLast); m_mapViewResult.insert(strDate, qMedium); } } ViewResult(); } void YMBasicWidget::SaveFile() { /* QString strFilename = QFileDialog::getSaveFileName(0,"save file",QDir::currentPath(), "csv files (*.csv);;All files (*.*)",new QString("Text files (*.csv)")); if (strFilename.toLower().right(4) != QString(".csv")) strFilename += ".csv"; QFile file(strFilename); if(!file.open(QFile::WriteOnly | QFile::Text)) return; QTextStream out(&file); STable* pTable = (STable*)((QTabWidget*)(m_ptwTable->currentWidget()))->currentWidget(); int nCountIndex = pTable->columnCount() - 1; int nKeywordIndex = pTable->columnCount() - 2; QString strCKeyword = m_pleCKeyword->text().trimmed(); for (int i = 0; i < pTable->rowCount(); i++) { QString strKeyword = pTable->item(i, nKeywordIndex)->text().trimmed(); int nCount = pTable->item(i, nCountIndex)->text().trimmed().toInt(); for(int j = 0; j < nCount; j++) { out << strCKeyword << ";" << strKeyword << endl; } } file.close(); */ } void YMBasicWidget::FileExport() { QString strFilename = QFileDialog::getSaveFileName(0,"Exoprt file",QDir::currentPath(), "csv files (*.csv);;All files (*.*)",new QString("Text files (*.csv)")); if (strFilename.toLower().right(4) != QString(".csv")) strFilename += ".csv"; QFile file(strFilename); if(!file.open(QFile::WriteOnly | QFile::Text)) return; QTextStream out(&file); for (int i = 0; i < m_ptwData->count(); i++) { m_ptwData->setTabEnabled(i, true); QTabWidget* p_childWidget = (QTabWidget*)(m_ptwData->widget(i)); for (int j = 0; j < p_childWidget->count(); j++) { p_childWidget->setTabEnabled(j, true); STable *stable = (STable *) (p_childWidget->widget(j)); for (int nCount = 0 ; nCount < stable->rowCount(); nCount++ ) { QString str = stable->item(nCount,0)->text().trimmed() + "," + stable->item(nCount,1)->text().trimmed(); out << m_ptwData->tabText(i).trimmed() << "," << p_childWidget->tabText(j).trimmed() << ","; out << str << endl; } } } file.close(); } int YMBasicWidget::getThread() { return m_pcbThread->currentText().toInt(); } unsigned int YMBasicWidget::getDateStart() { return m_pdeStart->dateTime().toString("yyyy-MM-dd").replace("-","").trimmed().toInt(); } unsigned int YMBasicWidget::getDateEnd() { return m_pdeEnd->dateTime().toString("yyyy-MM-dd").replace("-","").trimmed().toInt(); } int YMBasicWidget::getPeriod() { return m_pcbPeriod->currentIndex(); } QStringList YMBasicWidget::getMorphereList() { QStringList strList; for(int i = 0; i < m_plwMorphereAdd->count();i++) { if(m_plwMorphereAdd->item(i)->isHidden()) continue; else { strList << m_plwMorphereAdd->item(i)->data(Qt::UserRole).toString(); } } return strList; } bool YMBasicWidget::getDateAll() { if(m_pcbDate->currentIndex() == 0) return true; else return false; } QTabWidget* YMBasicWidget::getQTabWidget() { return m_ptwData; } void YMBasicWidget::MemClear() { m_mapResult.clear(); m_mapViewResult.clear(); } bool YMBasicWidget::setListMorphere(QStringList& MorphereEN, QStringList& MorphereKO) { QFile fHeader("morpherelist.txt"); if (!fHeader.open(QIODevice::ReadOnly | QIODevice::Text)) return false; QTextStream in(&fHeader); QString str = in.readLine(); if(str.at(0) == '#') { } else { qDebug() << "The wrong file is read"; return false; } while(!in.atEnd()) { str = in.readLine(); QStringList strList = str.trimmed().split("@",QString::SkipEmptyParts); if(strList.isEmpty()) break; if(strList.size() < 2) return false; MorphereEN << strList.at(0).trimmed().replace("\"","").trimmed(); MorphereKO << strList.at(1).trimmed().replace("\"","").trimmed(); } return true; } void YMBasicWidget::RawFileExport() { QString strFilename = QFileDialog::getSaveFileName(0,"Exoprt file",QDir::currentPath(), "csv files (*.csv);;All files (*.*)",new QString("Text files (*.csv)")); if (strFilename.toLower().right(4) != QString(".csv")) strFilename += ".csv"; QFile file(strFilename); if(!file.open(QFile::WriteOnly | QFile::Text)) return; QTextStream out(&file); /* out << "#Head#,"; for (int nCount = 0;nCount < pCurrent->columnCount() ;nCount++ ) out << pCurrent->horizontalHeaderItem(nCount)->text() << ","; m_pProgress->setRange(0,pCurrent->rowCount()-1); */ for( QMap > >::iterator iterPos = m_mapViewResult.begin(); iterPos != m_mapViewResult.end(); iterPos++) { for(QMap >::iterator iterPos2 = iterPos.value().begin(); iterPos2 != iterPos.value().end(); iterPos2++) { QMapIterator i(m_mapViewResult[iterPos.key()][iterPos2.key()]); i.toBack(); while(i.hasPrevious()) { i.previous(); out << "\"" << iterPos.key() << "\"" << ","; out << "\"" << iterPos2.key() << "\"" << ","; out << "\"" << i.value() << "\"" << ","; out << "\"" << i.key() << "\"" << "\n"; } } } file.close(); } YMBasicWidget::~YMBasicWidget() { } void YMBasicWidget::clearViewResult() { } void YMBasicWidget::clearView() { m_mapViewResult.clear(); } void YMBasicWidget::SortViewResult() { if(isSortDateMorphereChecked()) { for(QMap::iterator iterPos = m_mapResult.begin(); iterPos != m_mapResult.end(); iterPos++) { QString strkey = iterPos.key(); int count = iterPos.value(); QStringList strlistKey = strkey.split("~!@"); QString strDate = strlistKey.at(0); QString strMorphere = strlistKey.at(1); QString strKeyword = strlistKey.at(2); if(m_mapViewResult.contains(strDate)) { if(m_mapViewResult.value(strDate).contains(strMorphere)) { m_mapViewResult[(strDate)][(strMorphere)].insertMulti(count, strKeyword); } else { QMap qLast; qLast.insert(count, strKeyword); m_mapViewResult[(strDate)].insert(strMorphere, qLast); } } else { QMap qLast; qLast.insert(count , strKeyword); QMap > qMedium; qMedium.insert(strMorphere, qLast); m_mapViewResult.insert(strDate, qMedium); } } } else { for(QMap::iterator iterPos = m_mapResult.begin(); iterPos != m_mapResult.end(); iterPos++) { QString strkey = iterPos.key(); int count = iterPos.value(); QStringList strlistKey = strkey.split("~!@"); QString strDate = strlistKey.at(0); QString strMorphere = strlistKey.at(1); QString strKeyword = strlistKey.at(2); if(m_mapViewResult.contains(strMorphere)) { if(m_mapViewResult.value(strMorphere).contains(strDate)) { m_mapViewResult[(strMorphere)][(strDate)].insertMulti(count, strKeyword); } else { QMap qLast; qLast.insert(count, strKeyword); m_mapViewResult[(strMorphere)].insert(strDate, qLast); } } else { QMap qLast; qLast.insert(count , strKeyword); QMap > qMedium; qMedium.insert(strDate, qLast); m_mapViewResult.insert(strMorphere, qMedium); } } } } void YMBasicWidget::ViewResult() { SortViewResult(); foreach(STable* ptable, m_lTable) { ptable->clear(); delete ptable; } m_lTable.clear(); foreach(QTabWidget* pwidget, m_lTabWidget) { pwidget->clear(); delete pwidget; } m_lTabWidget.clear(); m_ptwTable = getQTabWidget(); m_ptwTable->clear(); for( QMap > >::iterator iterPos = m_mapViewResult.begin(); iterPos != m_mapViewResult.end(); iterPos++) { QTabWidget* temp = new QTabWidget; for(QMap >::iterator iterPos2 = iterPos.value().begin(); iterPos2 != iterPos.value().end(); iterPos2++) { int ncRow = 0; STable *pNew = new STable; pNew->setColumnCount(2); pNew->setRowCount(m_mapViewResult[iterPos.key()][iterPos2.key()].size()); pNew->setHorizontalHeaderItem(0 ,new QTableWidgetItem("Keyword")); pNew->setHorizontalHeaderItem(1 ,new QTableWidgetItem("Count")); QMapIterator i(m_mapViewResult[iterPos.key()][iterPos2.key()]); i.toBack(); while(i.hasPrevious()) { i.previous(); pNew->setItem(ncRow,0,new QTableWidgetItem(QString(i.value()))); pNew->setItem(ncRow,1,new QTableWidgetItem(QString::number(i.key()))); ncRow++; } temp->addTab(pNew, iterPos2.key()); m_lTable << pNew; } m_ptwTable->addTab(temp, iterPos.key()); m_lTabWidget << temp; } } QMap YMBasicWidget::convertToParam() { QMap mapParam; mapParam.insert("Algorithm", "basic"); { QString strMorphereList = getMorphereList().join(" "); mapParam.insert("MorphereList",strMorphereList); } { int nThread = getThread(); mapParam.insert("Thread", QString::number(nThread)); } { QString strUserDict = getUserDictList(); if(strUserDict.trimmed().length() > 0) mapParam.insert("UserDict", strUserDict); } { if(getDateAll()) mapParam.insert("DateALL", "true"); else mapParam.insert("DateALL", "false"); } { mapParam.insert("DateStart", QString::number(getDateStart())); mapParam.insert("DateEnd", QString::number(getDateEnd())); } { mapParam.insert("Period", QString::number(getPeriod())); } return mapParam; }