Salome HOME
d9fe55074896d970d3e252d82b73e88ff0d1216d
[modules/jobmanager.git] / src / genericgui / JM_ResourceCatalog.cxx
1 // Copyright (C) 2009-2013  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.
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 JM::ResourceCatalog::ResourceCatalog(QWidget *parent, BL::SALOMEServices * salome_services, bool batch_only)
26 : QWidget(parent),
27   _batch_only(batch_only)
28 {
29   DEBTRACE("Creating JM::ResourceCatalog");
30   BL_ASSERT(parent);
31   BL_ASSERT(salome_services);
32   _parent = parent;
33   _salome_services = salome_services;
34
35   _refresh_button = new QPushButton("Refresh Resource List");
36   _refresh_button->show();
37   _resource_files_list = new QListWidget(this);
38   _resource_files_list->setSelectionMode(QAbstractItemView::SingleSelection);
39   std::list<std::string> resource_list = _salome_services->getResourceList(_batch_only);
40   std::list<std::string>::iterator it;
41   for (it = resource_list.begin(); it != resource_list.end(); it++)
42   {
43     std::string resource = *it;
44     _resource_files_list->addItem(QString(resource.c_str()));
45   }
46
47   _show_button = new QPushButton("Show");
48   _show_button->setEnabled(false);
49   _edit_button = new QPushButton("Edit");
50   _edit_button->setEnabled(false);
51   _add_button = new QPushButton("Add");
52   _remove_button = new QPushButton("Remove");
53   _remove_button->setEnabled(false);
54
55   QHBoxLayout * button_layout = new QHBoxLayout(this);
56   button_layout->addWidget(_show_button);
57   button_layout->addWidget(_edit_button);
58   button_layout->addWidget(_add_button);
59   button_layout->addWidget(_remove_button);
60   QWidget * layout_widget = new QWidget(this);
61   layout_widget->setLayout(button_layout);
62
63   QVBoxLayout * mainLayout = new QVBoxLayout(this);
64   mainLayout->addWidget(_refresh_button);
65   mainLayout->addWidget(_resource_files_list);
66   mainLayout->addWidget(layout_widget);
67   setLayout(mainLayout);
68
69   // Buttons
70   connect(_refresh_button, SIGNAL(clicked()), this, SLOT(refresh_resource_list()));
71   connect(_show_button, SIGNAL(clicked()), this, SLOT(show_button()));
72   connect(_edit_button, SIGNAL(clicked()), this, SLOT(edit_button()));
73   connect(_add_button, SIGNAL(clicked()), this, SLOT(add_button()));
74   connect(_remove_button, SIGNAL(clicked()), this, SLOT(remove_button()));
75   // Double click on an item
76   connect(_resource_files_list, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(item_choosed(QListWidgetItem*)));
77   // Selection management
78   connect(_resource_files_list, SIGNAL(itemSelectionChanged()), this, SLOT(buttons_management()));
79 }
80
81 JM::ResourceCatalog::~ResourceCatalog()
82 {
83   DEBTRACE("Destroying JM::ResourceCatalog");
84 }
85
86 QListWidget * 
87 JM::ResourceCatalog::getQListWidget()
88 {
89   return _resource_files_list;
90 }
91
92 void
93 JM::ResourceCatalog::refresh_resource_list()
94 {
95   _resource_files_list->clear();
96   std::list<std::string> resource_list = _salome_services->getResourceList(_batch_only);
97   std::list<std::string>::iterator it;
98   for (it = resource_list.begin(); it != resource_list.end(); it++)
99   {
100     std::string resource = *it;
101     _resource_files_list->addItem(QString(resource.c_str()));
102   }
103 }
104
105 void
106 JM::ResourceCatalog::item_choosed(QListWidgetItem * item)
107 {
108   DEBTRACE("JM::ResourceCatalog::item_choosed");
109   JM::SalomeResource * resource_widget = new JM::SalomeResource(this,
110                                                                 _salome_services,
111                                                                 item->text().toStdString());
112   resource_widget->exec();
113   delete resource_widget;
114 }
115
116 void
117 JM::ResourceCatalog::buttons_management()
118 {
119   QList<QListWidgetItem *> item_list = _resource_files_list->selectedItems();
120   
121   // Test if an item is selected
122   if (item_list.size() == 0)
123   {
124     _show_button->setEnabled(false);
125     _edit_button->setEnabled(false);
126     _remove_button->setEnabled(false);
127   }
128   else
129   {
130     _show_button->setEnabled(true);
131     _edit_button->setEnabled(true);
132     _remove_button->setEnabled(true);
133   }
134 }
135
136 void
137 JM::ResourceCatalog::show_button()
138 {
139   QList<QListWidgetItem *> item_list = _resource_files_list->selectedItems();
140   item_choosed(item_list.at(0));
141 }
142
143 void
144 JM::ResourceCatalog::add_button()
145 {
146   JM::EditSalomeResource * resource_widget = new JM::EditSalomeResource(this,
147                                                                         _salome_services);
148   resource_widget->exec();
149   delete resource_widget;
150   refresh_resource_list();
151 }
152
153 void
154 JM::ResourceCatalog::remove_button()
155 {
156   QList<QListWidgetItem *> item_list = _resource_files_list->selectedItems();
157   QString item_name = item_list.at(0)->text();
158   _salome_services->removeResource(item_name.toStdString());
159   refresh_resource_list();
160 }
161
162 void
163 JM::ResourceCatalog::edit_button()
164 {
165   QList<QListWidgetItem *> item_list = _resource_files_list->selectedItems();
166   QString item_name = item_list.at(0)->text();
167   JM::EditSalomeResource * resource_widget = new JM::EditSalomeResource(this,
168                                                                         _salome_services,
169                                                                         item_name.toStdString());
170   resource_widget->exec();
171   delete resource_widget;
172   refresh_resource_list();
173 }