From 0caba95e05bcb33af63610bc6722ae507770de15 Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Thu, 4 Jan 2024 14:49:22 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E7=95=8C=E9=9D=A2=EF=BC=8C?= =?UTF-8?q?=E5=B0=86=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=EF=BC=8C=E6=94=B9=E4=B8=BA=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/HGProductionTool/ProductionTool_zh_CN.qm | Bin 18184 -> 17961 bytes app/HGProductionTool/ProductionTool_zh_CN.ts | 88 ++- app/HGProductionTool/dialog_login.cpp | 113 ++- app/HGProductionTool/dialog_login.h | 18 +- app/HGProductionTool/dialog_login.ui | 740 ++++++++---------- .../dialog_registeraccount.cpp | 2 +- 6 files changed, 425 insertions(+), 536 deletions(-) diff --git a/app/HGProductionTool/ProductionTool_zh_CN.qm b/app/HGProductionTool/ProductionTool_zh_CN.qm index 133c00290cc35c1fd50ec867e4bf227ba58d38e3..10f5e3dc847fe46897f43e4526967a49d39cc158 100644 GIT binary patch delta 1849 zcmX|Bdr(w$7(I9QKK9;yVJaXBEUQSoL{LCbeB>BuqJWT^h6*eX1922#K*xm~Um&Jk z(H>?^5}If}D3gX97<|$+shJi!K8hmEveKzEl@9Gpe=vu;_xpX{`OZ1NyJ55N!6sqL zfM_oO&jO+Sh|_^EBQX^SKSWFiB8~y#MPTSh9t^#-bxNEw@GU@^2lRiR*anO|0w^;9 zpFB3vfv0=6z8&HYg1B=tFz7PGhLM2d9>n*FK@Q?oj!b~q*!P?QaZevsLOgnnhg%_@ ze#FN95HHnn^g0iQHhC~U8B#bYg@r?Ub`7b11F2v)AfJb{aUu|T7fRo=Ho6$fo_&CG zubv`|a67LVz^@&1)|Il~0nB-PpJ+wa zeF+#IRQN9`-yQ~^En`Ts_~n%ek9^HURj>cIjP1Q^_*wy5*-t( zM+3w6i(%0$2+k4XPUHfCXT-$#_sFzNEPcBYh@B{w-Eskm`QoOFH-Qm%^pl48eh`~B z(~tO8vFTNTcvH6;XZ91tgKM~T;1Ulyj_Jk5K(|Zkzl|RHZI>dPjFjjrO>5|4ICe-g zf64;J#Yh#orGVE|4-UTT!HD%z?RGL!a->bI%uK`$X{T!!VA>+>tL*^Hw-D3h*h!Th~K>aIHt=tgm{TO2Tr6|czFH{!WVtQ?w6SDsqwK}We9 zleB^-&&i{%a$>@6Irdl)V5^f8S6yUUx6An@_vrHHa(>f&VDuPyh3R`BYOGu{jhjg| za{V5nsZ-wnWj#&GlG{soF7cdvZCnQXBKUcnR(t4FlF4uw z%v7VvZZGCP*`}u=D}Xq`TNjvw>^hGVL1MC;a!Oj*1`Hc(Q6s zXrrKa)bPeM68uYjK6w&vuv1O{jznXU)S}$qNw`@p`<5B&U!>}5C|B4E>dvc6IrxIw z*sd}3pR0`>ME@}LROMpM@m9OyN72}i)n79+8TQBo^^ZJ}VLqxpytkM7?A8Kp)XQ0< zjo;_X#^<#O!xsXok2bY3j0bzQ*}v0|G2PmWX|eQWnwG0EtL6r+WHHfyu2x>yhjrSH z+xzIt745@-ha?j2LB}NR!|{CfvTH}Yy4@^**4i4(&w#3(%2FxOEUmL86!1>dzB+AV zjEl9d2@JnAOuLqO9tdeO&n#kN|8{d~C#4)a-8{Rb@A*%2R`xIsnrF`4J&^qlns+=( zd68Wb?_&-)L#Fxw9#S3Gu#fzH#swGFt7yA$}IQiJK(~7N>13 zH~+#Cet?aK)mSDKQYrDKCGBs%54vZ0@mv?bk4r5J7WEB!T7N7DxI@-k+It0-Wm_(< zq|#B#EDy5l>CBgw2PG76rmo`7I8$CO_E)7?P}cXKFa+JL}T@BYDLX zYt{MHOhlb^W2z6M=VNW{;5fr2Yj5=w?k(98OW7~_wrzR~uc91n%g(Sue^c>WB-!eg z4Pc0_+D@%{h2BQnE)1r$em~p(al0ttWV`VC3ElyN-JF)e4^z5*PzKW&(`k2}rKEw; z_8B!6hAz$SdcyFA>GoCY3TcIjc$Sv!)CZb^EbUbcqJ24EB=zcTs=xlu5L0uBse6!a zA8ONUoo)Jxp}x(nLw5)v+7>nY*47mFl3qU(8$#w^|5>ggS5B!Tr({W9VZI};u*jvS zh4}iW$GZ-t`)nxqzfjIxn!BjfrEhim49lLi0Iu~j{w(`-LFWGjwigOr<&NCKWo%cn LtfDz+c#q>>15oCS delta 1926 zcmX|BYgCj~6g@NZJ?4ANjDUiI;4m@}Gk_xUR1qsMN(BVc)J%Z^M@NQWfJAFB(-M64 zfv?mo4NFqXSJ@(jKna#DHD5*MqingPtSnlIk+x}C{g}1q-0$9f&e><*``#MWYwJ`S z21k!3qBNrLv%o1tmd}8hL=jHlbfU;gBIW{7NSOyM^&3;;OvYJ6>}(>RcYrNK(a#g{ z8AN`CAW^{9uyIG2`#Le(*AWf7Ow1mn2|h&3I|FzPcmZQ)SGkbKK{NmEg+!-mZZAtTHjJuI<`WG`R?W$(BN~yTns;vo(IbDT$`|#K zl}v@IiWRRDSvysgzMm2$hpFnMY9dXfs>vQfl$fBp^&kg$QPHXW+&`*6x%Ly<|5@E0 zRRekMsxMB<1bv^ne{B@e_+6SOhV~G}q-gSkwh;~eNVDqjS)wso%~zfNkTF^FO<57x z44UipVApgr#+2nmVT%|`G`@$Ln7H-=BIBz}QvBPHF_v-dK>M)|nTp#s$Tu#OS##kA z(WpjczdGLQ1k<<qb{~H zVk}WoEPG8fBTi86XoB6kt?^jv<-+s&h`g72FgT7IGoc*o>$#XK;7-cpVn22e>DO{e z%Pzo+o46w9@0e8$SJc=G{F5u!evcmSb2U$*Vz!2>-wV`saqpjj2h4$7s}twOt>>-5QS*5>pSS?dkNK8QnX?jVUg1;kK;49sd{G5vs*2=mim)DWn%~16$5b-- zf18TW=R0Cu@Z=f(Li1#pD30&$uY*+2@IAsUc%xsd{*d4eo7P}hj6Zo=@5m)YaV=W^ zUDzkz(oS2Rj@bQzwl;SUI=`*mIc_e|gtxVAOMZY|)Pg<{g-JgN)`l#M`1#2bZ%RuS&45gOWnfwzTIRSS{F zSLlw9!4!`QKj-EWxg+lhzZEh>!xM%3zrPEK^28B(NH)?cChr>x;&bA}(0N3HpO{`{ z!NG^(jJp^~;%;$PRxCy%hy@~iDD4rQ3xPpH#Y+1CP7ycv?1K-ti3fu2Bku8FFo_3} z5f3tmhX&mwH;p|ZHZ_@HR6#s7S0IY_7Q2pz6ZvL|=R5QmMTFQr5ysY8#H+dIa1Y&5 zh6BVw)ly~`q#Q3vIhT&0L$@@;Ik0|InwuAb&i$o=-9x~8P}r z|Am%eToKJNWc&WVTRYWWY+r1z8aUv0*ni|El~Nw!>*JkmbJ+4-#(ZaSp}ojhXm|X( zL8%A{y>SD85cOqT*mpu1;!F*sS+JBSn&!B RP|D5TN?)kgVY|7-_zy>Y{%QaK diff --git a/app/HGProductionTool/ProductionTool_zh_CN.ts b/app/HGProductionTool/ProductionTool_zh_CN.ts index 514a41a..ff7ce42 100644 --- a/app/HGProductionTool/ProductionTool_zh_CN.ts +++ b/app/HGProductionTool/ProductionTool_zh_CN.ts @@ -656,95 +656,104 @@ Dialog_logIn - + Dialog 登录 - - TextLabel - - - - + Login 登录 - + account: 账户: - + password: 密码: - + remember password Show password 记住密码 - + show password 显示密码 - + dbHost: 数据库地址: - + dbPort: 数据库端口: - + ftpHost: FTP地址: - + ftpPort: FTP端口: - + Burn 烧录工位 - + InitTest 初检工位 - + ImageTest 图像测试工位 - + + Select config file: + 选择配置: + + + + Update + 刷新列表 + + + + View directory + 打开文件目录 + + + PressureTest 压力测试工位 - + Register 注册 - + Select Profile 选择配置文件 - Select config file - 选择配置文件 + 选择配置文件 host: @@ -755,7 +764,7 @@ 端口号: - + LOG IN 登录 @@ -764,57 +773,52 @@ 退出 - Set host and port - 设置IP与端口 + 设置IP与端口 - Minimize - 最小化 + 最小化 - Close - 关闭 + 关闭 - LogIn - 登录 + 登录 - - - - + + + + Prompt 提示 - + Account dose not exist 账户不存在 - + Password can not be empty 密码不能为空 - + Password error 密码错误 - + Please select a profile first 请先选择配置文件 - Select profile - 选择配置文件 + 选择配置文件 tips diff --git a/app/HGProductionTool/dialog_login.cpp b/app/HGProductionTool/dialog_login.cpp index 88a719f..478d4aa 100644 --- a/app/HGProductionTool/dialog_login.cpp +++ b/app/HGProductionTool/dialog_login.cpp @@ -4,7 +4,9 @@ #include #include #include +#include #include "base/HGUtility.h" +#include "HGString.h" #include "HGUIGlobal.h" #include "dialog_registeraccount.h" #include "app_cfg.h" @@ -17,7 +19,7 @@ Dialog_logIn::Dialog_logIn(QWidget *parent) : { ui->setupUi(this); - setWindowFlags(Qt::FramelessWindowHint); + setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); QFont ft; ft.setPointSize(15); @@ -28,7 +30,6 @@ Dialog_logIn::Dialog_logIn(QWidget *parent) : ui->lineEdit_password->setFont(ft2); ui->pbtn_login->setDefault(true); - ui->pbtn_setting->setVisible(false); ui->radioButton_pressureTest->setVisible(false); saveCfgValue("admin", "password", getCfgValue("admin", "password", QString("huagaoadmin"))); @@ -47,29 +48,24 @@ Dialog_logIn::Dialog_logIn(QWidget *parent) : ui->radioButton_imageTest->setChecked(true); } - ui->pbtn_setting->setToolTip(tr("Set host and port")); - ui->pbtn_minum->setToolTip(tr("Minimize")); - ui->pbtn_close->setToolTip(tr("Close")); - ui->label_title->setText(tr("LogIn")); - ui->lineEdit_password->setEchoMode(QLineEdit::EchoMode::Password); - ui->lineEdit_profilePath->setReadOnly(true); + updateProfileFileList(); - m_profileName = getCfgValue("login", "profile", m_profileName); + ui->lineEdit_password->setEchoMode(QLineEdit::EchoMode::Password); ui->lineEdit_account->setText(getCfgValue("login", "account", QString(""))); - ui->lineEdit_profilePath->setText(m_profileName); ui->checkBox_showPswd->setChecked(getCfgValue("login", "showPassword", false)); ui->checkBox_rememberPswd->setChecked(getCfgValue("login", "rememberPassword", false)); + if (ui->lineEdit_account->text() == "admin") ui->checkBox_rememberPswd->setChecked(false); if (ui->checkBox_rememberPswd->isChecked()) { QString account = ui->lineEdit_account->text(); - QString cfgPassword = getCfgValue(account.toStdString().c_str(), "password", QString("")); + QString cfgPassword = getCfgValue(account.toLocal8Bit().toStdString().c_str(), "password", QString("")); if (!cfgPassword.isEmpty()) { - ui->lineEdit_password->setText(getCfgValue(account.toStdString().c_str(), "password", QString(""))); + ui->lineEdit_password->setText(cfgPassword); } } @@ -130,29 +126,36 @@ QString Dialog_logIn::GetProfileName() return m_profileName; } -void Dialog_logIn::mousePressEvent(QMouseEvent *event) +QString Dialog_logIn::getCurrentExePath() { - if(event->button()==Qt::LeftButton) - { - m_leftMousePressed = true; - m_startPos = event->globalPos(); - } + HGChar currentPath[256] = { 0 }; + HGBase_GetCurrentDir(currentPath, 256); + strcat(currentPath, "production-tool"); + strcat(currentPath, "/"); + return getStdFileName(StdStringToUtf8(currentPath).c_str()); } -void Dialog_logIn::mouseMoveEvent(QMouseEvent *event) +void Dialog_logIn::updateProfileFileList() { - if(m_leftMousePressed) - { - this->window()->move(this->window()->geometry().topLeft() + event->globalPos() - m_startPos); - m_startPos = event->globalPos(); - } -} + ui->comboBox_filenameList->clear(); -void Dialog_logIn::mouseReleaseEvent(QMouseEvent *event) -{ - if(event->button()==Qt::LeftButton) + QString currentExePath = getCurrentExePath(); + QDir dir(currentExePath); + if (dir.exists()) { - m_leftMousePressed = false; + QFileInfoList fileList = dir.entryInfoList(QDir::Files); + for (int i = 0; i < fileList.size(); ++i) + { + QFileInfo file(fileList[i]); + ui->comboBox_filenameList->addItem(file.baseName()); + } + } + + if (ui->comboBox_filenameList->count() > 0) + { + QString fileName = getCfgValue("login", "profile", QString("")); + QFileInfo file(fileName); + ui->comboBox_filenameList->setCurrentText(file.baseName()); } } @@ -161,7 +164,7 @@ void Dialog_logIn::on_pbtn_login_clicked() QString account = ui->lineEdit_account->text(); QString password = ui->lineEdit_password->text(); - QString cfgPassword = getCfgValue(account.toStdString().c_str(), "password", QString("")); + QString cfgPassword = getCfgValue(account.toLocal8Bit().toStdString().c_str(), "password", QString("")); if (cfgPassword.isEmpty()) { QMessageBox::information(this, tr("Prompt"), tr("Account dose not exist")); @@ -180,7 +183,7 @@ void Dialog_logIn::on_pbtn_login_clicked() return; } - if (ui->lineEdit_profilePath->text().isEmpty() && !ui->radioButton_burn->isChecked()) + if (ui->comboBox_filenameList->currentText().isEmpty() && !ui->radioButton_burn->isChecked()) { QMessageBox::information(this, tr("Prompt"), tr("Please select a profile first")); return; @@ -200,6 +203,9 @@ void Dialog_logIn::on_pbtn_login_clicked() saveCfgValue("login", "rememberPassword", ui->checkBox_rememberPswd->isChecked()); saveCfgValue("login", "showPassword", ui->checkBox_showPswd->isChecked()); + m_profileName = getCurrentExePath() + ui->comboBox_filenameList->currentText() + ".json"; + saveCfgValue("login", "profile", m_profileName); + m_accountName = account; accept(); @@ -230,44 +236,27 @@ void Dialog_logIn::on_pbtn_login_clicked() // } } -void Dialog_logIn::on_pbtn_setting_clicked(bool checked) -{ - if (checked) - { - ui->stackedWidget->setCurrentIndex(1); - } - else - { - ui->stackedWidget->setCurrentIndex(0); - } -} - -void Dialog_logIn::on_pbtn_minum_clicked() -{ - this->window()->showMinimized(); -} - -void Dialog_logIn::on_pbtn_close_clicked() -{ - close(); -} - void Dialog_logIn::on_pbtn_register_clicked() { Dialog_RegisterAccount dlg; dlg.exec(); } - -void Dialog_logIn::on_pbtn_selectCfgFile_clicked() -{ - QString fileName = QFileDialog::getOpenFileName(nullptr, tr("Select profile"), "", "*.json"); - ui->lineEdit_profilePath->setText(fileName); - m_profileName = getStdFileName(fileName); - saveCfgValue("login", "profile", m_profileName); -} - void Dialog_logIn::on_checkBox_showPswd_toggled(bool checked) { ui->lineEdit_password->setEchoMode(checked ? QLineEdit::Normal : QLineEdit::Password); } + +void Dialog_logIn::on_pushButton_updateFilename_clicked() +{ + updateProfileFileList(); +} + +void Dialog_logIn::on_pushButton_viewDirectory_clicked() +{ + QString fileName = getCfgValue("login", "profile", ui->comboBox_filenameList->currentText()); + QFileInfo fileInfo(fileName); + auto pathDir = fileInfo.path(); + QString strFilePath = "file:///" + pathDir; + QDesktopServices::openUrl(QUrl(strFilePath)); +} diff --git a/app/HGProductionTool/dialog_login.h b/app/HGProductionTool/dialog_login.h index 8b65629..b56326a 100644 --- a/app/HGProductionTool/dialog_login.h +++ b/app/HGProductionTool/dialog_login.h @@ -31,25 +31,21 @@ public: QString GetAccountName(); QString GetProfileName(); - void mousePressEvent(QMouseEvent *event); - void mouseMoveEvent(QMouseEvent *event); - void mouseReleaseEvent(QMouseEvent *event); +private: + QString getCurrentExePath(); + void updateProfileFileList(); private slots: void on_pbtn_login_clicked(); - void on_pbtn_setting_clicked(bool checked); - - void on_pbtn_minum_clicked(); - - void on_pbtn_close_clicked(); - void on_pbtn_register_clicked(); - void on_pbtn_selectCfgFile_clicked(); - void on_checkBox_showPswd_toggled(bool checked); + void on_pushButton_updateFilename_clicked(); + + void on_pushButton_viewDirectory_clicked(); + private: Ui::Dialog_logIn *ui; diff --git a/app/HGProductionTool/dialog_login.ui b/app/HGProductionTool/dialog_login.ui index 9cfbc0a..3939b23 100644 --- a/app/HGProductionTool/dialog_login.ui +++ b/app/HGProductionTool/dialog_login.ui @@ -6,461 +6,361 @@ 0 0 - 538 - 338 + 557 + 351 + + + 557 + 351 + + + + + 557 + 351 + + Dialog - - - - 0 - 0 - 541 - 30 - - - - - 16777215 - 31 - - - - QWidget#widget -{ - background-color: rgb(245, 245, 245); -} -QLabel#label_icon -{ - image:url(:image/image_rsc/icon/admin.png); -} -QPushButton#pbtn_setting -{ - border-style: solid; - border-width: 0px; - border-radius: 0px; - background-color: rgba(223, 223, 223, 0); - image:url(:image/image_rsc/icon/setting.ico); -} -QPushButton#pbtn_minum -{ - border-style: solid; - border-width: 0px; - border-radius: 0px; - background-color: rgba(223, 223, 223, 0); - image:url(:image/image_rsc/icon/minum.ico); -} -QPushButton#pbtn_close -{ - border-style: solid; - border-width: 0px; - border-radius: 0px; - background-color: rgba(223, 223, 223, 0); - image:url(:image/image_rsc/icon/close.ico); -} -QPushButton::focus{outline: none;} -QPushButton#pbtn_setting::hover -{ - border-style: solid; - border-width: 0px; - border-radius: 0px; - background-color: rgba(223, 223, 223, 150); -} -QPushButton#pbtn_minum::hover -{ - border-style: solid; - border-width: 0px; - border-radius: 0px; - background-color: rgba(223, 223, 223, 150); -} -QPushButton#pbtn_close::hover -{ - border-style: solid; - border-width: 0px; - border-radius: 0px; - background-color: rgba(223, 223, 223, 150); -} - - - - - - - - 13 楷体 - 9 - 50 - false - false - - - - TextLabel - - - - - - - Qt::Horizontal - - - - 112 - 10 - - - - - - - - - - - true - - - - - - - - - - - - - - - - - - - - - - - 10 - 30 - 521 - 301 - - - - 0 - - - - Login - - - - - 60 - 0 - 421 - 141 - - + + + 0 - - + + + Login + + - 80 - 30 - 48 - 16 + 60 + 0 + 421 + 141 + + + + 0 + + + + + + 80 + 30 + 48 + 16 + + + + account: + + + + + + 140 + 30 + 161 + 22 + + + + + + + 80 + 90 + 54 + 16 + + + + password: + + + + + + 140 + 90 + 161 + 22 + + + + + + + 310 + 80 + 141 + 21 + + + + remember password + + + + + + 310 + 100 + 141 + 21 + + + + show password + + + + + + + + 20 + 20 + 111 + 16 + + + + dbHost: + + + + + + 150 + 20 + 171 + 20 + + + + + + + 20 + 50 + 111 + 16 + + + + dbPort: + + + + + + 150 + 50 + 171 + 20 + + + + + + + 50 + 80 + 81 + 16 + + + + ftpHost: + + + + + + 150 + 80 + 171 + 20 + + + + + + + 50 + 110 + 81 + 16 + + + + ftpPort: + + + + + + 150 + 110 + 171 + 20 + + + + + + + 80 + 40 + 151 + 21 + + + + PressureTest + + + + + + + + 40 + 150 + 131 + 20 - account: + Burn + + + true - + - 140 - 30 - 161 - 22 - - - - - - - 80 - 90 - 54 - 16 - - - - password: - - - - - - 140 - 90 - 161 - 22 - - - - - - - 310 - 80 + 190 + 150 141 21 - remember password + InitTest - + - 310 - 100 - 141 - 21 - - - - show password - - - - - - - - 20 - 20 - 111 - 16 - - - - dbHost: - - - - - - 150 - 20 - 171 - 20 - - - - - - - 20 - 50 - 111 - 16 - - - - dbPort: - - - - - - 150 - 50 - 171 - 20 - - - - - - - 50 - 80 - 81 - 16 - - - - ftpHost: - - - - - - 150 - 80 - 171 - 20 - - - - - - - 50 - 110 - 81 - 16 - - - - ftpPort: - - - - - - 150 - 110 - 171 - 20 - - - - - - - 80 - 40 + 340 + 150 151 21 - PressureTest + ImageTest + + + + + + 160 + 210 + 75 + 31 + + + + LOG IN + + + true + + + true + + + + + + 280 + 210 + 75 + 31 + + + + Register + + + + + + Select Profile + + + + + 20 + 90 + 481 + 31 + + + + + + + 20 + 40 + 251 + 31 + + + + Select config file: + + + + + + 280 + 160 + 121 + 41 + + + + Update + + + + + + 60 + 160 + 171 + 41 + + + + View directory - - - - 40 - 150 - 131 - 20 - - - - Burn - - - true - - - - - - 190 - 150 - 141 - 21 - - - - InitTest - - - - - - 340 - 150 - 151 - 21 - - - - ImageTest - - - - - - 160 - 210 - 75 - 31 - - - - LOG IN - - - true - - - true - - - - - - 280 - 210 - 75 - 31 - - - - Register - - - - - - Select Profile - - - - - 170 - 140 - 141 - 31 - - - - Select config file - - - true - - - true - - - - - - 20 - 60 - 481 - 31 - - - - - + + diff --git a/app/HGProductionTool/dialog_registeraccount.cpp b/app/HGProductionTool/dialog_registeraccount.cpp index 388f64f..0560d06 100644 --- a/app/HGProductionTool/dialog_registeraccount.cpp +++ b/app/HGProductionTool/dialog_registeraccount.cpp @@ -43,7 +43,7 @@ void Dialog_RegisterAccount::on_pushButton_register_clicked() return; } - saveCfgValue(ui->lineEdit_account->text().toStdString().c_str(), "password", ui->lineEdit_password->text()); + saveCfgValue(ui->lineEdit_account->text().toLocal8Bit().toStdString().c_str(), "password", ui->lineEdit_password->text()); accept(); }