Salome HOME
Copyright update 2020
[modules/jobmanager.git] / src / genericgui / JM_ResourceCatalog.cxx
1 // Copyright (C) 2009-2020  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #include "JM_ResourceCatalog.hxx"
21 #include "BL_Traces.hxx"
22 #include "JM_SalomeResource.hxx"
23 #include "JM_EditSalomeResource.hxx"
24
25 #include <QHBoxLayout>
26 #include <QListWidget>
27 #include <QPushButton>
28 #include <QVBoxLayout>
29
30 JM::ResourceCatalog::ResourceCatalog(QWidget *parent, BL::SALOMEServices * salome_services, bool batch_only)
31 : QWidget(parent),
32   _batch_only(batch_only)
33 {
34   DEBTRACE("Creating JM::ResourceCatalog");
35   BL_ASSERT(parent);
36   BL_ASSERT(salome_services);
37   _parent = parent;
38   _salome_services = salome_services;
39
40   _refresh_button = new QPushButton("Refresh Resource List");
41   _refresh_button->show();
42   _resource_files_list = new QListWidget(this);
43   _resource_files_list->setSelectionMode(QAbstractItemView::SingleSelection);
44   std::list<std::string> resource_list = _salome_services->getResourceList(_batch_only);
45   std::list<std::string>::iterator it;
46   for (it = resource_list.begin(); it != resource_list.end(); it++)
47   {
48     std::string resource = *it;
49     _resource_files_list->addItem(QString(resource.c_str()));
50   }
51
52   _show_button = new QPushButton("Show");
53   _show_button->setEnabled(false);
54   _edit_button = new QPushButton("Edit");
55   _edit_button->setEnabled(false);
56   _add_button = new QPushButton("Add");
57   _remove_button = new QPushButton("Remove");
58   _remove_button->setEnabled(false);
59
60   QHBoxLayout * button_layout = new QHBoxLayout(this);
61   button_layout->addWidget(_show_button);
62   button_layout->addWidget(_edit_button);
63   button_layout->addWidget(_add_button);
64   button_layout->addWidget(_remove_button);
65   QWidget * layout_widget = new QWidget(this);
66   layout_widget->setLayout(button_layout);
67
68   QVBoxLayout * mainLayout = new QVBoxLayout(this);
69   mainLayout->addWidget(_refresh_button);
70   mainLayout->addWidget(_resource_files_list);
71   mainLayout->addWidget(layout_widget);
72   setLayout(mainLayout);
73
74   // Buttons
75   connect(_refresh_button, SIGNAL(clicked()), this, SLOT(refresh_resource_list()));
76   connect(_show_button, SIGNAL(clicked()), this, SLOT(show_button()));
77   connect(_edit_button, SIGNAL(clicked()), this, SLOT(edit_button()));
78   connect(_add_button, SIGNAL(clicked()), this, SLOT(add_button()));
79   connect(_remove_button, SIGNAL(clicked()), this, SLOT(remove_button()));
80   // Double click on an item
81   connect(_resource_files_list, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(item_choosed(QListWidgetItem*)));
82   // Selection management
83   connect(_resource_files_list, SIGNAL(itemSelectionChanged()), this, SLOT(buttons_management()));
84 }
85
86 JM::ResourceCatalog::~ResourceCatalog()
87 {
88   DEBTRACE("Destroying JM::ResourceCatalog");
89 }
90
91 QListWidget * 
92 JM::ResourceCatalog::getQListWidget()
93 {
94   return _resource_files_list;
95 }
96
97 void
98 JM::ResourceCatalog::refresh_resource_list()
99 {
100   _resource_files_list->clear();
101   std::list<std::string> resource_list = _salome_services->getResourceList(_batch_only);
102   std::list<std::string>::iterator it;
103   for (it = resource_list.begin(); it != resource_list.end(); it++)
104   {
105     std::string resource = *it;
106     _resource_files_list->addItem(QString(resource.c_str()));
107   }
108 }
109
110 void
111 JM::ResourceCatalog::item_choosed(QListWidgetItem * item)
112 {
113   DEBTRACE("JM::ResourceCatalog::item_choosed");
114   JM::SalomeResource * resource_widget = new JM::SalomeResource(this,
115                                                                 _salome_services,
116                                                                 item->text().toUtf8().constData());
117   resource_widget->exec();
118   delete resource_widget;
119 }
120
121 void
122 JM::ResourceCatalog::buttons_management()
123 {
124   QList<QListWidgetItem *> item_list = _resource_files_list->selectedItems();
125   
126   // Test if an item is selected
127   if (item_list.size() == 0)
128   {
129     _show_button->setEnabled(false);
130     _edit_button->setEnabled(false);
131     _remove_button->setEnabled(false);
132   }
133   else
134   {
135     _show_button->setEnabled(true);
136     _edit_button->setEnabled(true);
137     _remove_button->setEnabled(true);
138   }
139 }
140
141 void
142 JM::ResourceCatalog::show_button()
143 {
144   QList<QListWidgetItem *> item_list = _resource_files_list->selectedItems();
145   item_choosed(item_list.at(0));
146 }
147
148 void
149 JM::ResourceCatalog::add_button()
150 {
151   JM::EditSalomeResource * resource_widget = new JM::EditSalomeResource(this,
152                                                                         _salome_services);
153   resource_widget->exec();
154   delete resource_widget;
155   refresh_resource_list();
156 }
157
158 void
159 JM::ResourceCatalog::remove_button()
160 {
161   QList<QListWidgetItem *> item_list = _resource_files_list->selectedItems();
162   QString item_name = item_list.at(0)->text();
163   _salome_services->removeResource(item_name.toUtf8().constData());
164   refresh_resource_list();
165 }
166
167 void
168 JM::ResourceCatalog::edit_button()
169 {
170   QList<QListWidgetItem *> item_list = _resource_files_list->selectedItems();
171   QString item_name = item_list.at(0)->text();
172   JM::EditSalomeResource * resource_widget = new JM::EditSalomeResource(this,
173                                                                         _salome_services,
174                                                                         item_name.toUtf8().constData());
175   resource_widget->exec();
176   delete resource_widget;
177   refresh_resource_list();
178 }