Guest User

Untitled

a guest
Nov 17th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.21 KB | None | 0 0
  1. 1. main.cc
  2. //g++ main.cc -o main `pkg-config gtkmm-3.0 --cflags --libs` -lstdc++fs
  3. #include "mainwindow.cc"
  4. #include "catalog.cc"
  5.  
  6. #include "mainwindow.h"
  7.  
  8. #include <gtkmm/application.h>
  9.  
  10. int main(int argc, char *argv[])
  11. {
  12. auto app = Gtk::Application::create("org.gtkmm.example");
  13.  
  14. MainWindow window;
  15.  
  16. return app->run(window, argc, argv);
  17. }
  18.  
  19. 2. mainwindow.h
  20. #ifndef GTKMM_MAINWINDOW_H
  21. #define GTKMM_MAINWINDOW_H
  22.  
  23. #include <gtkmm.h>
  24.  
  25. #include "catalog.h"
  26.  
  27. class MainWindow : public Gtk::Window
  28. {
  29. public:
  30. MainWindow();
  31. virtual ~MainWindow();
  32.  
  33. protected:
  34.  
  35. void add_catalog();
  36.  
  37. //Child widgets:
  38. Gtk::Box m_mainBox;
  39. Gtk::Grid m_grid;
  40.  
  41. Catalog *m_Catalog0 = new Catalog("/var/www/cscart.site");
  42. Catalog *m_Catalog1 = new Catalog("/var/www");
  43. Catalog *m_Catalog2 = new Catalog("/var/www/cscart.site");
  44. Catalog *m_Catalog3 = new Catalog("/var/www");
  45.  
  46. Gtk::ButtonBox m_bottom_buttons_box;
  47. Gtk::Button m_button_add;
  48.  
  49. };
  50.  
  51. #endif //GTKMM_MAINWINDOW_H
  52.  
  53. 3. mainwindow.cc
  54. #include "mainwindow.h"
  55.  
  56. MainWindow::MainWindow()
  57. : m_mainBox(Gtk::ORIENTATION_VERTICAL),
  58. m_button_add("+")
  59. {
  60. set_title("FM 4x4");
  61. set_border_width(5);
  62. set_default_size(500, 500);
  63.  
  64. add(m_mainBox);
  65. m_mainBox.pack_start(m_grid);
  66. m_grid.attach(*m_Catalog0, 0, 0, 1, 1);
  67. m_grid.attach(*m_Catalog1, 1, 0, 1, 1);
  68. m_grid.attach(*m_Catalog2, 1, 1, 1, 1);
  69.  
  70. m_grid.remove(*m_Catalog0);
  71. m_grid.attach(*m_Catalog0, 0, 0, 1, 2);
  72.  
  73. m_mainBox.pack_start(m_bottom_buttons_box, Gtk::PACK_SHRINK);
  74. m_bottom_buttons_box.pack_start(m_button_add, Gtk::PACK_SHRINK);
  75.  
  76. m_bottom_buttons_box.set_border_width(5);
  77. m_bottom_buttons_box.set_layout(Gtk::BUTTONBOX_END);
  78. m_button_add.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::add_catalog) );
  79.  
  80. show_all_children();
  81. }
  82.  
  83. MainWindow::~MainWindow() {
  84. }
  85.  
  86. void MainWindow::add_catalog() {
  87. //m_leftBox.pack_start(*m_Catalog3);
  88. m_grid.remove(*m_Catalog0);
  89. show_all_children();
  90. }
  91.  
  92. 4. catalog.h
  93. #ifndef GTKMM_MAIN_CATALOG_H
  94. #define GTKMM_MAIN_CATALOG_H
  95.  
  96. #include <gtkmm.h>
  97.  
  98. class Catalog: public Gtk::ScrolledWindow {
  99. public:
  100. Catalog(std::string p);
  101. virtual ~Catalog();
  102. void set_path(std::string p);
  103.  
  104. class ModelColumns : public Gtk::TreeModel::ColumnRecord {
  105. public:
  106. ModelColumns() {
  107. add(m_col_name); add(m_col_extension_or_dir_or_file);
  108. }
  109. Gtk::TreeModelColumn<std::string> m_col_name;
  110. Gtk::TreeModelColumn<std::string> m_col_extension_or_dir_or_file;
  111. };
  112. ModelColumns m_Columns;
  113.  
  114. Gtk::TreeView m_TreeView;
  115.  
  116. protected:
  117. Glib::RefPtr<Gtk::ListStore> m_refListStore; //The Tree Model.
  118. };
  119. #endif //GTKMM_EXAMPLE_MESSAGESLIST_H
  120.  
  121. 5. catalog.cc
  122. #include "catalog.h"
  123.  
  124. #include <experimental/filesystem>
  125.  
  126. Catalog::Catalog(std::string p) {
  127.  
  128. set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
  129. set_hexpand(true);
  130. set_vexpand(true);
  131.  
  132. /* Обязательно поправить это недоразумение */
  133. set_border_width(1);
  134.  
  135. add(m_TreeView);
  136.  
  137. m_refListStore = Gtk::ListStore::create(m_Columns);
  138. m_TreeView.set_model(m_refListStore);
  139.  
  140. Gtk::TreeModel::Row row;
  141.  
  142. namespace fs = std::experimental::filesystem;
  143. std::string path = p;
  144. for (auto & p : fs::directory_iterator(path)) {
  145. row = *(m_refListStore->append());
  146. row[m_Columns.m_col_name] = fs::path(p).filename();
  147. row[m_Columns.m_col_extension_or_dir_or_file] = fs::path(p);
  148. }
  149.  
  150. m_TreeView.append_column("Name", m_Columns.m_col_name);
  151. m_TreeView.append_column("Extension",
  152. m_Columns.m_col_extension_or_dir_or_file);
  153. }
  154.  
  155. Catalog::~Catalog() {
  156. }
  157.  
  158. А вопрос такой:
  159. Я хочу эти 4 экземпляра
  160. Catalog *m_Catalog0 = new Catalog("/var/www/cscart.site");
  161. Catalog *m_Catalog1 = new Catalog("/var/www");
  162. Catalog *m_Catalog2 = new Catalog("/var/www/cscart.site");
  163. Catalog *m_Catalog3 = new Catalog("/var/www");
  164. заменить вектором класса. Как мне это сделать?
  165.  
  166. конструкция
  167. std::vector{Catalog^} arr;
  168. arr.push_back(new A(2));
  169. arr[0];
  170. не работает.
  171. Хотя тестовый файл с такой конструкцией отрабатывает нормально.
Add Comment
Please, Sign In to add comment