Преглед на файлове

Ensure an executable is selected before allowing to start it

Ivo Wolf преди 13 години
родител
ревизия
94eae5aad8

+ 4 - 2
Applications/ctkDICOMHost/ctkDICOMHostMainLogic.cpp

@@ -49,11 +49,12 @@ void ctkDICOMHostMainLogic::configureHostedApp()
   //qDebug() << "load button clicked";
   AppFileName = QFileDialog::getOpenFileName(PlaceHolderForHostedApp,"Choose hosted application",QApplication::applicationDirPath());
   HostControls->setAppFileName(AppFileName);
+  emit SelectionValid(((this->Host) && (this->HostControls->validAppFileName()) && (ValidSelection)));
 }
 
 void ctkDICOMHostMainLogic::sendDataToHostedApp()
 {
-  if ((this->Host) && (this->AppFileName.isEmpty()==false) && (ValidSelection))
+ if ((this->Host) && (this->HostControls->validAppFileName()) && (ValidSelection))
   {
     foreach (const QString &str, SelectedFiles) {
       if (str.isEmpty())
@@ -83,6 +84,7 @@ void ctkDICOMHostMainLogic::sendDataToHostedApp()
 
 void ctkDICOMHostMainLogic::onAppReady()
 {
+  emit SelectionValid(ValidSelection);
   if(SendData)
   {
     bool reply = this->Host->getDicomAppService()->setState(ctkDicomAppHosting::INPROGRESS);
@@ -117,7 +119,7 @@ void ctkDICOMHostMainLogic::onTreeSelectionChanged(const QItemSelection & select
     }
     if (ValidSelection==false)
       emit TreeSelectionChanged("no series selected");
-    emit SelectionValid(ValidSelection);
+    emit SelectionValid(((this->Host) && (this->HostControls->validAppFileName()) && (ValidSelection)));
 }
 
 //----------------------------------------------------------------------------

+ 9 - 2
Plugins/org.commontk.dah.examplehost/ctkExampleHostControlWidget.cpp

@@ -35,7 +35,8 @@
 ctkExampleHostControlWidget::ctkExampleHostControlWidget(ctkExampleDicomHost * host, QWidget *parent) :
     Host(host),
     QWidget(parent),
-    ui(new Ui::ctkExampleHostControlWidget)
+    ValidAppFileName(false),
+    ui(new Ui::ctkExampleHostControlWidget)    
 {
   qDebug() << "setup ui";
   ui->setupUi(this);
@@ -64,7 +65,7 @@ void ctkExampleHostControlWidget::StartApplication(QString appFileName)
   qDebug() << "ctkExampleHostControlWidget::StartApplication";
   if(appFileName.isEmpty()==false)
     this->setAppFileName(appFileName);
-  if (this->Host)
+  if ((this->Host) && (validAppFileName()))
     {
     qDebug() << "Starting app";
     this->Host->StartApplication(this->AppFileName);
@@ -99,9 +100,11 @@ void ctkExampleHostControlWidget::setAppFileName(QString name)
   if (QFile(this->AppFileName).permissions() & QFile::ExeUser )
     {
     this->ui->applicationPathLabel->setText(this->AppFileName);
+    ValidAppFileName = true;
     }
   else
     {
+    ValidAppFileName = false;
     this->ui->applicationPathLabel->setText(
         QString("<font color='red'>Not executable:</font>").append(this->AppFileName));
     }
@@ -170,3 +173,7 @@ void ctkExampleHostControlWidget::cancelButtonClicked()
   this->Host->getDicomAppService()->setState(ctkDicomAppHosting::CANCELED);
 }
 
+bool ctkExampleHostControlWidget::validAppFileName()
+{
+  return ValidAppFileName;
+}

+ 3 - 2
Plugins/org.commontk.dah.examplehost/ctkExampleHostControlWidget.h

@@ -44,6 +44,7 @@ public:
   explicit ctkExampleHostControlWidget(ctkExampleDicomHost * host, QWidget *parent = 0);
   virtual ~ctkExampleHostControlWidget();
 
+  bool validAppFileName();
 public slots:
   // the following to in capital letters for compatibility to ctkExampleDicomHost
   void StartApplication(QString appFileName="");
@@ -63,11 +64,11 @@ protected:
 
   ctkExampleDicomHost* Host;
   QString AppFileName;
-
 private:
 
-  Ui::ctkExampleHostControlWidget *ui;
+  bool ValidAppFileName;
 
+  Ui::ctkExampleHostControlWidget *ui;
 };
 
 #endif // CTKHOSTWIDGET_H