123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
- /*
- * stage-tab.cc
- * Copyright (C) 2017 Unknown <francois@gautrais.eu>
- *
- * histodexc is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * histodexc is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- #include "stage-tab.h"
- #include "stage.h"
- #include "g-window.h"
- #include "resource-tab.h"
- #include "utils.h"
- #include <cstdlib>
- static void on_save_clicked(GtkWidget* gtk, gpointer ud)
- {
- //printf("Save clicked\n");
- StageTab* z = (StageTab*) ((CallbackArg*)ud)->tab;
- z->on_save_clicked ();
- }
- static void on_click_res(GtkButton* gtk, gpointer ud)
- {
- //printf("Click res\n");
- StageTab* z = (StageTab*) ((CallbackArg*)ud)->tab;
- z->on_click_res ();
- }
- static void on_select(GtkTreeView* b, gpointer ud)
- {
- //printf("Select\n");
- StageTab* z = (StageTab*) ((CallbackArg*)ud)->tab;
- z->on_select ();
- }
- static void on_select_res(GtkTreeView* b, gpointer ud)
- {
- //printf("Select res\n");
- StageTab* z = (StageTab*) ((CallbackArg*)ud)->tab;
- z->on_select_res ();
- }
- StageTab::StageTab(GtkWidget *window, GtkBuilder *builder, ResourceTab* tab)
- : Tab(window, builder)
- {
- CallbackArg* mca = new CallbackArg (this);
- m_lock = false;
- m_resTab=tab;
- m_root=GTK_BOX(gtk_builder_get_object(m_builder, "box_root"));
- m_list=GTK_TREE_VIEW(gtk_builder_get_object(m_builder, "tv_stage"));
- m_listRes=GTK_TREE_VIEW(gtk_builder_get_object(m_builder, "tv_stage_res"));
- m_devRes=GTK_BUTTON(gtk_builder_get_object(m_builder, "stage_dev_res"));
- m_resource=GTK_ENTRY(gtk_builder_get_object(m_builder, "entry_sta_resource"));
- m_nRes=GTK_SPIN_BUTTON(gtk_builder_get_object(m_builder, "spin_sta_res"));
- CONNECT(m_devRes, "clicked", ::on_click_res, mca);
- CONNECT(m_nRes, "value-changed", ::on_save_clicked, mca);
- CONNECT(m_resource, "changed", ::on_save_clicked, mca);
- m_listStore=GTK_LIST_STORE(gtk_builder_get_object(m_builder, "liststore3"));
- m_listResStore=m_resTab->getModel();
- gtk_tree_view_set_model (m_listRes, GTK_TREE_MODEL(m_listResStore));
- CONNECT(m_list, "cursor-changed", ::on_select, mca);
- CONNECT(m_listRes, "cursor-changed", ::on_select_res, mca);
- gtk_widget_hide(GTK_WIDGET(m_listRes));
- }
- StageTab::~StageTab()
- {
-
- }
- void StageTab::on_click_res()
- {
- if(gtk_widget_is_visible (GTK_WIDGET(m_listRes)))
- gtk_widget_hide(GTK_WIDGET(m_listRes));
- else
- gtk_widget_show(GTK_WIDGET(m_listRes));
- }
- void StageTab::on_select_res()
- {
- bool exists;
- std::string name;
- name=gtk_tree_view_get_str_selected(m_listRes, &exists);
-
- if(exists)
- {
- gtk_entry_set_text (m_resource, name.c_str());
- gtk_widget_show_all (GTK_WIDGET(m_root));
- }
- else
- {
- }
- }
- void StageTab::on_save_clicked()
- {
-
- bool exists;
- std::string old;
- old=gtk_tree_view_get_str_selected(m_list, &exists);
- Stage* s=NULL;
-
- if(m_lock) return ;
- for(int i=0; i< m_stages.size(); i++)
- {
- char tmp[16];
- sprintf(tmp, "%d", i+1);
- if(old==tmp)
- {
- s=&m_stages[i];
- //std::cout << " Stage " << m_stages[i].getResource() << std::endl;
- s->setResource (gtk_entry_get_text(m_resource));
- s->setNRes (gtk_spin_button_get_value (m_nRes));
- }
- }
- }
- void StageTab::on_select()
- {
- bool exists;
- std::string name;
- name=gtk_tree_view_get_str_selected(m_list, &exists);
- if(exists)
- {
- int x = atoi(name.c_str())-1;
-
- setupTab(m_stages[x]);
- gtk_widget_show_all (GTK_WIDGET(m_root));
- }
- else
- {
- gtk_widget_hide (GTK_WIDGET(m_root));
- }
- }
- void StageTab::open(Json::Value& val)
- {
- gtk_list_store_clear (m_listStore);
- m_stages.clear();
- gtk_widget_hide (GTK_WIDGET(m_root));
- for (Json::Value::iterator it = val.begin(); it != val.end(); ++it) {
- Json::Value v = (*it);
- Stage r(v);
- insert(v["stage"].asInt(), &r);
- }
- gtk_widget_hide (GTK_WIDGET(m_root));
- }
- Json::Value StageTab::getJson(bool b)
- {
- Json::Value v(Json::arrayValue);
- for(int i=0; i<m_stages.size(); i++)
- v[i]=m_stages[i].getJson();
- return v;
- }
- void StageTab::setNStage(int n)
- {
- if(n>m_stages.size())
- {
- while( n>m_stages.size() )
- {
- Stage s;
- s.setStage(m_stages.size()+1);
- s.setResource ("");
- insert (m_stages.size()+1, &s);
- }
- }else if(n<m_stages.size())
- {
- while( n<m_stages.size() )
- removeLast();
- }
- }
- void StageTab::setupTab(Data& _s)
- {
- Stage& s = Stage::cast(_s);
- m_lock = true;
- gtk_spin_button_set_value(m_nRes, s.getNRes ());
- gtk_entry_set_text(m_resource, s.getResource ().c_str());
- m_lock = false;
- }
- void StageTab::insert(int n, Stage* ra)
- {
- GtkTreeSelection* sel = gtk_tree_view_get_selection (m_list);
- GtkTreeIter app;
- Stage r;
- gtk_tree_model_get_iter_last (GTK_TREE_MODEL(m_listStore), &app);
- r.setStage(n);
- if(!ra) ra=&r;
- gtk_list_store_append(m_listStore, &app);
- gtk_list_store_set(m_listStore, &app, 0, tstr(n).c_str(), -1);
- m_stages.push_back(*ra);
- gtk_tree_selection_select_iter(sel, &app);
- on_select();
- }
- void StageTab::removeLast()
- {
- GtkTreeIter iter;
- int n;
- n=gtk_tree_model_iter_n_children (GTK_TREE_MODEL(m_listStore), NULL);
- if(gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(m_listStore), &iter, NULL, n-1))
- {
- gtk_list_store_remove (m_listStore, &iter);
- m_stages.erase(m_stages.begin() + m_stages.size()-1);
- }
- }
- Data& StageTab::getTab(bool& b)
- {
- static Stage s;
- return s;
- }
- void StageTab::write(const std::string& file)
- {
- }
|