Browse code

Add an open command to the toolbar.

Also change the startup behaviour: to get it to process stdin, pass '-' on
the command line.

From: Marius Gedminas <marius@gedmin.as>

Jose.R.Fonseca authored on 13/07/2008 03:22:27
Showing 1 changed files

  • xdot.py index 58ed3a4..5a34658 100755
... ...
@@ -1096,6 +1096,8 @@ class DotWindow(gtk.Window):
1096 1096
     ui = '''
1097 1097
     <ui>
1098 1098
         <toolbar name="ToolBar">
1099
+            <toolitem action="Open"/>
1100
+            <separator/>
1099 1101
             <toolitem action="ZoomIn"/>
1100 1102
             <toolitem action="ZoomOut"/>
1101 1103
             <toolitem action="ZoomFit"/>
... ...
@@ -1131,6 +1133,7 @@ class DotWindow(gtk.Window):
1131 1133
 
1132 1134
         # Create actions
1133 1135
         actiongroup.add_actions((
1136
+            ('Open', gtk.STOCK_OPEN, None, None, None, self.on_open),
1134 1137
             ('ZoomIn', gtk.STOCK_ZOOM_IN, None, None, None, self.widget.on_zoom_in),
1135 1138
             ('ZoomOut', gtk.STOCK_ZOOM_OUT, None, None, None, self.widget.on_zoom_out),
1136 1139
             ('ZoomFit', gtk.STOCK_ZOOM_FIT, None, None, None, self.widget.on_zoom_fit),
... ...
@@ -1156,6 +1159,38 @@ class DotWindow(gtk.Window):
1156 1159
     def set_dotcode(self, dotcode):
1157 1160
         self.widget.set_dotcode(dotcode)
1158 1161
 
1162
+    def open_file(self, filename):
1163
+        try:
1164
+            fp = file(filename, 'rt')
1165
+            self.set_dotcode(fp.read())
1166
+            fp.close()
1167
+        except IOError:
1168
+            # TODO: show an error message
1169
+            pass
1170
+
1171
+    def on_open(self, action):
1172
+        chooser = gtk.FileChooserDialog(title="Open dot File",
1173
+                                        action=gtk.FILE_CHOOSER_ACTION_OPEN,
1174
+                                        buttons=(gtk.STOCK_CANCEL,
1175
+                                                 gtk.RESPONSE_CANCEL,
1176
+                                                 gtk.STOCK_OPEN,
1177
+                                                 gtk.RESPONSE_OK))
1178
+        chooser.set_default_response(gtk.RESPONSE_OK)
1179
+        filter = gtk.FileFilter()
1180
+        filter.set_name("Graphviz dot files")
1181
+        filter.add_pattern("*.dot")
1182
+        chooser.add_filter(filter)
1183
+        filter = gtk.FileFilter()
1184
+        filter.set_name("All files")
1185
+        filter.add_pattern("*")
1186
+        chooser.add_filter(filter)
1187
+        if chooser.run() == gtk.RESPONSE_OK:
1188
+            filename = chooser.get_filename()
1189
+            chooser.destroy()
1190
+            self.open_file(filename)
1191
+        else:
1192
+            chooser.destroy()
1193
+
1159 1194
 
1160 1195
 def main():
1161 1196
     import optparse
... ...
@@ -1165,17 +1200,16 @@ def main():
1165 1200
         version="%%prog %s" % __version__)
1166 1201
 
1167 1202
     (options, args) = parser.parse_args(sys.argv[1:])
1168
-
1169
-    if len(args) == 0:
1170
-        fp = sys.stdin
1171
-    elif len(args) == 1:
1172
-        fp = file(args[0], 'rt')
1173
-    else:
1203
+    if len(args) > 1:
1174 1204
         parser.error('incorrect number of arguments')
1175 1205
 
1176 1206
     win = DotWindow()
1177
-    win.set_dotcode(fp.read())
1178 1207
     win.connect('destroy', gtk.main_quit)
1208
+    if len(args) >= 1:
1209
+        if args[0] == '-':
1210
+            win.set_dotcode(sys.stdin.read())
1211
+        else:
1212
+            win.open_file(args[0])
1179 1213
     gtk.main()
1180 1214
 
1181 1215