diff --git a/CableTestBench.pro b/CableTestBench.pro index 394d160..42d775e 100644 --- a/CableTestBench.pro +++ b/CableTestBench.pro @@ -23,7 +23,9 @@ SOURCES += \ Sources/VisualInspectionPage.cpp \ Sources/Widgets/ConnectorSelectWidget.cpp \ Sources/CableTestPage.cpp \ - Sources/Widgets/ConnectorClickZoneWidget.cpp + Sources/Widgets/ConnectorClickZoneWidget.cpp \ + Sources/Widgets/ONOFFStatusWidget.cpp \ + Sources/Widgets/ConnectorTestVisualizationWidget.cpp HEADERS += \ Sources/MainWindow.h \ @@ -34,7 +36,9 @@ HEADERS += \ Sources/Widgets/ConnectorSelectWidget.h \ Sources/CableTestPage.h \ Sources/Widgets/ConnectorClickZoneWidget.h \ - Sources/CableTestBenchDefs.h + Sources/CableTestBenchDefs.h \ + Sources/Widgets/ONOFFStatusWidget.h \ + Sources/Widgets/ConnectorTestVisualizationWidget.h FORMS += \ Sources/CMainPage.ui \ diff --git a/CableTestBench.pro.user b/CableTestBench.pro.user index 69b7920..ba9ee97 100644 --- a/CableTestBench.pro.user +++ b/CableTestBench.pro.user @@ -1,6 +1,6 @@ - + ProjectExplorer.Project.ActiveTarget diff --git a/Makefile b/Makefile index 23afd6b..c24aaab 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: CableTestBench -# Generated by qmake (2.01a) (Qt 4.8.1) on: Tue Apr 16 11:09:51 2019 +# Generated by qmake (2.01a) (Qt 4.8.1) on: Wed May 1 16:11:22 2019 # Project: CableTestBench.pro # Template: app # Command: c:\Qt\4.8.1\bin\qmake.exe -spec ..\..\Qt\4.8.1\mkspecs\win32-g++ CONFIG+=declarative_debug -o Makefile CableTestBench.pro diff --git a/Makefile.Debug b/Makefile.Debug index 107dfd9..4cbfaa1 100644 --- a/Makefile.Debug +++ b/Makefile.Debug @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: CableTestBench -# Generated by qmake (2.01a) (Qt 4.8.1) on: Tue Apr 16 11:09:51 2019 +# Generated by qmake (2.01a) (Qt 4.8.1) on: Wed May 1 16:11:22 2019 # Project: CableTestBench.pro # Template: app ############################################################################# @@ -48,13 +48,17 @@ SOURCES = Sources\MainWindow.cpp \ Sources\VisualInspectionPage.cpp \ Sources\Widgets\ConnectorSelectWidget.cpp \ Sources\CableTestPage.cpp \ - Sources\Widgets\ConnectorClickZoneWidget.cpp debug\moc_MainWindow.cpp \ + Sources\Widgets\ConnectorClickZoneWidget.cpp \ + Sources\Widgets\ONOFFStatusWidget.cpp \ + Sources\Widgets\ConnectorTestVisualizationWidget.cpp debug\moc_MainWindow.cpp \ debug\moc_MainPage.cpp \ debug\moc_CableTestBench.cpp \ debug\moc_VisualInspectionPage.cpp \ debug\moc_ConnectorSelectWidget.cpp \ debug\moc_CableTestPage.cpp \ - debug\moc_ConnectorClickZoneWidget.cpp + debug\moc_ConnectorClickZoneWidget.cpp \ + debug\moc_ONOFFStatusWidget.cpp \ + debug\moc_ConnectorTestVisualizationWidget.cpp OBJECTS = debug/MainWindow.o \ debug/main.o \ debug/MainPage.o \ @@ -63,13 +67,17 @@ OBJECTS = debug/MainWindow.o \ debug/ConnectorSelectWidget.o \ debug/CableTestPage.o \ debug/ConnectorClickZoneWidget.o \ + debug/ONOFFStatusWidget.o \ + debug/ConnectorTestVisualizationWidget.o \ debug/moc_MainWindow.o \ debug/moc_MainPage.o \ debug/moc_CableTestBench.o \ debug/moc_VisualInspectionPage.o \ debug/moc_ConnectorSelectWidget.o \ debug/moc_CableTestPage.o \ - debug/moc_ConnectorClickZoneWidget.o + debug/moc_ConnectorClickZoneWidget.o \ + debug/moc_ONOFFStatusWidget.o \ + debug/moc_ConnectorTestVisualizationWidget.o DIST = QMAKE_TARGET = CableTestBench DESTDIR = debug\ #avoid trailing-slash linebreak @@ -107,7 +115,7 @@ dist: $(ZIP) CableTestBench.zip $(SOURCES) $(DIST) CableTestBench.pro ..\..\Qt\4.8.1\mkspecs\qconfig.pri ..\..\Qt\4.8.1\mkspecs\modules\qt_webkit_version.pri ..\..\Qt\4.8.1\mkspecs\features\qt_functions.prf ..\..\Qt\4.8.1\mkspecs\features\qt_config.prf ..\..\Qt\4.8.1\mkspecs\features\exclusive_builds.prf ..\..\Qt\4.8.1\mkspecs\features\default_pre.prf ..\..\Qt\4.8.1\mkspecs\features\win32\default_pre.prf ..\..\Qt\4.8.1\mkspecs\features\debug.prf ..\..\Qt\4.8.1\mkspecs\features\debug_and_release.prf ..\..\Qt\4.8.1\mkspecs\features\default_post.prf ..\..\Qt\4.8.1\mkspecs\features\win32\default_post.prf ..\..\Qt\4.8.1\mkspecs\features\build_pass.prf ..\..\Qt\4.8.1\mkspecs\features\declarative_debug.prf ..\..\Qt\4.8.1\mkspecs\features\win32\rtti.prf ..\..\Qt\4.8.1\mkspecs\features\win32\exceptions.prf ..\..\Qt\4.8.1\mkspecs\features\win32\stl.prf ..\..\Qt\4.8.1\mkspecs\features\shared.prf ..\..\Qt\4.8.1\mkspecs\features\warn_on.prf ..\..\Qt\4.8.1\mkspecs\features\qt.prf ..\..\Qt\4.8.1\mkspecs\features\win32\thread.prf ..\..\Qt\4.8.1\mkspecs\features\moc.prf ..\..\Qt\4.8.1\mkspecs\features\win32\windows.prf ..\..\Qt\4.8.1\mkspecs\features\resources.prf ..\..\Qt\4.8.1\mkspecs\features\uic.prf ..\..\Qt\4.8.1\mkspecs\features\yacc.prf ..\..\Qt\4.8.1\mkspecs\features\lex.prf ..\..\Qt\4.8.1\mkspecs\features\include_source_dir.prf c:\Qt\4.8.1\lib\qtmaind.prl HEADERS RESOURCES IMAGES SOURCES OBJECTIVE_SOURCES FORMS YACCSOURCES YACCSOURCES LEXSOURCES clean: compiler_clean - -$(DEL_FILE) debug\MainWindow.o debug\main.o debug\MainPage.o debug\CableTestBench.o debug\VisualInspectionPage.o debug\ConnectorSelectWidget.o debug\CableTestPage.o debug\ConnectorClickZoneWidget.o debug\moc_MainWindow.o debug\moc_MainPage.o debug\moc_CableTestBench.o debug\moc_VisualInspectionPage.o debug\moc_ConnectorSelectWidget.o debug\moc_CableTestPage.o debug\moc_ConnectorClickZoneWidget.o + -$(DEL_FILE) debug\MainWindow.o debug\main.o debug\MainPage.o debug\CableTestBench.o debug\VisualInspectionPage.o debug\ConnectorSelectWidget.o debug\CableTestPage.o debug\ConnectorClickZoneWidget.o debug\ONOFFStatusWidget.o debug\ConnectorTestVisualizationWidget.o debug\moc_MainWindow.o debug\moc_MainPage.o debug\moc_CableTestBench.o debug\moc_VisualInspectionPage.o debug\moc_ConnectorSelectWidget.o debug\moc_CableTestPage.o debug\moc_ConnectorClickZoneWidget.o debug\moc_ONOFFStatusWidget.o debug\moc_ConnectorTestVisualizationWidget.o distclean: clean -$(DEL_FILE) $(DESTDIR_TARGET) @@ -119,9 +127,9 @@ mocclean: compiler_moc_header_clean compiler_moc_source_clean mocables: compiler_moc_header_make_all compiler_moc_source_make_all -compiler_moc_header_make_all: debug/moc_MainWindow.cpp debug/moc_MainPage.cpp debug/moc_CableTestBench.cpp debug/moc_VisualInspectionPage.cpp debug/moc_ConnectorSelectWidget.cpp debug/moc_CableTestPage.cpp debug/moc_ConnectorClickZoneWidget.cpp +compiler_moc_header_make_all: debug/moc_MainWindow.cpp debug/moc_MainPage.cpp debug/moc_CableTestBench.cpp debug/moc_VisualInspectionPage.cpp debug/moc_ConnectorSelectWidget.cpp debug/moc_CableTestPage.cpp debug/moc_ConnectorClickZoneWidget.cpp debug/moc_ONOFFStatusWidget.cpp debug/moc_ConnectorTestVisualizationWidget.cpp compiler_moc_header_clean: - -$(DEL_FILE) debug\moc_MainWindow.cpp debug\moc_MainPage.cpp debug\moc_CableTestBench.cpp debug\moc_VisualInspectionPage.cpp debug\moc_ConnectorSelectWidget.cpp debug\moc_CableTestPage.cpp debug\moc_ConnectorClickZoneWidget.cpp + -$(DEL_FILE) debug\moc_MainWindow.cpp debug\moc_MainPage.cpp debug\moc_CableTestBench.cpp debug\moc_VisualInspectionPage.cpp debug\moc_ConnectorSelectWidget.cpp debug\moc_CableTestPage.cpp debug\moc_ConnectorClickZoneWidget.cpp debug\moc_ONOFFStatusWidget.cpp debug\moc_ConnectorTestVisualizationWidget.cpp debug/moc_MainWindow.cpp: Sources/MainPage.h \ Sources/VisualInspectionPage.h \ Sources/CableTestPage.h \ @@ -151,6 +159,13 @@ debug/moc_CableTestPage.cpp: Sources/CableTestPage.h debug/moc_ConnectorClickZoneWidget.cpp: Sources/Widgets/ConnectorClickZoneWidget.h C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 Sources\Widgets\ConnectorClickZoneWidget.h -o debug\moc_ConnectorClickZoneWidget.cpp +debug/moc_ONOFFStatusWidget.cpp: Sources/Widgets/ONOFFStatusWidget.h + C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 Sources\Widgets\ONOFFStatusWidget.h -o debug\moc_ONOFFStatusWidget.cpp + +debug/moc_ConnectorTestVisualizationWidget.cpp: Sources/Widgets/ONOFFStatusWidget.h \ + Sources/Widgets/ConnectorTestVisualizationWidget.h + C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 Sources\Widgets\ConnectorTestVisualizationWidget.h -o debug\moc_ConnectorTestVisualizationWidget.cpp + compiler_rcc_make_all: compiler_rcc_clean: compiler_image_collection_make_all: qmake_image_collection.cpp @@ -226,6 +241,13 @@ debug/CableTestPage.o: Sources/CableTestPage.cpp Sources/CableTestPage.h \ debug/ConnectorClickZoneWidget.o: Sources/Widgets/ConnectorClickZoneWidget.cpp Sources/Widgets/ConnectorClickZoneWidget.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\ConnectorClickZoneWidget.o Sources\Widgets\ConnectorClickZoneWidget.cpp +debug/ONOFFStatusWidget.o: Sources/Widgets/ONOFFStatusWidget.cpp Sources/Widgets/ONOFFStatusWidget.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\ONOFFStatusWidget.o Sources\Widgets\ONOFFStatusWidget.cpp + +debug/ConnectorTestVisualizationWidget.o: Sources/Widgets/ConnectorTestVisualizationWidget.cpp Sources/Widgets/ConnectorTestVisualizationWidget.h \ + Sources/Widgets/ONOFFStatusWidget.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\ConnectorTestVisualizationWidget.o Sources\Widgets\ConnectorTestVisualizationWidget.cpp + debug/moc_MainWindow.o: debug/moc_MainWindow.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_MainWindow.o debug\moc_MainWindow.cpp @@ -247,6 +269,12 @@ debug/moc_CableTestPage.o: debug/moc_CableTestPage.cpp debug/moc_ConnectorClickZoneWidget.o: debug/moc_ConnectorClickZoneWidget.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_ConnectorClickZoneWidget.o debug\moc_ConnectorClickZoneWidget.cpp +debug/moc_ONOFFStatusWidget.o: debug/moc_ONOFFStatusWidget.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_ONOFFStatusWidget.o debug\moc_ONOFFStatusWidget.cpp + +debug/moc_ConnectorTestVisualizationWidget.o: debug/moc_ConnectorTestVisualizationWidget.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_ConnectorTestVisualizationWidget.o debug\moc_ConnectorTestVisualizationWidget.cpp + ####### Install install: FORCE diff --git a/Makefile.Release b/Makefile.Release index 500d468..ec4b999 100644 --- a/Makefile.Release +++ b/Makefile.Release @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: CableTestBench -# Generated by qmake (2.01a) (Qt 4.8.1) on: Tue Apr 16 11:09:51 2019 +# Generated by qmake (2.01a) (Qt 4.8.1) on: Wed May 1 16:11:22 2019 # Project: CableTestBench.pro # Template: app ############################################################################# @@ -48,13 +48,17 @@ SOURCES = Sources\MainWindow.cpp \ Sources\VisualInspectionPage.cpp \ Sources\Widgets\ConnectorSelectWidget.cpp \ Sources\CableTestPage.cpp \ - Sources\Widgets\ConnectorClickZoneWidget.cpp release\moc_MainWindow.cpp \ + Sources\Widgets\ConnectorClickZoneWidget.cpp \ + Sources\Widgets\ONOFFStatusWidget.cpp \ + Sources\Widgets\ConnectorTestVisualizationWidget.cpp release\moc_MainWindow.cpp \ release\moc_MainPage.cpp \ release\moc_CableTestBench.cpp \ release\moc_VisualInspectionPage.cpp \ release\moc_ConnectorSelectWidget.cpp \ release\moc_CableTestPage.cpp \ - release\moc_ConnectorClickZoneWidget.cpp + release\moc_ConnectorClickZoneWidget.cpp \ + release\moc_ONOFFStatusWidget.cpp \ + release\moc_ConnectorTestVisualizationWidget.cpp OBJECTS = release/MainWindow.o \ release/main.o \ release/MainPage.o \ @@ -63,13 +67,17 @@ OBJECTS = release/MainWindow.o \ release/ConnectorSelectWidget.o \ release/CableTestPage.o \ release/ConnectorClickZoneWidget.o \ + release/ONOFFStatusWidget.o \ + release/ConnectorTestVisualizationWidget.o \ release/moc_MainWindow.o \ release/moc_MainPage.o \ release/moc_CableTestBench.o \ release/moc_VisualInspectionPage.o \ release/moc_ConnectorSelectWidget.o \ release/moc_CableTestPage.o \ - release/moc_ConnectorClickZoneWidget.o + release/moc_ConnectorClickZoneWidget.o \ + release/moc_ONOFFStatusWidget.o \ + release/moc_ConnectorTestVisualizationWidget.o DIST = QMAKE_TARGET = CableTestBench DESTDIR = release\ #avoid trailing-slash linebreak @@ -107,7 +115,7 @@ dist: $(ZIP) CableTestBench.zip $(SOURCES) $(DIST) CableTestBench.pro ..\..\Qt\4.8.1\mkspecs\qconfig.pri ..\..\Qt\4.8.1\mkspecs\modules\qt_webkit_version.pri ..\..\Qt\4.8.1\mkspecs\features\qt_functions.prf ..\..\Qt\4.8.1\mkspecs\features\qt_config.prf ..\..\Qt\4.8.1\mkspecs\features\exclusive_builds.prf ..\..\Qt\4.8.1\mkspecs\features\default_pre.prf ..\..\Qt\4.8.1\mkspecs\features\win32\default_pre.prf ..\..\Qt\4.8.1\mkspecs\features\release.prf ..\..\Qt\4.8.1\mkspecs\features\debug_and_release.prf ..\..\Qt\4.8.1\mkspecs\features\default_post.prf ..\..\Qt\4.8.1\mkspecs\features\win32\default_post.prf ..\..\Qt\4.8.1\mkspecs\features\build_pass.prf ..\..\Qt\4.8.1\mkspecs\features\declarative_debug.prf ..\..\Qt\4.8.1\mkspecs\features\win32\rtti.prf ..\..\Qt\4.8.1\mkspecs\features\win32\exceptions.prf ..\..\Qt\4.8.1\mkspecs\features\win32\stl.prf ..\..\Qt\4.8.1\mkspecs\features\shared.prf ..\..\Qt\4.8.1\mkspecs\features\warn_on.prf ..\..\Qt\4.8.1\mkspecs\features\qt.prf ..\..\Qt\4.8.1\mkspecs\features\win32\thread.prf ..\..\Qt\4.8.1\mkspecs\features\moc.prf ..\..\Qt\4.8.1\mkspecs\features\win32\windows.prf ..\..\Qt\4.8.1\mkspecs\features\resources.prf ..\..\Qt\4.8.1\mkspecs\features\uic.prf ..\..\Qt\4.8.1\mkspecs\features\yacc.prf ..\..\Qt\4.8.1\mkspecs\features\lex.prf ..\..\Qt\4.8.1\mkspecs\features\include_source_dir.prf c:\Qt\4.8.1\lib\qtmain.prl HEADERS RESOURCES IMAGES SOURCES OBJECTIVE_SOURCES FORMS YACCSOURCES YACCSOURCES LEXSOURCES clean: compiler_clean - -$(DEL_FILE) release\MainWindow.o release\main.o release\MainPage.o release\CableTestBench.o release\VisualInspectionPage.o release\ConnectorSelectWidget.o release\CableTestPage.o release\ConnectorClickZoneWidget.o release\moc_MainWindow.o release\moc_MainPage.o release\moc_CableTestBench.o release\moc_VisualInspectionPage.o release\moc_ConnectorSelectWidget.o release\moc_CableTestPage.o release\moc_ConnectorClickZoneWidget.o + -$(DEL_FILE) release\MainWindow.o release\main.o release\MainPage.o release\CableTestBench.o release\VisualInspectionPage.o release\ConnectorSelectWidget.o release\CableTestPage.o release\ConnectorClickZoneWidget.o release\ONOFFStatusWidget.o release\ConnectorTestVisualizationWidget.o release\moc_MainWindow.o release\moc_MainPage.o release\moc_CableTestBench.o release\moc_VisualInspectionPage.o release\moc_ConnectorSelectWidget.o release\moc_CableTestPage.o release\moc_ConnectorClickZoneWidget.o release\moc_ONOFFStatusWidget.o release\moc_ConnectorTestVisualizationWidget.o distclean: clean -$(DEL_FILE) $(DESTDIR_TARGET) @@ -119,9 +127,9 @@ mocclean: compiler_moc_header_clean compiler_moc_source_clean mocables: compiler_moc_header_make_all compiler_moc_source_make_all -compiler_moc_header_make_all: release/moc_MainWindow.cpp release/moc_MainPage.cpp release/moc_CableTestBench.cpp release/moc_VisualInspectionPage.cpp release/moc_ConnectorSelectWidget.cpp release/moc_CableTestPage.cpp release/moc_ConnectorClickZoneWidget.cpp +compiler_moc_header_make_all: release/moc_MainWindow.cpp release/moc_MainPage.cpp release/moc_CableTestBench.cpp release/moc_VisualInspectionPage.cpp release/moc_ConnectorSelectWidget.cpp release/moc_CableTestPage.cpp release/moc_ConnectorClickZoneWidget.cpp release/moc_ONOFFStatusWidget.cpp release/moc_ConnectorTestVisualizationWidget.cpp compiler_moc_header_clean: - -$(DEL_FILE) release\moc_MainWindow.cpp release\moc_MainPage.cpp release\moc_CableTestBench.cpp release\moc_VisualInspectionPage.cpp release\moc_ConnectorSelectWidget.cpp release\moc_CableTestPage.cpp release\moc_ConnectorClickZoneWidget.cpp + -$(DEL_FILE) release\moc_MainWindow.cpp release\moc_MainPage.cpp release\moc_CableTestBench.cpp release\moc_VisualInspectionPage.cpp release\moc_ConnectorSelectWidget.cpp release\moc_CableTestPage.cpp release\moc_ConnectorClickZoneWidget.cpp release\moc_ONOFFStatusWidget.cpp release\moc_ConnectorTestVisualizationWidget.cpp release/moc_MainWindow.cpp: Sources/MainPage.h \ Sources/VisualInspectionPage.h \ Sources/CableTestPage.h \ @@ -151,6 +159,13 @@ release/moc_CableTestPage.cpp: Sources/CableTestPage.h release/moc_ConnectorClickZoneWidget.cpp: Sources/Widgets/ConnectorClickZoneWidget.h C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 Sources\Widgets\ConnectorClickZoneWidget.h -o release\moc_ConnectorClickZoneWidget.cpp +release/moc_ONOFFStatusWidget.cpp: Sources/Widgets/ONOFFStatusWidget.h + C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 Sources\Widgets\ONOFFStatusWidget.h -o release\moc_ONOFFStatusWidget.cpp + +release/moc_ConnectorTestVisualizationWidget.cpp: Sources/Widgets/ONOFFStatusWidget.h \ + Sources/Widgets/ConnectorTestVisualizationWidget.h + C:\Qt\4.8.1\bin\moc.exe $(DEFINES) $(INCPATH) -D__GNUC__ -DWIN32 Sources\Widgets\ConnectorTestVisualizationWidget.h -o release\moc_ConnectorTestVisualizationWidget.cpp + compiler_rcc_make_all: compiler_rcc_clean: compiler_image_collection_make_all: qmake_image_collection.cpp @@ -226,6 +241,13 @@ release/CableTestPage.o: Sources/CableTestPage.cpp Sources/CableTestPage.h \ release/ConnectorClickZoneWidget.o: Sources/Widgets/ConnectorClickZoneWidget.cpp Sources/Widgets/ConnectorClickZoneWidget.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\ConnectorClickZoneWidget.o Sources\Widgets\ConnectorClickZoneWidget.cpp +release/ONOFFStatusWidget.o: Sources/Widgets/ONOFFStatusWidget.cpp Sources/Widgets/ONOFFStatusWidget.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\ONOFFStatusWidget.o Sources\Widgets\ONOFFStatusWidget.cpp + +release/ConnectorTestVisualizationWidget.o: Sources/Widgets/ConnectorTestVisualizationWidget.cpp Sources/Widgets/ConnectorTestVisualizationWidget.h \ + Sources/Widgets/ONOFFStatusWidget.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\ConnectorTestVisualizationWidget.o Sources\Widgets\ConnectorTestVisualizationWidget.cpp + release/moc_MainWindow.o: release/moc_MainWindow.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_MainWindow.o release\moc_MainWindow.cpp @@ -247,6 +269,12 @@ release/moc_CableTestPage.o: release/moc_CableTestPage.cpp release/moc_ConnectorClickZoneWidget.o: release/moc_ConnectorClickZoneWidget.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_ConnectorClickZoneWidget.o release\moc_ConnectorClickZoneWidget.cpp +release/moc_ONOFFStatusWidget.o: release/moc_ONOFFStatusWidget.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_ONOFFStatusWidget.o release\moc_ONOFFStatusWidget.cpp + +release/moc_ConnectorTestVisualizationWidget.o: release/moc_ConnectorTestVisualizationWidget.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_ConnectorTestVisualizationWidget.o release\moc_ConnectorTestVisualizationWidget.cpp + ####### Install install: FORCE diff --git a/Sources/CableTestBench.cpp b/Sources/CableTestBench.cpp index 9e66d06..8049893 100644 --- a/Sources/CableTestBench.cpp +++ b/Sources/CableTestBench.cpp @@ -20,6 +20,7 @@ int CCableTestBench::Start() mMainPageHandle = w->mMainPage; mVisualInspPageHandle = w->mVisualInspPage; + mCableTestPageHandle = w->mCableTestPage; return 1; } @@ -52,3 +53,10 @@ quint16 CCableTestBench::DecToBCDWord(const quint16 word) return out; } + +int CCableTestBench::ExecVisualInspectionRequest() +{ + qDebug("Exec Visual Inspection clicked"); + + mCableTestPageHandle->SetVisualInspectionDone(true); +} diff --git a/Sources/CableTestBench.h b/Sources/CableTestBench.h index 09c703f..02f94bf 100644 --- a/Sources/CableTestBench.h +++ b/Sources/CableTestBench.h @@ -7,6 +7,7 @@ class CMainPage; class CVisualInspectionPage; +class CCableTestPage; class CCableTestBench : public QObject { @@ -20,6 +21,9 @@ public: MainWindow *w; CMainPage *mMainPageHandle; CVisualInspectionPage *mVisualInspPageHandle; + CCableTestPage *mCableTestPageHandle; + + int ExecVisualInspectionRequest(); private: diff --git a/Sources/CableTestBenchDefs.h b/Sources/CableTestBenchDefs.h index cac92cb..b524542 100644 --- a/Sources/CableTestBenchDefs.h +++ b/Sources/CableTestBenchDefs.h @@ -4,6 +4,8 @@ class CConnectorDefs { +#define MAX_CONNECTOR_PIN_COUNT 108 + public: enum eConnectorType { @@ -23,6 +25,7 @@ public: }; + }; diff --git a/Sources/CableTestPage.cpp b/Sources/CableTestPage.cpp index 19b473c..60349f6 100644 --- a/Sources/CableTestPage.cpp +++ b/Sources/CableTestPage.cpp @@ -1,17 +1,48 @@ #include "CableTestPage.h" #include "ui_CableTestPage.h" #include "CableTestBench.h" +#include CCableTestPage::CCableTestPage(QWidget *parent) : QWidget(parent), ui(new Ui::CCableTestPage) { + + QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); + ui->setupUi(this); mProgramHandle = 0; + mInspectionNotDonePixmap = QPixmap("./images/todo.png").scaled(ui->mInspectionDoneIcon->geometry().width(),ui->mInspectionDoneIcon->geometry().height()); + mInspectionDonePixmap = QPixmap("./images/done1.png").scaled(ui->mInspectionDoneIcon->geometry().width(),ui->mInspectionDoneIcon->geometry().height()); + ui->mInspectionDoneIcon->setPixmap(mInspectionNotDonePixmap); + + connect(ui->mExecInspVisuelleBtn,SIGNAL(clicked()),this,SLOT(InspVisuelleBtnClicked())); + ui->mConnectorTestVisualisationWidget->SetConnectorPinCount(108); } CCableTestPage::~CCableTestPage() { delete ui; } + +void CCableTestPage::InspVisuelleBtnClicked() +{ + mProgramHandle->ExecVisualInspectionRequest(); + +} + +int CCableTestPage::SetVisualInspectionDone(bool Done) +{ + if(Done) + { + ui->mInspectionDoneIcon->setPixmap(mInspectionDonePixmap); + ui->mExecInspVisuelleBtn->setText(QString("Réviser Inspection").toUtf8()); + } + else + { + ui->mInspectionDoneIcon->setPixmap(mInspectionDonePixmap); + ui->mExecInspVisuelleBtn->setText("Effectuer Inspection"); + } + return RET_OK; +} diff --git a/Sources/CableTestPage.h b/Sources/CableTestPage.h index 37bc751..1f907b4 100644 --- a/Sources/CableTestPage.h +++ b/Sources/CableTestPage.h @@ -18,9 +18,16 @@ public: ~CCableTestPage(); CCableTestBench *mProgramHandle; + + int SetVisualInspectionDone(bool Done = true); private: Ui::CCableTestPage *ui; + + QPixmap mInspectionDonePixmap, mInspectionNotDonePixmap; + +public slots: + void InspVisuelleBtnClicked(); }; #endif // CABLETESTPAGE_H diff --git a/Sources/CableTestPage.ui b/Sources/CableTestPage.ui index a2dc786..818b7a8 100644 --- a/Sources/CableTestPage.ui +++ b/Sources/CableTestPage.ui @@ -186,8 +186,8 @@ - 70 - 230 + 60 + 200 271 20 @@ -204,9 +204,9 @@ - 60 - 250 - 391 + 50 + 220 + 291 121 @@ -219,7 +219,7 @@ 3 - + 10 @@ -229,16 +229,58 @@ - Exécuter Inspection + Effectuer Inspection + + + + 160 + 20 + 101 + 91 + + + + TextLabel + + + + + + + 60 + 410 + 741 + 231 + + + + + + + 57 + 380 + 751 + 20 + + + + Qt::Horizontal + CConnectorSelectWidget QWidget -
connectorselectwidget.h
+
connectorselectwidget.h
+ 1 +
+ + CConnectorTestVisualizationWidget + QWidget +
connectortestvisualizationwidget.h
1
diff --git a/Sources/MainPage.cpp b/Sources/MainPage.cpp index b0d300f..534d41c 100644 --- a/Sources/MainPage.cpp +++ b/Sources/MainPage.cpp @@ -14,7 +14,7 @@ CMainPage::CMainPage(QWidget *parent) : // ui->mConnectorsImgLbl->setPixmap(QPixmap("./images/connecteurs.png").scaled(ui->mConnectorsImgLbl->size())); - mConnectorSelWidget = new CConnectorSelectWidget(); + // mConnectorSelWidget = new CConnectorSelectWidget(); @@ -41,10 +41,7 @@ CMainPage::~CMainPage() delete ui; } -void CMainPage::InspVisuelleBtnClicked() -{ - qDebug("clicked"); -} + int CMainPage::SetTestPageWidget(QWidget *PageHandle) { diff --git a/Sources/MainPage.h b/Sources/MainPage.h index 07688f4..6f0f337 100644 --- a/Sources/MainPage.h +++ b/Sources/MainPage.h @@ -24,7 +24,7 @@ public: QPixmap mLedONPixmap, mLedOFFPixmap; QLabel *test; - CConnectorSelectWidget *mConnectorSelWidget; + // CConnectorSelectWidget *mConnectorSelWidget; int SetTestPageWidget(QWidget *PageHandle); @@ -33,7 +33,7 @@ private: public slots: - void InspVisuelleBtnClicked(); + }; #endif // CMAINPAGE_H diff --git a/Sources/MainWindow.cpp b/Sources/MainWindow.cpp index 9404af7..5ad505b 100644 --- a/Sources/MainWindow.cpp +++ b/Sources/MainWindow.cpp @@ -15,6 +15,7 @@ MainWindow::MainWindow(QWidget *parent,CCableTestBench* ProgramHandle) mMainPage->mProgramHandle = ProgramHandle; mVisualInspPage->mProgramHandle = ProgramHandle; + mCableTestPage->mProgramHandle = ProgramHandle; // mMainPage->SetTestPageWidget(mCableTestPage); diff --git a/Sources/Widgets/ConnectorClickZoneWidget.cpp b/Sources/Widgets/ConnectorClickZoneWidget.cpp index 5a788b0..61a0275 100644 --- a/Sources/Widgets/ConnectorClickZoneWidget.cpp +++ b/Sources/Widgets/ConnectorClickZoneWidget.cpp @@ -33,17 +33,6 @@ void CConnectorClickZoneWidget::paintEvent(QPaintEvent *event) void CConnectorClickZoneWidget::mouseReleaseEvent(QMouseEvent *event) { - -// if(mConSelected == false) -// { -// mConSelected = true; -// } -// else if(mConSelected == true) -// { -// mConSelected = false; -// } - -// repaint(); emit ConnectorZoneClicked(this); } diff --git a/Sources/Widgets/ConnectorSelectWidget.cpp b/Sources/Widgets/ConnectorSelectWidget.cpp index 532244d..0673c02 100644 --- a/Sources/Widgets/ConnectorSelectWidget.cpp +++ b/Sources/Widgets/ConnectorSelectWidget.cpp @@ -137,7 +137,7 @@ void CConnectorSelectWidget::InputConnectorZoneClicked(CConnectorClickZoneWidget } else { - + ClearAllConnectorsSelections(); CConnectorClickZoneWidget *OutputSelZone = 0; switch(ConClickZone->GetConnectorType()) { @@ -181,6 +181,7 @@ void CConnectorSelectWidget::InputConnectorZoneClicked(CConnectorClickZoneWidget OutputSelZone->SelectConnector(true,Qt::darkGreen); } ConClickZone->SelectConnector(); + mCurSelConnector = ConClickZone->GetConnectorType(); } } diff --git a/Sources/Widgets/ConnectorTestVisualizationWidget.cpp b/Sources/Widgets/ConnectorTestVisualizationWidget.cpp new file mode 100644 index 0000000..063c182 --- /dev/null +++ b/Sources/Widgets/ConnectorTestVisualizationWidget.cpp @@ -0,0 +1,51 @@ +#include "ConnectorTestVisualizationWidget.h" +#include "GlobalDefine.h" + +CConnectorTestVisualizationWidget::CConnectorTestVisualizationWidget(QWidget *parent) : + QWidget(parent) +{ +} + +int CConnectorTestVisualizationWidget::SetConnectorPinCount(int Count) +{ + if(Count <= 0 || Count > MAX_CONNECTOR_PIN_COUNT) + { + return RET_ERROR; + } + + ClearConnectorsLists(); + + CONOFFStatusWidget *NewWidget; + for(int i = 0; i < Count; i++) + { + QString pin = QString("pin %1").arg(i); + NewWidget = new CONOFFStatusWidget(CONOFFStatusWidget::ON_OFF_LED_COLOR_GREEN,this,pin); + NewWidget->resize(ON_OFF_WIDGET_SIZE,ON_OFF_WIDGET_SIZE); + NewWidget->move((i+1)*(ON_OFF_WIDGET_SIZE+5),((i/10)*(ON_OFF_WIDGET_SIZE+5))); + mOutputCtorPinsWidgetsList.append(NewWidget); +// NewWidget = new CONOFFStatusWidget(CONOFFStatusWidget::ON_OFF_LED_COLOR_GREEN,this,pin); +// NewWidget->resize(ON_OFF_WIDGET_SIZE,ON_OFF_WIDGET_SIZE); +// NewWidget->move((i+1)*(ON_OFF_WIDGET_SIZE+5),((i%10)*(ON_OFF_WIDGET_SIZE+5))); +// mInputCtorPinsWidgetsList.append(NewWidget); + } + + repaint(); + return RET_OK; +} + +int CConnectorTestVisualizationWidget::ClearConnectorsLists() +{ + for(int i = 0; i < mOutputCtorPinsWidgetsList.size(); i++) + { + delete mOutputCtorPinsWidgetsList.at(i); + } + mOutputCtorPinsWidgetsList.clear(); + + for(int i = 0; i < mInputCtorPinsWidgetsList.size(); i++) + { + delete mInputCtorPinsWidgetsList.at(i); + } + mInputCtorPinsWidgetsList.clear(); + + return RET_OK; +} diff --git a/Sources/Widgets/ConnectorTestVisualizationWidget.h b/Sources/Widgets/ConnectorTestVisualizationWidget.h new file mode 100644 index 0000000..e3d0eb4 --- /dev/null +++ b/Sources/Widgets/ConnectorTestVisualizationWidget.h @@ -0,0 +1,30 @@ +#ifndef CONNECTORTESTVISUALIZATIONWIDGET_H +#define CONNECTORTESTVISUALIZATIONWIDGET_H + +#include +#include "ONOFFStatusWidget.h" +#include +#include "CableTestBenchDefs.h" + +#define ON_OFF_WIDGET_SIZE 30 +class CConnectorTestVisualizationWidget : public QWidget +{ + Q_OBJECT +public: + explicit CConnectorTestVisualizationWidget(QWidget *parent = 0); + + QList mInputCtorPinsWidgetsList; + QList mOutputCtorPinsWidgetsList; + + int SetConnectorPinCount(int count); + + int ClearConnectorsLists(); + +signals: + +public slots: + + +}; + +#endif // CONNECTORTESTVISUALIZATIONWIDGET_H diff --git a/Sources/Widgets/ONOFFStatusWidget.cpp b/Sources/Widgets/ONOFFStatusWidget.cpp new file mode 100644 index 0000000..b73ff44 --- /dev/null +++ b/Sources/Widgets/ONOFFStatusWidget.cpp @@ -0,0 +1,97 @@ +/******************************************************************************* +* * +* Société de Transports de Montréal. * +* 2013 * +* * +* Projet Zones Tests * +* * +* * +* * +*******************************************************************************/ +/* + Description: + . + +*/ + + +#include "ONOFFStatusWidget.h" +#include + +CONOFFStatusWidget::CONOFFStatusWidget(eONOFFLedColor Color, QWidget *Parent, QString Label) +{ + setParent(Parent); + if(Color == ON_OFF_LED_COLOR_GREEN) + { + mLedOffPixmap = QPixmap("./Images/green-led-off-md.png").scaled(10,10); + mLedOnPixmap = QPixmap("./Images/green-led-on-md.png").scaled(10,10); + } + else + { + mLedOffPixmap = QPixmap("./Images/red-led-off-md.png").scaled(10,10); + mLedOnPixmap = QPixmap("./Images/red-led-on-md.png").scaled(10,10); + } + + mLabel = new QLabel(Label,this); + mLabel->move(0,15); +} + +CONOFFStatusWidget::~CONOFFStatusWidget() +{ +} + +void CONOFFStatusWidget::SetON() +{ + IsOn = true; +} + +void CONOFFStatusWidget::SetOFF() +{ + IsOn = true; +} + +void CONOFFStatusWidget::Toggle() +{ + if(IsOn) + { + SetOFF(); + } + else + { + SetON(); + } +} + +void CONOFFStatusWidget::paintEvent(QPaintEvent *PaintEvent) +{ + QPainter painter(this); + + if(IsOn) + { + painter.drawPixmap(0,0,mLedOnPixmap); + } + else + { + painter.drawPixmap(0,0,mLedOnPixmap); + } +} + +void CONOFFStatusWidget::resizeEvent(QResizeEvent *event) +{ + int width = geometry().width(); + int height; + if(mLabel->text().isEmpty()) + { + height = geometry().height(); + } + else + { + height = geometry().height() - mLabel->fontMetrics().height(); + } + mLedOffPixmap = QPixmap("./Images/green-led-off-md.png").scaled(width,height); + mLedOnPixmap = QPixmap("./Images/green-led-on-md.png").scaled(width,height); + + int LabelWidth = mLabel->fontMetrics().width(mLabel->text()); + mLabel->move((width/2)-(LabelWidth/2),height); + +} diff --git a/Sources/Widgets/ONOFFStatusWidget.h b/Sources/Widgets/ONOFFStatusWidget.h new file mode 100644 index 0000000..c5e5784 --- /dev/null +++ b/Sources/Widgets/ONOFFStatusWidget.h @@ -0,0 +1,45 @@ +#ifndef ONOFFSTATUSWIDGET_H +#define ONOFFSTATUSWIDGET_H + +#include +#include +#include +#include + +class CONOFFStatusWidget : public QWidget +{ + + + Q_OBJECT +public: + + enum eONOFFLedColor + { + ON_OFF_LED_COLOR_GREEN, + ON_OFF_LED_COLOR_RED + }; + + CONOFFStatusWidget(eONOFFLedColor Color, QWidget *Parent = NULL,QString Label = QString()); + ~CONOFFStatusWidget(); + void paintEvent(QPaintEvent *PaintEvent); + void resizeEvent(QResizeEvent *); + + QLabel *mLabel; + QPixmap mLedOnPixmap,mLedOffPixmap; + + bool IsOn; + + void SetON(); + void SetOFF(); + void Toggle(); + + + + +public slots: + + + +}; + +#endif // ONOFFSTATUSWIDGET_H diff --git a/images/done1.png b/images/done1.png new file mode 100644 index 0000000..71941fc Binary files /dev/null and b/images/done1.png differ diff --git a/images/done2.png b/images/done2.png new file mode 100644 index 0000000..b1ffec9 Binary files /dev/null and b/images/done2.png differ diff --git a/images/todo.png b/images/todo.png new file mode 100644 index 0000000..4be5dc1 Binary files /dev/null and b/images/todo.png differ diff --git a/object_script.CableTestBench.Debug b/object_script.CableTestBench.Debug index eb1b14e..f7c7d7e 100644 --- a/object_script.CableTestBench.Debug +++ b/object_script.CableTestBench.Debug @@ -7,6 +7,8 @@ INPUT( ./debug\ConnectorSelectWidget.o ./debug\CableTestPage.o ./debug\ConnectorClickZoneWidget.o +./debug\ONOFFStatusWidget.o +./debug\ConnectorTestVisualizationWidget.o ./debug\moc_MainWindow.o ./debug\moc_MainPage.o ./debug\moc_CableTestBench.o @@ -14,4 +16,6 @@ INPUT( ./debug\moc_ConnectorSelectWidget.o ./debug\moc_CableTestPage.o ./debug\moc_ConnectorClickZoneWidget.o +./debug\moc_ONOFFStatusWidget.o +./debug\moc_ConnectorTestVisualizationWidget.o ); diff --git a/object_script.CableTestBench.Release b/object_script.CableTestBench.Release index 4c74553..a414918 100644 --- a/object_script.CableTestBench.Release +++ b/object_script.CableTestBench.Release @@ -7,6 +7,8 @@ INPUT( ./release\ConnectorSelectWidget.o ./release\CableTestPage.o ./release\ConnectorClickZoneWidget.o +./release\ONOFFStatusWidget.o +./release\ConnectorTestVisualizationWidget.o ./release\moc_MainWindow.o ./release\moc_MainPage.o ./release\moc_CableTestBench.o @@ -14,4 +16,6 @@ INPUT( ./release\moc_ConnectorSelectWidget.o ./release\moc_CableTestPage.o ./release\moc_ConnectorClickZoneWidget.o +./release\moc_ONOFFStatusWidget.o +./release\moc_ConnectorTestVisualizationWidget.o ); diff --git a/ui_CMainPage.h b/ui_CMainPage.h index 6a14e1e..a8fdd88 100644 --- a/ui_CMainPage.h +++ b/ui_CMainPage.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading UI file 'CMainPage.ui' ** -** Created: Tue Apr 16 11:09:53 2019 +** Created: Wed May 1 16:11:28 2019 ** by: Qt User Interface Compiler version 4.8.1 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! diff --git a/ui_CableTestPage.h b/ui_CableTestPage.h index 297bd22..03a9e32 100644 --- a/ui_CableTestPage.h +++ b/ui_CableTestPage.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading UI file 'CableTestPage.ui' ** -** Created: Tue Apr 16 11:09:53 2019 +** Created: Wed May 1 16:26:00 2019 ** by: Qt User Interface Compiler version 4.8.1 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! @@ -22,7 +22,8 @@ #include #include #include -#include +#include "connectorselectwidget.h" +#include "connectortestvisualizationwidget.h" QT_BEGIN_NAMESPACE @@ -44,7 +45,10 @@ public: QLabel *mCableConfigLabel; QLabel *mInspVisuelleLabel; QFrame *mInspVisuelleFrame; - QPushButton *pushButton; + QPushButton *mExecInspVisuelleBtn; + QLabel *mInspectionDoneIcon; + CConnectorTestVisualizationWidget *mConnectorTestVisualisationWidget; + QFrame *line; void setupUi(QWidget *CCableTestPage) { @@ -118,17 +122,28 @@ public: mCableConfigLabel->setFont(font); mInspVisuelleLabel = new QLabel(CCableTestPage); mInspVisuelleLabel->setObjectName(QString::fromUtf8("mInspVisuelleLabel")); - mInspVisuelleLabel->setGeometry(QRect(70, 230, 271, 20)); + mInspVisuelleLabel->setGeometry(QRect(60, 200, 271, 20)); mInspVisuelleLabel->setFont(font); mInspVisuelleFrame = new QFrame(CCableTestPage); mInspVisuelleFrame->setObjectName(QString::fromUtf8("mInspVisuelleFrame")); - mInspVisuelleFrame->setGeometry(QRect(60, 250, 391, 121)); + mInspVisuelleFrame->setGeometry(QRect(50, 220, 291, 121)); mInspVisuelleFrame->setFrameShape(QFrame::StyledPanel); mInspVisuelleFrame->setFrameShadow(QFrame::Plain); mInspVisuelleFrame->setLineWidth(3); - pushButton = new QPushButton(mInspVisuelleFrame); - pushButton->setObjectName(QString::fromUtf8("pushButton")); - pushButton->setGeometry(QRect(10, 50, 121, 23)); + mExecInspVisuelleBtn = new QPushButton(mInspVisuelleFrame); + mExecInspVisuelleBtn->setObjectName(QString::fromUtf8("mExecInspVisuelleBtn")); + mExecInspVisuelleBtn->setGeometry(QRect(10, 50, 121, 23)); + mInspectionDoneIcon = new QLabel(mInspVisuelleFrame); + mInspectionDoneIcon->setObjectName(QString::fromUtf8("mInspectionDoneIcon")); + mInspectionDoneIcon->setGeometry(QRect(160, 20, 101, 91)); + mConnectorTestVisualisationWidget = new CConnectorTestVisualizationWidget(CCableTestPage); + mConnectorTestVisualisationWidget->setObjectName(QString::fromUtf8("mConnectorTestVisualisationWidget")); + mConnectorTestVisualisationWidget->setGeometry(QRect(60, 410, 741, 231)); + line = new QFrame(CCableTestPage); + line->setObjectName(QString::fromUtf8("line")); + line->setGeometry(QRect(57, 380, 751, 20)); + line->setFrameShape(QFrame::HLine); + line->setFrameShadow(QFrame::Sunken); retranslateUi(CCableTestPage); @@ -160,7 +175,8 @@ public: mNomTesteurEditBox->setText(QString()); mCableConfigLabel->setText(QApplication::translate("CCableTestPage", "Configuration du c\303\242ble", 0, QApplication::UnicodeUTF8)); mInspVisuelleLabel->setText(QApplication::translate("CCableTestPage", "Inspection visuelle", 0, QApplication::UnicodeUTF8)); - pushButton->setText(QApplication::translate("CCableTestPage", "Ex\303\251cuter Inspection", 0, QApplication::UnicodeUTF8)); + mExecInspVisuelleBtn->setText(QApplication::translate("CCableTestPage", "Effectuer Inspection", 0, QApplication::UnicodeUTF8)); + mInspectionDoneIcon->setText(QApplication::translate("CCableTestPage", "TextLabel", 0, QApplication::UnicodeUTF8)); } // retranslateUi }; diff --git a/ui_VisualInspectionPage.h b/ui_VisualInspectionPage.h index 9fcc74b..fc23469 100644 --- a/ui_VisualInspectionPage.h +++ b/ui_VisualInspectionPage.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading UI file 'VisualInspectionPage.ui' ** -** Created: Tue Apr 16 11:09:53 2019 +** Created: Wed May 1 16:11:28 2019 ** by: Qt User Interface Compiler version 4.8.1 ** ** WARNING! All changes made in this file will be lost when recompiling UI file!