// src/schedulables_tree_widget.hh - Copyright 2005, 2006, University // of Padova, dept. of Pure and Applied // Mathematics // // This file is part of SGPEMv2. // // This 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 2 of the License, or // (at your option) any later version. // // SGPEMv2 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 SGPEMv2; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #ifndef SCHEDULABLES_TREE_WIDGET_HH #define SCHEDULABLES_TREE_WIDGET_HH 1 namespace sgpem { class Schedulable; class Process; class Thread; class AddRequestDialog; class Request; } #include "config.h" #include #include #include #include #include #include #include #include #include #include #include namespace sgpem { /** \brief Temporary class to be used to proceed with the development of the GUI until the cairo-based widget are fully working */ class SchedulablesTreeWidget : public Gtk::TreeView, public HistoryObserver { public: SchedulablesTreeWidget(); virtual ~SchedulablesTreeWidget(); virtual void update(const History& history); virtual bool on_button_press_event(GdkEventButton* event); private: enum HandleType { htype_process, htype_thread, htype_request, // htype_subrequest, htype_undefined }; class CellRendererTextMarkup : public Gtk::CellRendererText { public: Glib::PropertyProxy_Base _property_renderable(); }; template bool check_type(HandleType type); template T* get_selected(); template T* get_row_handle_as(const Gtk::TreeModel::iterator& row); HandleType get_selection_type(); HandleType get_row_type(const Gtk::TreeModel::iterator& row); void _on_add_process(); void _on_add_thread(); void _on_add_request(); void _on_edit_process(); void _on_edit_thread(); void _on_edit_request(); void add_edit_process(bool adding); void add_edit_thread(bool adding); void _on_remove_process(); void _on_remove_thread(); void _on_remove_request(); void _on_arrival_column_data(Gtk::CellRenderer* cr, const Gtk::TreeModel::iterator& it); void _on_entity_column_data(Gtk::CellRenderer* cr, const Gtk::TreeModel::iterator& it); void _on_state_column_data(Gtk::CellRenderer* cr, const Gtk::TreeModel::iterator& it); Glib::ustring markup_schedulable(const Schedulable& s); Glib::ustring markup_request(Request& s); Glib::ustring state_text(Schedulable::state state); Glib::ustring state_text(Request::state state); Glib::RefPtr _model; Gtk::TreeModelColumnRecord _columns; Gtk::TreeModelColumn _main_column; Gtk::TreeModelColumn _types_column; Gtk::TreeModelColumn _handles_column; Glib::RefPtr _UIManager; CellRendererTextMarkup _cell_renderer; void _update_expanded_vector(Gtk::TreeView* tree_view, const Gtk::TreeModel::Path& path); std::vector _expanded_rows; }; } //~ namespace sgpem #endif //~ SCHEDULABLES_TREE_WIDGET_HH