108 const std::string& example)
114 exists = fs::exists(exampleDir);
115 }
catch (std::exception&) {
119 WApplication::instance()->setInternalPathValid(
false);
120 addWidget(std::make_unique<WText>(
"No such example: " + exampleDir));
124 model_ = std::make_shared<WStandardItemModel>(0, 1);
131 WApplication::instance()->setTitle(tr(
"srcview.title." + example));
132 std::unique_ptr<WText> title(std::make_unique<WText>(
134 title->setInternalPathEncoding(
true);
136 auto exampleView = std::make_unique<WTreeView>();
158 WStandardItem *w =
model_->item(0);
161 if (w->rowCount() > 0)
169 auto topLayout = std::make_unique<WVBoxLayout>();
170 topLayout->addWidget(std::move(title));
172 auto gitLayout = std::make_unique<WHBoxLayout>();
173 WHBoxLayout *g = gitLayout.get();
174 gitLayout->addWidget(std::move(exampleView), 0);
175 gitLayout->addWidget(std::move(sourceView), 1);
176 topLayout->addLayout(std::move(gitLayout), 1);
185 setLayout(std::move(topLayout));
186 setStyleClass(
"maindiv");
205 const fs::path& path)
207 static const char *supportedFiles[] = {
208 ".C",
".cpp",
".h",
".css",
".xml",
".png",
".gif",
".csv",
".ico", 0
211 auto dir = std::make_unique<FileItem>(
"/icons/yellow-folder-open.png",
215 parent->appendRow(std::move(dir));
218 std::set<fs::path> paths;
220 fs::directory_iterator end_itr;
221 for (fs::directory_iterator i(path); i != end_itr; ++i)
224 std::vector<std::unique_ptr<FileItem>> classes, files;
225 std::vector<fs::path> dirs;
227 while (!paths.empty()) {
228 fs::path p = *paths.begin();
232 if (fs::is_symlink(p))
236 if (fs::is_regular_file(p)) {
237 std::string ext = p.extension().string();
238 bool supported =
false;
239 for (
const char **s = supportedFiles; *s != 0; ++s)
251 if (!companion.empty()) {
252 std::set<fs::path>::iterator it_companion = paths.find(companion);
254 if (it_companion != paths.end()) {
255 std::string className =
stem(p);
256 escapeText(className);
257 std::string label =
"<i>class</i> " + className;
259 std::unique_ptr<FileItem> classItem =
260 std::make_unique<FileItem>(
"/icons/cppclass.png", label, std::string());
261 classItem->setFlags(classItem->flags() | ItemFlag::XHTMLText);
264 = std::make_unique<FileItem>(
"/icons/document.png",
filename(p),
267 = std::make_unique<FileItem>(
"/icons/document.png",
269 (*it_companion).string());
270 classItem->appendRow(std::move(header));
271 classItem->appendRow(std::move(cpp));
273 classes.push_back(std::move(classItem));
274 paths.erase(it_companion);
277 = std::make_unique<FileItem>(
"/icons/document.png",
filename(p),
279 files.push_back(std::move(file));
281 }
else if (fs::is_directory(p)) {
285 = std::make_unique<FileItem>(
"/icons/document.png",
filename(p),
287 files.push_back(std::move(file));
293 for (
unsigned int i = 0; i < classes.size(); i++)
294 parent->appendRow(std::move(classes[i]));
296 for (
unsigned int i = 0; i < files.size(); i++)
297 parent->appendRow(std::move(files[i]));
299 for (
unsigned int i = 0; i < dirs.size(); i++)
301 }
catch (fs::filesystem_error& e) {
302 std::cerr << e.what() << std::endl;
307 const fs::path& srcPath,
308 const std::string packageName)
310 fs::directory_iterator end_itr;
313 for (fs::directory_iterator i(srcPath); i != end_itr; ++i) {
315 if (fs::is_regular_file(p)) {
317 auto item = std::make_unique<FileItem>(
"/icons/package.png", packageName,
"");
318 packageItem = item.get();
319 parent->appendRow(std::move(item));
323 = std::make_unique<FileItem>(
"/icons/javaclass.png",
filename(p),
325 packageItem->appendRow(std::move(file));
329 for (fs::directory_iterator i(srcPath); i != end_itr; ++i) {
331 if (fs::is_directory(p)) {
332 std::string pn = packageName;
343 const fs::path& path)
346 = std::make_unique<FileItem>(
"/icons/yellow-folder-open.png",
349 parent->appendRow(std::move(dir));
352 std::vector<fs::path> files, dirs;
354 fs::directory_iterator end_itr;
355 for (fs::directory_iterator i(path); i != end_itr; ++i) {
357 if (fs::is_directory(p)) {
360 = std::make_unique<FileItem>(
"/icons/package-folder-open.png",
363 parent->appendRow(std::move(dir));
375 for (
auto item : dirs)
378 for (
auto item : files) {
380 = std::make_unique<FileItem>(
"/icons/document.png",
filename(item),
382 parent->appendRow(std::move(file));