00001 /********************************************************************* 00002 * Software License Agreement (BSD License) 00003 * 00004 * Copyright (c) 2012, Willow Garage, Inc. 00005 * All rights reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions 00009 * are met: 00010 * 00011 * * Redistributions of source code must retain the above copyright 00012 * notice, this list of conditions and the following disclaimer. 00013 * * Redistributions in binary form must reproduce the above 00014 * copyright notice, this list of conditions and the following 00015 * disclaimer in the documentation and/or other materials provided 00016 * with the distribution. 00017 * * Neither the name of Willow Garage nor the names of its 00018 * contributors may be used to endorse or promote products derived 00019 * from this software without specific prior written permission. 00020 * 00021 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00022 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00023 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00024 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00025 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00026 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 00027 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00028 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00029 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00030 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 00031 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00032 * POSSIBILITY OF SUCH DAMAGE. 00033 *********************************************************************/ 00034 00035 /* Author: Dave Coleman */ 00036 00037 #ifndef MOVEIT_ROS_MOVEIT_SETUP_ASSISTANT_WIDGETS_CONFIGURATION_FILES_WIDGET_ 00038 #define MOVEIT_ROS_MOVEIT_SETUP_ASSISTANT_WIDGETS_CONFIGURATION_FILES_WIDGET_ 00039 00040 #include <QWidget> 00041 #include <QPushButton> 00042 #include <QString> 00043 #include <QProgressBar> 00044 #include <QLabel> 00045 #include <QListWidget> 00046 #include <QList> 00047 00048 #ifndef Q_MOC_RUN 00049 #include <moveit/setup_assistant/tools/moveit_config_data.h> 00050 #endif 00051 00052 #include "header_widget.h" 00053 #include "setup_screen_widget.h" // a base class for screens in the setup assistant 00054 00055 namespace moveit_setup_assistant 00056 { 00057 // Struct for storing all the file operations 00058 struct GenerateFile 00059 { 00060 GenerateFile() : write_on_changes(0), generate_(true), modified_(false) 00061 { 00062 } 00063 std::string file_name_; 00064 std::string rel_path_; 00065 std::string description_; 00066 unsigned long write_on_changes; // bitfield indicating required rewrite 00067 bool generate_; // "generate" checkbox ticked? 00068 bool modified_; // file externally modified? 00069 boost::function<bool(std::string)> gen_func_; 00070 }; 00071 00072 // Typedef for storing template string replacement pairs 00073 typedef std::vector<std::pair<std::string, std::string> > StringPairVector; 00074 00075 // Class 00076 class ConfigurationFilesWidget : public SetupScreenWidget 00077 { 00078 Q_OBJECT 00079 00080 public: 00081 // ****************************************************************************************** 00082 // Public Functions 00083 // ****************************************************************************************** 00084 00085 ConfigurationFilesWidget(QWidget* parent, moveit_setup_assistant::MoveItConfigDataPtr config_data); 00086 00088 virtual void focusGiven(); 00089 00090 // ****************************************************************************************** 00091 // Qt Components 00092 // ****************************************************************************************** 00093 QPushButton* btn_save_; 00094 LoadPathWidget* stack_path_; 00095 QProgressBar* progress_bar_; 00096 QListWidget* action_list_; 00097 QLabel* action_label_; 00098 QLabel* success_label_; 00099 QList<QString> action_desc_; // Holds the descriptions explaining all performed actions 00100 00101 private Q_SLOTS: 00102 00103 // ****************************************************************************************** 00104 // Slot Event Functions 00105 // ****************************************************************************************** 00106 00108 void savePackage(); 00109 00111 bool generatePackage(); 00112 00114 void exitSetupAssistant(); 00115 00117 void changeActionDesc(int id); 00118 00120 void changeCheckedState(QListWidgetItem* item); 00121 00122 private: 00123 // ****************************************************************************************** 00124 // Variables 00125 // ****************************************************************************************** 00126 00128 moveit_setup_assistant::MoveItConfigDataPtr config_data_; 00129 00131 std::string new_package_name_; 00132 00134 unsigned int action_num_; 00135 00137 bool has_generated_pkg_; 00138 00140 bool first_focusGiven_; 00141 00143 std::vector<GenerateFile> gen_files_; 00144 00146 StringPairVector template_strings_; 00147 00148 // ****************************************************************************************** 00149 // Private Functions 00150 // ****************************************************************************************** 00151 00153 bool loadGenFiles(); 00154 00157 bool checkGenFiles(); 00158 00160 bool showGenFiles(); 00161 00163 bool checkDependencies(); 00164 00166 void updateProgress(); 00167 00169 const std::string getPackageName(std::string package_path); 00170 00172 bool noGroupsEmpty(); 00173 00178 void loadTemplateStrings(); 00179 00186 bool addTemplateString(const std::string& key, const std::string& value); 00187 00197 bool copyTemplate(const std::string& template_path, const std::string& output_path); 00198 00204 bool createFolder(const std::string& output_path); 00205 }; 00206 00207 } // namespace moveit_setup_assistant 00208 00209 #endif