Skip to content
Snippets Groups Projects
Select Git revision
  • a361413865dc97b55b2df4f7725907ddb9c27ac1
  • master default protected
  • develop protected
  • cmake_boost_refactor
  • ubuntu_ci
  • mmtf
  • non-orthogonal-maps
  • no_boost_filesystem
  • data_viewer
  • 2.11.1
  • 2.11.0
  • 2.10.0
  • 2.9.3
  • 2.9.2
  • 2.9.1
  • 2.9.0
  • 2.8.0
  • 2.7.0
  • 2.6.1
  • 2.6.0
  • 2.6.0-rc4
  • 2.6.0-rc3
  • 2.6.0-rc2
  • 2.6.0-rc
  • 2.5.0
  • 2.5.0-rc2
  • 2.5.0-rc
  • 2.4.0
  • 2.4.0-rc2
29 results

compare_files.hh

Blame
  • loader_manager_widget.py 7.42 KiB
    #------------------------------------------------------------------------------
    # This file is part of the OpenStructure project <www.openstructure.org>
    #
    # Copyright (C) 2008-2010 by the OpenStructure authors
    #
    # This library is free software; you can redistribute it and/or modify it under
    # the terms of the GNU Lesser General Public License as published by the Free
    # Software Foundation; either version 3.0 of the License, or (at your option)
    # any later version.
    # This library 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 Lesser General Public License for more
    # details.
    #
    # You should have received a copy of the GNU Lesser General Public License
    # along with this library; if not, write to the Free Software Foundation, Inc.,
    # 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    #------------------------------------------------------------------------------
    # -*- coding: utf-8 -*-
    
    import os
    import ost
    from ost import gui
    from ost import gfx
    from datetime import datetime
    from PyQt4 import QtCore, QtGui
    
    from loader_list_model import LoaderListModel
    from file_loader import GenericLoader
    
    #Gradient Preset Widget
    class LoaderManagerWidget(QtGui.QDialog):
      ICONS_DIR = os.path.join(ost.GetSharedDataPath(), "gui", "icons/")
      def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        
        #Title
        self.text_ = "Loader Manager"
            
        #Create Ui elements
        self.list_view_ = QtGui.QListView()
        
        #Create Model
        self.list_model_ = LoaderListModel(self)
        self.list_view_.setModel(self.list_model_)
        self.list_view_.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
            
        loader_label = QtGui.QLabel(self.text_)
        font = loader_label.font()
        font.setBold(True)
        
        self.add_action = QtGui.QAction("+",self)
        self.add_action.setIcon(QtGui.QIcon(LoaderManagerWidget.ICONS_DIR+"add_icon.png"))
        
        QtCore.QObject.connect(self.add_action, QtCore.SIGNAL("triggered()"), self.Add)
        
        self.add_button_ = QtGui.QToolButton(self)
        self.add_button_.setIconSize(QtCore.QSize(20,20))
        self.add_button_.setDefaultAction(self.add_action)
            
        grid = QtGui.QGridLayout()
        grid.setContentsMargins(0,5,0,0)
        grid.addWidget(loader_label, 0, 0, 1, 1)
        qhbox = QtGui.QHBoxLayout()
        grid.addWidget(self.list_view_,1,0,3,3)
        grid.addWidget(self.add_button_,4,0,1,1)
        self.setLayout(grid)
        
        self.list_view_.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        QtCore.QObject.connect(self.list_view_, QtCore.SIGNAL("customContextMenuRequested(const QPoint)"), self.contextMenuEvent)
        self.CreateContextMenu()
    
        QtCore.QObject.connect(self.list_view_, QtCore.SIGNAL("doubleClicked(const QModelIndex)"), self.Edit)
    
      def CreateContextMenu(self):
        self.contextMenu_ = QtGui.QMenu("Context menu", self)
        self.remove_ = QtGui.QAction("Remove", self.list_view_)
        self.rename_ = QtGui.QAction("Rename", self.list_view_)
        self.edit_ = QtGui.QAction("Edit", self.list_view_)
        self.contextMenu_.addAction(self.remove_)
        self.contextMenu_.addAction(self.rename_)
        self.contextMenu_.addAction(self.edit_)
        #Connect Signals with Slots  
        QtCore.QObject.connect(self.remove_, QtCore.SIGNAL("triggered()"), self.Remove)
        QtCore.QObject.connect(self.rename_, QtCore.SIGNAL("triggered()"), self.Rename)
        QtCore.QObject.connect(self.edit_, QtCore.SIGNAL("triggered()"), self.Edit)
      
      def contextMenuEvent(self, pos):
        #ContextMenu
        index = self.list_view_.indexAt(pos)
        if index.isValid(): 
          if self.list_model_.IsEditable(index.row()):
            self.contextMenu_.popup(QtGui.QCursor.pos())
      
      def Add(self):
        row = self.list_model_.GetLastRow()
        edit_widget = LoaderEditWidget()
        
        if edit_widget.exec_() and self.list_model_.AddItem(datetime.now().isoformat(' '), edit_widget.GetLoader(), row, True, True):
          index = self.list_model_.index(row)
          self.list_view_.setCurrentIndex(index)
          self.Rename()
        
      def Edit(self):
        current_index = self.list_view_.currentIndex()
        loader = self.list_model_.GetLoader(current_index)
        edit_widget = LoaderEditWidget()
        edit_widget.SetLoader(loader)
        if edit_widget.exec_():
          self.list_model_.SetItem(current_index, edit_widget.GetLoader())
        
          
      def Remove(self):
        if(self.list_view_.currentIndex().isValid()):
          ret = QtGui.QMessageBox.warning(self, "Delete File Loader",
                       "Delete File Loader?",
                       QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
          if ret == QtGui.QMessageBox.Yes:
            self.list_model_.RemoveItem(self.list_view_.currentIndex().row())
    
      def Rename(self):
        if(self.list_view_.currentIndex().isValid()):
          self.list_view_.edit(self.list_view_.currentIndex())
          
      def GetText(self):
        return self.text_
          
    
    
    
    class LoaderEditWidget(QtGui.QDialog):
      def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        name_ext_label = QtGui.QLabel("Name Extension")
        self.name_ext_edit_ = QtGui.QLineEdit()
        
        url_label = QtGui.QLabel("Url")
        self.url_edit_ = QtGui.QLineEdit()
        self.add_id_button_ = QtGui.QToolButton(self)
        self.add_id_button_.setDefaultAction(QtGui.QAction("ID",self))
         
        file_ext_label = QtGui.QLabel("File Type")
        self.file_ext_auto_ = QtGui.QCheckBox("Auto")    
        self.file_ext_edit_ = QtGui.QLineEdit()
        
        self.hbox_ = QtGui.QHBoxLayout()
        self.ok_button_ = QtGui.QPushButton("OK")
        self.cancel_button_ = QtGui.QPushButton("Cancel")
        self.hbox_.addWidget(self.ok_button_)
        self.hbox_.addStretch()
        self.hbox_.addWidget(self.cancel_button_)
        
        grid = QtGui.QGridLayout()
        grid.setContentsMargins(0,5,0,0)
        grid.addWidget(name_ext_label, 0, 0, 1, 1)
        grid.addWidget(self.name_ext_edit_, 0, 1, 1, 4)
        grid.addWidget(url_label, 1, 0, 1, 1)
        grid.addWidget(self.url_edit_, 1, 1, 1, 3)
        grid.addWidget(self.add_id_button_, 1, 4, 1, 1)
        grid.addWidget(file_ext_label, 2, 0, 1, 1)
        grid.addWidget(self.file_ext_auto_, 2, 1, 1, 1)
        grid.addWidget(self.file_ext_edit_, 2, 2, 1, 3)
        grid.addLayout(self.hbox_,3,0,1,2)
        grid.setRowStretch(2, 1)
        self.setLayout(grid)
        
        QtCore.QObject.connect(self.add_id_button_, QtCore.SIGNAL("clicked()"), self.AppendId)
        QtCore.QObject.connect(self.file_ext_auto_, QtCore.SIGNAL("stateChanged(int)"), self.CbStateChanged)
        QtCore.QObject.connect(self.ok_button_, QtCore.SIGNAL("clicked()"), self.Ok)
        QtCore.QObject.connect(self.cancel_button_, QtCore.SIGNAL("clicked()"), self.Cancel)
            
      def GetLoader(self):
        name_ext = str(self.name_ext_edit_.text())
        url = str(self.url_edit_.text())
        file_ext = None
        if not self.file_ext_auto_.isChecked():
          file_ext = str(self.file_ext_edit_.text())
        
        return GenericLoader(name_ext, url, False, file_ext)
    
      def SetLoader(self, loader):
        self.name_ext_edit_.setText(loader.name_)
        self.url_edit_.setText(loader.url_)
        if loader.file_type_ is not None:
          self.file_ext_edit_.setText(loader.file_type_)
          self.file_ext_auto_.setChecked(False)
        else:
          self.file_ext_auto_.setChecked(True)
      def AppendId(self):
        self.url_edit_.setText(self.url_edit_.text()+"${ID}")
    
      def CbStateChanged(self, state):
          self.file_ext_edit_.setEnabled(not self.file_ext_auto_.isChecked())
          
      def Ok(self):
        self.accept()
        
      def Cancel(self):
        self.reject()