def new_folder_chooser (self, menuitem, window): dialog = Gtk.FileChooserDialog ("New project", None, Gtk.FileChooserAction.CREATE_FOLDER, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_SAVE, Gtk.ResponseType.OK)) dialog.set_do_overwrite_confirmation (True) response = dialog.run () if response == Gtk.ResponseType.OK: self.listStore.clear () self.projectDir = dialog.get_filename () projectName = GLib.filename_display_basename (self.projectDir) self.projectConfig = dutProject.dutProject (self.projectDir+"/"+projectName+".dut", projectName) self.projectLabel.set_text ("Project: "+projectName) self.enable_buttons () dialog.destroy()
def open_file_chooser (self, menuitem, window): dialog = Gtk.FileChooserDialog ("Open File", None, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) fileFilter = Gtk.FileFilter () fileFilter.set_name ("Dawati User testing project") fileFilter.add_pattern ("*.dut") dialog.add_filter (fileFilter) response = dialog.run () if response == Gtk.ResponseType.OK: projectFile = dialog.get_filename () self.projectDir = GLib.path_get_dirname (projectFile) self.listStore.clear () self.projectConfig = dutProject.dutProject (projectFile, None) self.projectConfig.populate (self, m) dialog.destroy()
def __init__(self): self.primary = None self.secondary = None self.mux = None self.projectDir = None self.projectLabel = None self.listStore = None self.buttonBox = None self.screen = None self.projectConfig = None self.encodeButton = None self.recordButton = None self.mainWindow = None self.updateTimer = None self.encodeQueue = [] self.listItr = None self.currentRecording = None signal.signal(signal.SIGINT, self.close) self.icon = Gtk.StatusIcon (visible=False) self.icon.set_from_stock (Gtk.STOCK_MEDIA_RECORD) self.icon.connect ("activate", self.stop_record) self.mainWindow = Gtk.Window(title="Dawati user testing tool", resizable=False, icon_name=Gtk.STOCK_MEDIA_RECORD) self.mainWindow.connect("destroy", self.on_mainWindow_destroy) outterBoxLayout = Gtk.VBox (spacing=5, homogeneous=False) menu = Gtk.Toolbar () menu.get_style_context ().add_class (Gtk.STYLE_CLASS_PRIMARY_TOOLBAR) fileNew = Gtk.ToolButton.new_from_stock ("gtk-new") fileNew.set_label ("New project") fileNew.set_tooltip_text ("Create a new project") fileNew.connect ("clicked", self.new_folder_chooser, self.mainWindow) fileOpen = Gtk.ToolButton.new_from_stock ("gtk-open") fileOpen.set_label ("Open project") fileOpen.connect ("clicked", self.open_file_chooser, self.mainWindow) fileOpen.set_tooltip_text ("Open an existing project") menu.insert (fileNew, 0) menu.insert (fileOpen, 1) dateLabel = Gtk.Label ("Date") durationLabel = Gtk.Label ("Duration") self.projectLabel = Gtk.Label (halign=Gtk.Align.START) self.projectLabel.set_markup ("<span style='italic'>No project open</span>") self.recordButton = Gtk.Button (label="Create recording", tooltip_text="Create a new recording", sensitive=False) self.recordButton.connect("clicked", self.new_record_button_clicked_cb) self.encodeButton = Gtk.Button (label="Export", tooltip_text="Encode selected sessions", sensitive=False) self.encodeButton.connect("clicked", self.encode_button_clicked_cb) self.recordingDeleteButton = Gtk.Button (label="Delete", tooltip_text="Delete selected sessions", sensitive=False) self.recordingDeleteButton.connect("clicked", self.delete_button_clicked_cb) self.listStore = Gtk.ListStore (str, str, int, bool, bool, int, int, int) recordingsView = Gtk.TreeView (model=self.listStore) recordingsView.connect ("row-activated", self.row_activated) # Column Recording Name recordingTitle = Gtk.CellRendererProgress (text_xalign=0) col1 = Gtk.TreeViewColumn ("Recording name", recordingTitle, text=m.TITLE, value=m.PROGRESS) recordingsView.append_column (col1) # Column Date recordingDate = Gtk.CellRendererText () col2 = Gtk.TreeViewColumn ("Date", recordingDate, text=m.DATE) recordingsView.append_column (col2) # Column Duration recordingDuration = Gtk.CellRendererText (xalign=0) col3 = Gtk.TreeViewColumn ("Duration", recordingDuration, text=m.DURATION) recordingsView.append_column (col3) col3.set_cell_data_func(recordingDuration, lambda column, cell, model, iter, data: cell.set_property('text', str(timedelta (seconds=model.get_value (iter, m.DURATION)))) ) # Column for export recordingExport = Gtk.CellRendererToggle (xalign=0.5) recordingExport.connect ("toggled", self.export_toggled) col4 = Gtk.TreeViewColumn ("Export", recordingExport, active=m.EXPORT) recordingsView.append_column (col4) col4.connect ("notify::x-offset", self.buttons_x_offset) # Column for delete recordingDelete = Gtk.CellRendererToggle (xalign=0.5) recordingDelete.connect ("toggled", self.delete_toggled) col5 = Gtk.TreeViewColumn ("Delete", recordingDelete, active=m.DELETE) recordingsView.append_column (col5) # Box for new recording, export and delete buttons self.buttonBox = Gtk.HBox (spacing=5, homogeneous=False) self.buttonBox.pack_start (self.recordButton, False, False, 3) self.buttonBox.pack_start (self.encodeButton, False, False, 3) self.buttonBox.pack_start (self.recordingDeleteButton, False, False, 3) self.buttonBox.hide () # Box for rest of the UI which doesn't span the whole window innerVbox = Gtk.VBox (spacing=5, homogeneous=False, margin_left=5, margin_right=5) innerVbox.pack_start (self.projectLabel, False, False, 3) innerVbox.pack_start (recordingsView, False, False, 3) innerVbox.pack_start (self.buttonBox, False, False, 3) # Main container in window outterBoxLayout.pack_start (menu, False, False, 3) outterBoxLayout.pack_start (innerVbox, False, False, 3) self.mainWindow.add(outterBoxLayout) self.mainWindow.show_all() self.currentRecording = dutNewRecording.NewRecording (self.mainWindow) self.currentRecording.dialog.connect ("response", self.new_record_setup_done) #argv always contains at least the execuratable as the first item if (len (sys.argv) > 1): #Rudimentary check to see if this is a file we want to open if (sys.argv[1].find (".dut") > 0): self.projectConfig = dutProject.dutProject (sys.argv[1], None) self.projectConfig.populate (self, m) else: print ("Warning: "+sys.argv[1]+" is not a valid Dawati user testing project file (.dut)")