2 Copyright 2008 Free Software Foundation, Inc.
3 This file is part of GNU Radio
5 GNU Radio Companion is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
10 GNU Radio Companion is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
19 ##@package grc.gui.NotebookPage
20 #A page in the notebook, represents an individual flow graph.
23 from grc.Actions import *
27 from grc import ParseXML
28 from grc.StateCache import StateCache
29 from grc.Constants import FLOW_GRAPH_DTD
32 ############################################################
34 ############################################################
37 """A page in the notebook."""
39 def __init__(self, main_window, flow_graph, file_path=''):
42 @param main_window main window
43 @param file_path path to a flow graph file
45 self._flow_graph = flow_graph
48 self.main_window = main_window
49 self.set_file_path(file_path)
50 file_path = file_path or flow_graph.get_parent().get_default_flow_graph()
51 ############################################################
52 from grc import converter
53 converter.convert(file_path, flow_graph.get_parent())
54 ############################################################
55 ParseXML.validate_dtd(file_path, FLOW_GRAPH_DTD)
56 initial_state = ParseXML.from_file(file_path)
57 self.state_cache = StateCache(initial_state)
59 #import the data to the flow graph
60 self.get_flow_graph().import_data(initial_state)
61 self.get_flow_graph().update()
63 gtk.HBox.__init__(self, False, 0)
65 #tab box to hold label and close button
66 self.tab = gtk.HBox(False, 0)
68 self.label = gtk.Label()
69 self.tab.pack_start(self.label, False)
72 image.set_from_stock('gtk-close', gtk.ICON_SIZE_MENU)
74 image_box = gtk.HBox(False, 0)
75 image_box.pack_start(image, True, False, 0)
78 button.connect("clicked", self._handle_button)
79 button.set_relief(gtk.RELIEF_NONE)
82 w, h = gtk.icon_size_lookup_for_settings(button.get_settings(), gtk.ICON_SIZE_MENU)
83 button.set_size_request(w+6, h+6)
84 self.tab.pack_start(button, False)
87 def get_generator(self):
89 Get the generator object for this flow graph.
92 return self.get_flow_graph().get_parent().get_generator()(
93 self.get_flow_graph(),
97 def _handle_button(self, button):
99 The button was clicked.
100 Make the current page selected, then close.
103 self.main_window.page_to_be_closed = self
104 self.main_window.handle_states(FLOW_GRAPH_CLOSE)
106 def set_text(self, text):
108 Set the text in this label.
109 @param text the new text
111 self.label.set_text(text)
115 Get the gtk widget for this page's tab.
122 Get the pid for the flow graph.
123 @return the pid number
127 def set_pid(self, pid):
130 @param pid the new pid number
134 def get_flow_graph(self):
137 @return the flow graph
139 return self._flow_graph
141 def get_file_path(self):
143 Get the file path for the flow graph.
144 @return the file path or ''
146 return self.file_path
148 def set_file_path(self, file_path=''):
150 Set the file path, '' for no file path.
151 @param file_path file path string
153 if file_path: self.file_path = os.path.abspath(file_path)
154 else: self.file_path = ''
158 Get the saved status for the flow graph.
159 @return true if saved
163 def set_saved(self, saved=True):
165 Set the saved status.
166 @param saved boolean status
170 def get_state_cache(self):
172 Get the state cache for the flow graph.
173 @return the state cache
175 return self.state_cache