/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ /* * stage-tab.cc * Copyright (C) 2017 Unknown * * 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 . */ #include "stage-tab.h" #include "stage.h" #include "g-window.h" #include "resource-tab.h" #include "utils.h" #include 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; im_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