]> Creatis software - bbtkGEditor.git/blobdiff - lib/EditorGraphicBBS/bbsWxGUIEditorGraphic/wxGEditorTabPanel.cxx
Feature #2058 File drag and drop
[bbtkGEditor.git] / lib / EditorGraphicBBS / bbsWxGUIEditorGraphic / wxGEditorTabPanel.cxx
index 58e8835daf6f83690c92aeb5fa7694541078b3da..030e52aeca52c607b13bbca5e86828f410036150 100644 (file)
@@ -100,6 +100,11 @@ namespace bbtk
        {
                wxVtk3DBaseView *baseview = new wxVtk3DBaseView(this);
                baseview->Configure();
+//EED 07 juin 2013
+               baseview->GetCamera()->SetViewUp (0, 1, 0);
+               baseview->GetCamera()->SetPosition (0, 0, 1);
+               baseview->GetCamera()->SetFocalPoint (0, 0, 0);
+
 //EED 15 oct 2012              _sceneManager=new wxVtkSceneManager(this,baseview,_id);
                _sceneManager=new wxVtkSceneManager(this,baseview,_id, _bbtkfactory);
 
@@ -115,26 +120,98 @@ namespace bbtk
 
        bool wxGEditorTabPanel::OnDropText(wxCoord x, wxCoord y, const wxString& data)
        {
-               std::string packageName="";
-               std::string boxType="";
-
-               wxString foo( (data) );
-               char str[150];
-               strcpy( str, (const char*)foo.mb_str(wxConvUTF8) );
 
-               char delims[] = ":";
-                char *result = NULL;
-                result = strtok( str, delims );
-                packageName += result;
+         /*
+          * DFGO
+          * To handle bbs and bbg:
+          * handle data parameter to detect if incoming string is file or bbs or
+          * bbg or blackbox.
+          *
+          * For a drag and drop tutorial read:
+          * http://zetcode.com/gui/wxwidgets/dragdrop/
+          */
+
+          //wxMessageBox(data);
+
+         std::string stdData = crea::wx2std(data);
+
+         //std::cout << "Text drop: '" << stdData << "'" << std::endl;
+
+         if(stdData.substr(0,4) == "box:")
+           {
+             int posT = stdData.find_first_of(':', 4);
+             std::string packageName = stdData.substr(4, posT-4);
+             posT = stdData.find_first_not_of(':', posT);
+             std::string boxType = stdData.substr(posT);
+
+             //std::cout << "box: Package='" << packageName << "' BoxType='" << boxType << "'" <<std::endl;
+             /*
+                    wxString foo( (data) );
+                    char str[150];
+                    strcpy( str, (const char*)foo.mb_str(wxConvUTF8) );
+
+                    char delims[] = ":";
+                     char *result = NULL;
+                     result = strtok( str, delims );
+                     packageName += result;
+
+                     result = strtok( NULL, delims );
+                     boxType += result;
+              */
+             if ( _panelsManager->TryToOpenScriptApplication(packageName,boxType) == false )
+               {
+                 _sceneManager->createGBlackBox(x,y,packageName, boxType);
+                 saveTempandUpdate("drop box");
+               }
+           }
+         // DFGO: file for linux
+         else if(stdData.substr(0,5) == "file:")
+           {
+             stdData=stdData.substr(0,stdData.size()-1);
+             std::cout << "Dropped file: " << stdData << std::endl;
+             std::stringstream ss(stdData);
+             std::getline(ss, stdData, (char)13);
+             while(!ss.eof())
+               {
+                 std::string filePath = stdData.substr(7);
+                 std::cout << filePath << ": ";
+                 if(wxFile::Exists(crea::std2wx(filePath)))
+                   {
+                     std::cout << "File Exists." << std::endl;
+                     wxFileName fileToOpen(crea::std2wx(filePath));
+
+                     std::string filetype = crea::wx2std(fileToOpen.GetExt());
+                      std::string filename = crea::wx2std(fileToOpen.GetFullName());
+                      std::string filepath = crea::wx2std(fileToOpen.GetFullPath());
+
+
+                      if(filetype == "bbs")
+                        {
+                          std::cout << "Importing bbs file." << std::endl;
+                          wxMessageBox(crea::std2wx("You are opening a bbs file, "
+                              "make sure not to overwrite an existing bbg file "
+                              "when saving the pipeline."),
+                              crea::std2wx("Opening File Warning"), wxICON_INFORMATION);
+                          this->_panelsManager->GetParentGUIEditorGraphicBBS()->OpenBBS(filepath, filename);
+                        }
+                      else if(filetype == "bbg")
+                        {
+                          std::cout << "Opening bbg file." << std::endl;
+                          this->_panelsManager->GetParentGUIEditorGraphicBBS()->OpenDiagram(filepath, filename);
+                        }
+                      else
+                        {
+                          std::cout << "Unknown file type: Can't open this kind of file: " << filetype << std::endl;
+                        }
+                   }
+                 else
+                   {
+                     std::cout << "File Doesn't Exists. The given path is invalid: " << filePath << std::endl;
+                   }
+                 std::getline(ss, stdData, (char)13);
+               }
+           }
 
-                result = strtok( NULL, delims );
-                boxType += result;
-
-               if ( _panelsManager->TryToOpenScriptApplication(packageName,boxType) == false )
-               {
-                       _sceneManager->createGBlackBox(x,y,packageName, boxType);
-                       saveTempandUpdate("drop box");
-               }               
          return true;
        }