4 Commits

Author SHA1 Message Date
Krad
0fc1874d81 Merge branch 'Display' of http://192.168.1.9:3000/Bug/GUI into Display 2023-08-08 09:38:08 +08:00
Krad
0c522defb3 New ignore logic 2023-08-08 09:38:01 +08:00
krad
8e4881bf15 machine change 2023-03-29 09:33:07 +08:00
Krad
ba2daf58a5 Some display setting and logic 2023-03-28 14:08:02 +08:00
20 changed files with 1900 additions and 1476 deletions

4
.gitignore vendored
View File

@@ -1,6 +1,8 @@
/cmake-build-debug/
/.idea/*
/.idea/
/.idea/
/.svn/
/build/
/project/
/src/styles/
/cmake-build-release/

3
.idea/misc.xml generated
View File

@@ -4,4 +4,7 @@
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectPlainTextFileTypeManager">
<file url="file://$PROJECT_DIR$/src/translations/zh_CN.ts" />
</component>
</project>

View File

@@ -86,7 +86,7 @@ endif()
if(UNIX AND USE_SHIMLIB)
link_directories(/usr/local/lib64)
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Widgets Qt5::Gui Qt5::OpenGL Qt5::Sql Qt5::VirtualKeyboard Qt5::Network Qt5::Multimedia Qt5::MultimediaWidgets pthread usct_shim dmapi log4c cunit ctomat hdf5 matio m)
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Widgets Qt5::Gui Qt5::OpenGL Qt5::Sql Qt5::VirtualKeyboard Qt5::Network Qt5::Multimedia Qt5::MultimediaWidgets pthread xshim dmapi log4c cunit ctomat hdf5 matio m)
elseif(UNIX)
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Widgets Qt5::Gui Qt5::OpenGL Qt5::Sql Qt5::VirtualKeyboard Qt5::Network Qt5::Multimedia Qt5::MultimediaWidgets pthread)
else()

View File

@@ -1,400 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include "ShimLib.h"
#ifdef _WIN32
#include <Windows.h>
#include <process.h>
#else
#include <pthread.h>
#include <semaphore.h>
#include <fcntl.h>
#include <sys/time.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#endif
#include <stdbool.h>
#include <time.h>
typedef void(*error_cb)(const char* msg);
// level:0 infomation,1 warning,2 error,3 sucessed
typedef void(*message_callback)(const char* aMessage,const unsigned int aInfoType);
int statusCountFlag = 0;
error_cb innerCallback = NULL;
message_callback msgCallback = NULL;
bool isAutoScan = false;
#ifdef _WIN32
void ThreadFunc(void*);
HANDLE th;
HANDLE e1,e2;
#else
void* ThreadFunc(void*);
void InitSever();
pthread_t th;
pthread_t severThread;
sem_t e1;
sem_t e2;
#endif
int InitLib(error_cb cb)
{
innerCallback = cb;
innerCallback("11111");
#ifdef _WIN32
e1 = CreateEvent(NULL, FALSE, FALSE, "e1");
e2 = CreateEvent(NULL, FALSE, FALSE, "e2");
th = _beginthread(ThreadFunc, 0, NULL);
#else
sem_init(&e1, 0, 0);
sem_init(&e2, 0, 0);
th = pthread_create(&th, NULL, ThreadFunc, (void*)"");
severThread = pthread_create(&severThread, NULL, InitSever, (void*)"");
#endif
return 0;
}
void SetMessageCallback(message_callback cb)
{
msgCallback = cb;
msgCallback("info message", 0);
msgCallback("warning message", 1);
msgCallback("error message", 2);
msgCallback("sucess message", 3);
}
volatile int running = 1;
volatile int progress = 0;
volatile int status = READY;
volatile int stop_flag = 0;
volatile int empty = 0;
char output_path[256] = {0};
#ifdef _WIN32
void ThreadFunc(void* args)
{
#else
void* ThreadFunc(__attribute__((unused))void* args)
{
#endif
while (running)
{
stop_flag = 0;
progress = 0;
#ifdef _WIN32
WaitForSingleObject(e1, INFINITE);
#else
sem_wait(&e1);
#endif
status = SCANNING;
#ifdef _WIN32
Sleep(300);
#else
usleep(300000);
#endif
if (empty)
{
GetPreviewData();
}
if (isAutoScan)
{
for (int i = 0; i <= 50; ++i)
{
if (stop_flag > 0 || status != SCANNING)
{
stop_flag = 0;
break;
}
if (i == 20)
{
progress = 139;
#ifdef _WIN32
WaitForSingleObject(e2, INFINITE);
#else
sem_wait(&e2);
#endif
}
else if (i > 20 && i < 35)
{
progress = i * 2 + 100;
}
else if (i >= 35)
{
progress = i * 2 + 200;
}
else
{
progress = i * 2;
}
if (stop_flag > 0 || status != SCANNING)
{
stop_flag = 0;
break;
}
#ifdef _WIN32
Sleep(300);
#else
usleep(300000);
#endif
}
}
else
{
while (progress < 100)
{
}
}
status = READY;
}
}
#ifdef _WIN32
#else
void InitSever()
{
int severFd = socket(AF_INET,SOCK_STREAM,0);
if (-1 == severFd)
{
printf("socket failed");
return;
}
struct sockaddr_in severAddr;
severAddr.sin_family = AF_INET;
severAddr.sin_addr.s_addr = htonl(INADDR_ANY);
severAddr.sin_port = htons(8888);
if(0> bind(severFd,(struct sockaddr*)&severAddr,sizeof(severAddr)))
{
printf("bind failed");
return;
}
if(0> listen(severFd,2))
{
printf("listen failed");
return;
}
while (1)
{
int clientFd;
struct sockaddr_in clientAddr;
socklen_t clientAddrLen = sizeof(clientAddr);
clientFd = accept(severFd, (struct sockaddr*)&clientAddr, &clientAddrLen);
if (0 > clientFd)
{
printf("accept failed\n");
return;
}
printf("accept sucess\n");
while (1)
{
isAutoScan = false;
char receiveBuffer[64] = { 0 };
int ref = recv(clientFd, receiveBuffer, 64, 0);
if (ref > 0)
{
printf("received %s\n", receiveBuffer);
char* data = strtok(receiveBuffer,",");
if (!data || strlen(data) != 1)
{
send(clientFd,"unknow command",sizeof("unknow command"),0);
continue;
}
if (data[0] == '0')
{
char* arg1 = strtok(NULL,",");
char* arg2 = strtok(NULL,",");
if (!arg1 || !arg2)
{
send(clientFd,"unknow command",sizeof("unknow command"),0);
continue;
}
msgCallback(arg1, atoi(arg2));
send(clientFd,"msgCallback sucess",sizeof("msgCallback sucess"),0);
}
else if (data[0] == '1')
{
char* arg1 = strtok(NULL,",");
if (!arg1)
{
send(clientFd,"unknow command",sizeof("unknow command"),0);
continue;
}
innerCallback(arg1);
send(clientFd,"innerCallback sucess",sizeof("innerCallback sucess"),0);
}
else if (data[0] == 'p')
{
char* arg1 = strtok(NULL, ",");
if (!arg1)
{
send(clientFd,"unknow command",sizeof("unknow command"),0);
continue;
}
if (status == SCANNING)
{
progress = atoi(arg1);
send(clientFd, "set scan progress sucess", sizeof("set scan progress sucess"), 0);
}
else
{
send(clientFd, "status is not scaning", sizeof("status is not scaning"), 0);
}
}
else if (data[0] == 'e')
{
printf("client closed\n");
close(clientFd);
break;
}
}
else
{
printf("client closed\n");
close(clientFd);
break;
}
}
isAutoScan = true;
close(clientFd);
}
close(severFd);
}
#endif
int ScanControl(ScanAction actionType) {
switch (actionType) {
case SCAN:
printf("Do Scan!\r\n");
statusCountFlag = 2;
#ifdef _WIN32
SYSTEMTIME st = {0};
GetLocalTime(&st);
#else
time_t now;
struct tm* st;
time(&now);
st = localtime(&now);
#endif
sprintf(output_path, "%d%02d%02dT%02d%02d%02d",
#ifdef _WIN32
st.wYear,
st.wMonth,
st.wDay,
st.wHour,
st.wMinute,
st.wSecond);
SetEvent(e1);
#else
st->tm_year+1900,
st->tm_mon+1,
st->tm_mday,
st->tm_hour,
st->tm_min,
st->tm_sec);
sem_post(&e1);
#endif
break;
case PREVIEW_SCAN:
statusCountFlag = 1;
status = SCANNING;
printf("Do preview!\r\n");
break;
case STOP:
statusCountFlag = 0;
stop_flag = 1;
progress = 0;
status = READY;
#ifdef _WIN32
SetEvent(e2);
#else
sem_post(&e2);
#endif
printf("Stop everything!\r\n");
break;
case SCAN_CONTINUE:
#ifdef _WIN32
SetEvent(e2);
#else
sem_post(&e2);
#endif
break;
}
return 0;
}
StatusInfo GetStatus() {
StatusInfo inf;
inf.status = status;
inf.progress = progress;
return inf;
}
//result, 0 success, other false
#ifdef _WIN32
int SetScanInfo(const char* jsonString, int e) {
#else
int SetScanInfo(const __attribute__((unused))char* jsonString, __attribute__((unused))int e){
#endif
empty = e;
return 0;
}
int preivew_change_flag = 0;
const size_t Row = 140;
const size_t Col = 140;
#define BUFFER_SIZE Row * Col
const char* FRAME_FILE_PATH_1 = "./img1_v2.bin";
const char* FRAME_FILE_PATH_2 = "./pre_image.bin";
int previewCount = 0;
const char* GetPreviewData() {
previewCount++;
if (previewCount>3){
status = READY;
innerCallback("Preview Device Error");
return NULL;
}
FILE* file;
preivew_change_flag++;
preivew_change_flag = preivew_change_flag % 2;
// _sleep(2000);
if (file = fopen(preivew_change_flag ? FRAME_FILE_PATH_1 : FRAME_FILE_PATH_2, "rb")) {
unsigned char* buffer = malloc(sizeof(unsigned char) * BUFFER_SIZE);
fread(buffer, sizeof(unsigned char), BUFFER_SIZE, file);
fclose(file);
return buffer;
}
return NULL;
}
const char* GetDeviceInfo(DeviceInfo infoType) {
switch (infoType) {
case MEAN_TEMPERATURE:
return "28";
case VERSION:
return "6.6.06";
case DEV_OUTPATH:
return output_path;
}
return "";
}
#ifdef _WIN32
void StopDevice(){
CloseHandle(e1);
CloseHandle(e2);
}
#endif

View File

@@ -37,7 +37,6 @@ typedef enum {
extern int InitLib(void(*)(const char *msg));
extern void SetMessageCallback(void(*)(const char* aMessage,const unsigned int aInfoType));
extern int ScanControl(ScanAction actionType);

View File

@@ -3,7 +3,7 @@
#include <QTimer>
#include <QApplication>
#include "Keyboard/KeyboardManager.h"
#include "keyboard/KeyboardManager.h"
#include "ULineEditMenu.h"
namespace

View File

@@ -51,9 +51,9 @@ void errorCallback(const char* msg)
DeviceManager::Default()->emitErrorCallback(msg);
}
void infoCallback(const char* msg,const unsigned int aInfoType)
void infoCallback(const char* msg)
{
DeviceManager::Default()->emitInfoCallback(msg,aInfoType);
DeviceManager::Default()->emitInfoCallback(msg,0);
}
const char * getPhaseName(int phase){
@@ -62,7 +62,6 @@ const char * getPhaseName(int phase){
void DeviceManager::initDevice() {
InitLib(errorCallback);
SetMessageCallback(infoCallback);
mDeviceInfTimerID = startTimer(10000);
@@ -103,15 +102,6 @@ void DeviceManager::startScan(const char* json, bool empty) {
static QString msg = "Start scan...";
AppGlobalValues::setInProcessing(true);
TRIGGER_EVENT(GUIEvents::InvokeOperationStart, nullptr, (QObject*)&msg);
qDebug() << "SetScanInfo>>>>>>>>>>>>>>>>>>>>";
AppGlobalValues::setEmptyScanFlag(empty);
int ret = SetScanInfo(json, empty ? 1 : 0);
if (ret) {
qDebug() << ">>>>>>>>>>>>>>>>>>>>SetScanInfo failed";
THROW_ERROR("Transfer patient information fail!")
return;
}
qDebug() << ">>>>>>>>>>>>>>>>>>>>SetScanInfo success";
postScanCommand();
}
@@ -188,24 +178,6 @@ void DeviceManager::prepareFinishScan() {
// stop normal scan with prompt
TRIGGER_EVENT(InvokeOperationEnd, nullptr, (QObject *) &var);
AppGlobalValues::setInProcessing(false);
// get output data path
QString outputPath = GetDeviceInfo(DEV_OUTPATH);
outputPath = outputPath.replace("\\", "/");
// get scan ID from path
if (outputPath.endsWith('/')) outputPath = outputPath.remove(outputPath.length() - 1, 1);
QStringList list = outputPath.split('/');
if (list.length()) {
if (AppGlobalValues::EmptyScanFlag().toBool()) {
ScanJson::Current()->setEmptyScanID(list.last().toStdString().c_str());
} else {
ScanJson::Current()->setScanID(list.last().toStdString().c_str());
}
// save json
ScanJson::Current()->save();
} else {
THROW_ERROR("Scan Output Path error!")
}
}
void DeviceManager::stopScan() {
@@ -220,6 +192,8 @@ void DeviceManager::stopScan() {
QThread::msleep(100);
inf = GetStatus();
if (inf.status != SCANNING) {
mPreviewing = false;
AppGlobalValues::setInProcessing(false);
TRIGGER_EVENT(ResponseStop, nullptr, nullptr);
return;
}
@@ -269,6 +243,22 @@ void DeviceManager::close() {
delete mPreviewDataCaller;
}
const size_t Row = 140;
const size_t Col = 140;
#define BUFFER_SIZE Row * Col
unsigned char* buffer = nullptr;
void GetPreviewDataLocal(){
FILE* file;
if (file = fopen("img.bin", "rb")) {
buffer = (unsigned char*)malloc(sizeof(unsigned char) * BUFFER_SIZE);
fread(buffer, sizeof(unsigned char), BUFFER_SIZE, file);
fclose(file);
}
}
void DeviceManager::initPreviewThread() {
mPreviewDataCaller = QThread::create([=]() {
while (!mEndLoop) {
@@ -281,14 +271,15 @@ void DeviceManager::initPreviewThread() {
StatusInfo inf = GetStatus();
qDebug() << "GetPreviewData request status, status:" << getStatusString(inf.status);
// device is preview scanning, try get preview data
if (inf.status == SCANNING) {
if (1) {
qDebug() << "Preview data reader read start!";
const char *data = GetPreviewData();
if (!data) {
GetPreviewDataLocal();
if (!buffer) {
continue;
}
qDebug() << "Preview data reader read end!";
QByteArray bytes = QByteArray::fromRawData(data, PREVIEW_IMAGE_WH * PREVIEW_IMAGE_WH);
qDebug()<<(int)buffer[5104];
qDebug()<<(int)buffer[5105];
//double check
if (!mPreviewing) {
qDebug() << "Preview data reader long sleep!";
@@ -296,14 +287,14 @@ void DeviceManager::initPreviewThread() {
continue;
}
qDebug() << "Preview data response event start!";
TRIGGER_EVENT(ResponsePreviewData, nullptr, (QObject *) (&bytes));
TRIGGER_EVENT(ResponsePreviewData, nullptr, (QObject *) (buffer));
qDebug() << "Preview data response event end!";
} else {
mPreviewing = false;
AppGlobalValues::setInProcessing(false);
QThread::sleep(3);
}
QThread::msleep(100);
QThread::sleep(1);
}
});
mPreviewDataCaller->start();

View File

@@ -29,7 +29,6 @@
#include "appvals/AppGlobalValues.h"
#include "json/jsonobject.h"
#include "shimlib/ShimLib.h"
namespace
{

View File

@@ -1,5 +1,5 @@
#include "TabFormWidget.h"
#include "ui_tabformwidget.h"
#include "ui_TabFormWidget.h"
#include <QDateTime>
#if defined(_MSC_VER) && (_MSC_VER >= 1600)

View File

@@ -3,7 +3,7 @@
//
#include "ScanFormWidget.h"
#include "ui_tabformwidget.h"
#include "ui_TabFormWidget.h"
#include <QVBoxLayout>
#include <QToolButton>
@@ -203,14 +203,20 @@ void ScanFormWidget::renderLoading() {
}
void ScanFormWidget::renderPreviewData(const QObject *data) {
if (!data)return;
auto array = (QByteArray*)data;
auto raw_dataptr = (uchar*)array->data();
FILE* file;
uchar* raw_dataptr=nullptr;
if (file = fopen("img2_v2.bin", "rb")) {
raw_dataptr = (unsigned char*)malloc(sizeof(unsigned char) * 140*140);
fread(raw_dataptr, sizeof(unsigned char), 140*140, file);
fclose(file);
}
uchar c_data[PREVIEW_ROW][PREVIEW_COL];
for (auto data_ptr : c_data) {
memcpy(data_ptr, raw_dataptr, PREVIEW_COL);
raw_dataptr += PREVIEW_COL;
}
raw_dataptr-=PREVIEW_ROW*PREVIEW_COL;
free(raw_dataptr);
QImage img(c_data[0], PREVIEW_COL, PREVIEW_ROW, QImage::Format_Grayscale8);
mViewer->setFixedSize(800, 800);
QPixmap pic = QPixmap::fromImage(img).scaledToHeight(800, Qt::SmoothTransformation);

View File

@@ -1,7 +1,7 @@
//
// Created by Krad on 2021/10/8.
//
#include "ui_tabformwidget.h"
#include "ui_TabFormWidget.h"
#include "SelectFormWidget.h"
#include <QToolButton>

View File

@@ -1,4 +1,4 @@
#include "generalform.h"
#include "GeneralForm.h"
#include <QApplication>
#include <QPushButton>

View File

@@ -861,23 +861,23 @@
<customwidget>
<class>InputTextWidget</class>
<extends>QLineEdit</extends>
<header>Keyboard/InputTextWidget.h</header>
<header>keyboard/InputTextWidget.h</header>
</customwidget>
<customwidget>
<class>KeyButton</class>
<extends>QPushButton</extends>
<header>Keyboard/KeyButton.h</header>
<header>keyboard/KeyButton.h</header>
</customwidget>
<customwidget>
<class>HandWriteWidget</class>
<extends>QWidget</extends>
<header>Keyboard/HandWriteWidget.h</header>
<header>keyboard/HandWriteWidget.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>SwitchInputModeButton</class>
<extends>QPushButton</extends>
<header>Keyboard/SwitchInputModeButton.h</header>
<header>keyboard/SwitchInputModeButton.h</header>
</customwidget>
</customwidgets>
<resources/>

View File

@@ -18,7 +18,7 @@
#include "src/utilities/Locker.h"
#include "src/utilities/LanguageSwitcher.h"
#include "utilities/TouchScreenSignalSender.h"
#include "Keyboard/KeyboardManager.h"
#include "keyboard/KeyboardManager.h"
QString loadFontFromFile(QString path)
{

View File

@@ -555,7 +555,7 @@
<customwidget>
<class>ImageSwitch</class>
<extends>QWidget</extends>
<header location="global">components/imageswitch.h</header>
<header location="global">components/ImageSwitch.h</header>
<container>1</container>
</customwidget>
<customwidget>

View File

@@ -2,7 +2,7 @@
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
<name>AboutWidget</name>
<name>AboutForm</name>
<message>
<source>HJ-USCT-01 V1.0</source>
<translation type="unfinished"></translation>
@@ -12,15 +12,15 @@
<translation type="unfinished"></translation>
</message>
<message>
<source>Copyright © 2017-2020 Zhejiang Equilibrium Nine Medical Equipment Co., Ltd. All Rights Reversed</source>
<source>Copyright © 2017-2022 Zhejiang Equilibrium Nine Medical Equipment Co., Ltd. All Rights Reversed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>GUI Software V1.3</source>
<source>GUI Software V%1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Embedded Software V1.5</source>
<source>Embedded Software %1, Data store Path:%2</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -31,28 +31,28 @@
<source>FEB Information</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copyright © 2017-2022 Zhejiang Equilibrium Nine Medical Equipment Co., Ltd. All Rights Reversed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Qt 5.12.0</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>cJSON</source>
<source>Loading...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copyright (c) 1994-2021, OFFIS e.V.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>cJSON</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Copyright (c) 2009-2017 Dave Gamble</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading...</source>
<source>Copyright © 2017-2020 Zhejiang Equilibrium Nine Medical Equipment Co., Ltd. All Rights Reversed</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -178,25 +178,6 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AdminSettingForm</name>
<message>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Account</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>System</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>AlertDialog</name>
<message>
@@ -244,9 +225,67 @@
</message>
</context>
<context>
<name>PatientDetailForm</name>
<name>DateSelectDialog</name>
<message>
<source>Form</source>
<source>Date exceeded!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DicomCfgDialog</name>
<message>
<source>Dialog</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DICOM Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>IP</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>AE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Port</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Worklist</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>PACS</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>3D Recon</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditPatientDialog</name>
<message>
<source>Edit Patient</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -257,14 +296,6 @@
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Date Of Birth</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Comment</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Gender</source>
<translation type="unfinished"></translation>
@@ -278,19 +309,23 @@
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<source>Other</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Accept</source>
<source>Birth Date</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>...</source>
<source>Comment</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Hide Panel</source>
<source>F</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>M</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -312,7 +347,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<source>...</source>
<source>OK</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -393,14 +428,215 @@
</message>
</context>
<context>
<name>InputObject</name>
<name>GetWorkListAction</name>
<message>
<source>Search Query Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DB Unknow Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>WorkList Search Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Same Patient Existed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DB Error,Patient Write Failed</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>GetWorkListDialog</name>
<message>
<source>Accession Nummber</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Patient ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Accession Number and Patient Id is Empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unknow Error. code:001001001</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InputModeMenu</name>
<message>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LoginWindow</name>
<name>Keyboard</name>
<message>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>q</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>w</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>e</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>r</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>t</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>y</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>u</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>i</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>o</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>p</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Back</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>a</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>s</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>d</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>f</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>g</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>h</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>j</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>k</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>l</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enter</source>
<translation type="unfinished"></translation>
</message>
<message>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<source>z</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>x</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>c</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>v</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>b</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>n</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>m</source>
<translation type="unfinished"></translation>
</message>
<message>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<source>?123</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>En</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Space</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<source> </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Clear</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LoginDialog</name>
<message>
<source>U S C T</source>
<translation type="unfinished"></translation>
@@ -433,11 +669,153 @@
<translation type="unfinished"></translation>
</message>
<message>
<source>Verify</source>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NetworkCfgDialog</name>
<message>
<source>Network Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Settings</source>
<source>IP Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DHCP</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dev</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Subnet Mask</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Additional Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default IPv4 Gateway</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Routing Table</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Routing</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Port</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>AE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>IP</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DICOM</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Netmask</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Gateway</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PatientDetailForm</name>
<message>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Date Of Birth</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Comment</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Gender</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Female</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Male</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> Hide Panel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Other</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -540,6 +918,10 @@ parameters
<source>RIGHT</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No refresh data exists, please do Refresh operation first.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SelectFormWidget</name>
@@ -587,6 +969,96 @@ parameters
<source>Comment</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Can&apos;t delete selected Patient !</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Alert</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Delete Patient &quot;%1&quot; ?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Confirm</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Can&apos;t delete selected Patient , db submit error!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingFormWidget</name>
<message>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Account</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>System</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>About</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SystemSettingForm</name>
<message>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Protocal</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto Verify</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>IP</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Worklist Filter</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DICOM</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disk Storage</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>used: %1G</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Get disk used size fail!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>total: %1G</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Get disk total size fail!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>TabFormWidget</name>
@@ -613,205 +1085,4 @@ parameters
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>dicomCfgDialog</name>
<message>
<source>Dialog</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>IP</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Port</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>AE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Worklist</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>PACS</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>3D Recon</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DICOM Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>...</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>networkCfgDialog</name>
<message>
<source>Network Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>IP Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dev</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Subnet Mask</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Additional Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default IPv4 Gateway</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Routing Table</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Routing</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Result</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Netmask</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Destination</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Gateway</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Apply</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DHCP</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Port</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>AE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>IP</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DICOM</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>systemSettingForm</name>
<message>
<source>Form</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Protocal</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Worklist Filter</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto Verify</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>IP</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>DICOM</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Disk Storage</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>total: %1G</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Get disk total size fail!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>used: %1G</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Get disk used size fail!</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -253,22 +253,22 @@
</message>
</context>
<context>
<name>AdminSettingForm</name>
<name>SettingFormWidget</name>
<message>
<location filename="../AdminSettingForm.cpp" line="32"/>
<location filename="../AdminSettingForm.cpp" line="82"/>
<location filename="../SettingFormWidget.cpp" line="32"/>
<location filename="../SettingFormWidget.cpp" line="82"/>
<source>General</source>
<translation></translation>
</message>
<message>
<location filename="../AdminSettingForm.cpp" line="32"/>
<location filename="../AdminSettingForm.cpp" line="82"/>
<location filename="../SettingFormWidget.cpp" line="32"/>
<location filename="../SettingFormWidget.cpp" line="82"/>
<source>Account</source>
<translation></translation>
<translation></translation>
</message>
<message>
<location filename="../AdminSettingForm.cpp" line="32"/>
<location filename="../AdminSettingForm.cpp" line="82"/>
<location filename="../SettingFormWidget.cpp" line="32"/>
<location filename="../SettingFormWidget.cpp" line="82"/>
<source>System</source>
<translation></translation>
</message>
@@ -297,8 +297,8 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../AdminSettingForm.cpp" line="32"/>
<location filename="../AdminSettingForm.cpp" line="82"/>
<location filename="../SettingFormWidget.cpp" line="32"/>
<location filename="../SettingFormWidget.cpp" line="82"/>
<source>About</source>
<translation></translation>
</message>
@@ -426,6 +426,59 @@
<translation></translation>
</message>
</context>
<context>
<name>EditPatientDialog</name>
<message>
<location filename="../dialogs/EditPatientDialog.cpp" line="35"/>
<source>Edit Patient</source>
<translation></translation>
</message>
<message>
<location filename="../dialogs/EditPatientDialog.cpp" line="41"/>
<source>ID</source>
<translation></translation>
</message>
<message>
<location filename="../dialogs/EditPatientDialog.cpp" line="50"/>
<source>Name</source>
<translation></translation>
</message>
<message>
<location filename="../dialogs/EditPatientDialog.cpp" line="87"/>
<source>Birth Date</source>
<translation></translation>
</message>
<message>
<location filename="../dialogs/EditPatientDialog.cpp" line="106"/>
<source>Comment</source>
<translation></translation>
</message>
<message>
<location filename="../dialogs/EditPatientDialog.cpp" line="59"/>
<source>Gender</source>
<translation></translation>
</message>
<message>
<location filename="../dialogs/EditPatientDialog.cpp" line="62"/>
<source>Female</source>
<translation></translation>
</message>
<message>
<location filename="../dialogs/EditPatientDialog.cpp" line="69"/>
<source>Male</source>
<translation></translation>
</message>
<message>
<location filename="../dialogs/EditPatientDialog.cpp" line="69"/>
<source>Cancel</source>
<translation></translation>
</message>
<message>
<source>Accept</source>
<translation></translation>
</message>
</context>
<context>
<name>GUIFormBaseDialog</name>
<message>
@@ -561,29 +614,29 @@
</message>
</context>
<context>
<name>LoginWindow</name>
<name>LoginDialog</name>
<message>
<location filename="../loginwindow.cpp" line="54"/>
<location filename="../LoginDialog.cpp" line="54"/>
<source>U S C T</source>
<translation></translation>
</message>
<message>
<location filename="../loginwindow.cpp" line="71"/>
<location filename="../LoginDialog.cpp" line="71"/>
<source>Username</source>
<translation></translation>
</message>
<message>
<location filename="../loginwindow.cpp" line="78"/>
<location filename="../LoginDialog.cpp" line="78"/>
<source>Password</source>
<translation></translation>
</message>
<message>
<location filename="../loginwindow.cpp" line="82"/>
<location filename="../LoginDialog.cpp" line="91"/>
<source>Login</source>
<translation></translation>
</message>
<message>
<source>login</source>
<source>Login</source>
<translation type="vanished"></translation>
</message>
</context>

View File

@@ -107,16 +107,17 @@ void MainWindow::initializeTabWidget()
mTabWidget->addTab(selectForm, tr("Select"));
auto scanForm = new ScanFormWidget(this);
mTabWidget->addTab(scanForm, tr("Scan"));
auto verifyForm = new TabFormWidget(this);
mTabWidget->addTab(verifyForm, tr("Verify"));
// auto verifyForm = new TabFormWidget(this);
// mTabWidget->addTab(verifyForm, tr("Verify"));
mTabWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
}
void MainWindow::reloadLanguage() {
mTabWidget->setTabText(0, tr("Select"));
mTabWidget->setTabText(1, tr("Scan"));
mTabWidget->setTabText(2, tr("Verify"));
mTabWidget->setTabText(3, tr("Settings"));
// mTabWidget->setTabText(2, tr("Verify"));
mTabWidget->setTabText(2, tr("Settings"));
}
void MainWindow::switchToScanTab() { mTabWidget->setCurrentIndex(1); }