Ejemplo n.º 1
0
 def __init__(self, parent = None):
     """
     Constructor
     
     @param parent reference to the parent widget (QWidget)
     """
     QToolBox.__init__(self, parent)
Ejemplo n.º 2
0
    def __init__(self, dockwidget):
        super(QuickInsert, self).__init__(dockwidget)
        self._dockwidget = weakref.ref(dockwidget)
        # filled in by ButtonGroup subclasses
        self.actionDict = {}

        layout = QVBoxLayout()
        self.setLayout(layout)
        layout.setContentsMargins(0, 0, 0, 0)

        self.helpButton = QToolButton(
            icon=icons.get("help-contents"),
            autoRaise=True,
            clicked=lambda: userguide.show("quickinsert"))
        self.directionLabel = QLabel()
        self.direction = QComboBox()
        self.direction.addItems(['', '', ''])
        self.direction.setItemIcon(0, icons.get("go-up"))
        self.direction.setItemIcon(2, icons.get("go-down"))
        self.direction.setCurrentIndex(1)
        hor = QHBoxLayout()
        hor.setContentsMargins(0, 0, 0, 0)
        hor.addWidget(self.helpButton)
        hor.addWidget(self.directionLabel)
        hor.addWidget(self.direction)
        layout.addLayout(hor)

        self.toolbox = QToolBox(self)
        widgets.toolboxwheeler.ToolBoxWheeler(self.toolbox)
        layout.addWidget(self.toolbox)

        for cls in (
                articulations.Articulations,
                dynamics.Dynamics,
                spanners.Spanners,
                barlines.BarLines,
        ):
            widget = cls(self)
            self.toolbox.addItem(widget, widget.icon(), '')

        app.translateUI(self)
        userguide.openWhatsThis(self)

        # restore remembered current page
        name = QSettings().value("quickinsert/current_tool", "", type(""))
        if name:
            for i in range(self.toolbox.count()):
                if name == self.toolbox.widget(i).__class__.__name__.lower():
                    self.toolbox.setCurrentIndex(i)
                    break
        self.toolbox.currentChanged.connect(self.slotCurrentChanged)
Ejemplo n.º 3
0
	def __init__(self, template, character, parent=None):
		super(FlawWidget, self).__init__(parent)

		self.__storage = template
		self.__character = character

		self.__layout = QVBoxLayout()
		self.setLayout( self.__layout )

		self.__toolBox = QToolBox()
		## Die Auflistung der Merits soll auch unter Windows einen transparenten Hintergrund haben.
		self.__toolBox.setObjectName("transparentWidget")
		## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen.
		if os.name == "nt":
			self.__toolBox.setStyleSheet( "QScrollArea{ background: transparent; } QWidget#transparentWidget { background: transparent; }" )
		self.__layout.addWidget(self.__toolBox)

		self.__typ = "Flaw"
		categories = []
		categories.extend(Config.CATEGORIES_FLAWS)
		categories.extend(self.__storage.categories(self.__typ))
		# Duplikate werden entfernt. Dadurch wird die in der Config-Klasse vorgegebene Reihenfolge eingehalten und zusätzliche, dort nicht erwähnte Kategorien werden hinterher angehängt.
		categories = ListTools.uniqify_ordered(categories)

		# Diese Liste speichert den Index der ToolBox-Seite bei den unterschiedlichen Kategorien
		self.__categoryIndex = {}

		# Flaws werden in einer Spalte heruntergeschrieben, aber mit vertikalem Platz dazwischen.
		for item in categories:
			# Für jede Kategorie wird ein eigener Abschnitt erzeugt.
			widgetFlawCategory = QWidget()
			## Dank des Namens übernimmt dieses Widget den Stil des Eltern-Widgets.
			widgetFlawCategory.setObjectName("transparentWidget")

			layoutFlawCategory = QVBoxLayout()

			widgetFlawCategory.setLayout( layoutFlawCategory )

			self.__toolBox.addItem( widgetFlawCategory, item )
			self.__categoryIndex[item] = self.__toolBox.count() - 1
			#Debug.debug(self.__categoryIndex)

			__list = list( self.__character.traits[self.__typ][item].items() )
			__list.sort()
			for flaw in __list:
				# Anlegen des Widgets, das diese Eigenschaft repräsentiert.
				traitWidget = CheckTrait( flaw[1], self )
				if not flaw[1].custom:
					traitWidget.setDescriptionHidden(True)

				layoutFlawCategory.addWidget( traitWidget )

				flaw[1].valueChanged.connect(self.countItems)
				self.__character.speciesChanged.connect(traitWidget.hideOrShowTrait)


			# Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
			layoutFlawCategory.addStretch()

		self.setMinimumWidth(Config.TRAIT_WIDTH_MIN)
Ejemplo n.º 4
0
 def __init__(self, toolWidget):
     self.toolWidget = toolWidget
     self.tool = toolWidget.tool
     self.mainwin = toolWidget.tool.mainwin
     QToolBox.__init__(self, toolWidget)
     SymbolManager.__init__(self)
     UserShortcutDispatcher.__init__(self, self.mainwin.quickInsertShortcuts)
     self.widgets = [
         Articulations(self),
         Dynamics(self),
         Spanners(self),
         BarLines(self),
     ]
     self.mainwin.aboutToClose.connect(self.saveSettings)
     self.loadSettings()
     self._wheeldelta = 0
Ejemplo n.º 5
0
 def __init__(self, dockwidget):
     super(QuickInsert, self).__init__(dockwidget)
     self._dockwidget = weakref.ref(dockwidget)
     # filled in by ButtonGroup subclasses
     self.actionDict = {}
     
     layout = QVBoxLayout()
     self.setLayout(layout)
     layout.setContentsMargins(0, 0, 0, 0)
     
     self.helpButton = QToolButton(
         icon = icons.get("help-contents"),
         autoRaise = True,
         clicked = lambda: userguide.show("quickinsert"))
     self.directionLabel = QLabel()
     self.direction = QComboBox()
     self.direction.addItems(['', '', ''])
     self.direction.setItemIcon(0, icons.get("go-up"))
     self.direction.setItemIcon(2, icons.get("go-down"))
     self.direction.setCurrentIndex(1)
     hor = QHBoxLayout()
     hor.setContentsMargins(0, 0, 0, 0)
     hor.addWidget(self.helpButton)
     hor.addWidget(self.directionLabel)
     hor.addWidget(self.direction)
     layout.addLayout(hor)
     
     self.toolbox = QToolBox(self)
     widgets.toolboxwheeler.ToolBoxWheeler(self.toolbox)
     layout.addWidget(self.toolbox)
     
     for cls in (
             articulations.Articulations,
             dynamics.Dynamics,
             spanners.Spanners,
             barlines.BarLines,
         ):
         widget = cls(self)
         self.toolbox.addItem(widget, widget.icon(), '')
     
     app.translateUI(self)
     userguide.openWhatsThis(self)
     
     # restore remembered current page
     name = QSettings().value("quickinsert/current_tool", "", type(""))
     if name:
         for i in range(self.toolbox.count()):
             if name == self.toolbox.widget(i).__class__.__name__.lower():
                 self.toolbox.setCurrentIndex(i)
                 break
     self.toolbox.currentChanged.connect(self.slotCurrentChanged)
Ejemplo n.º 6
0
    def setup_simulation_tab(self):

        simulWidget = QWidget()
        simulLayout = QGridLayout()

        simulToolBox = QToolBox()

        simulToolBox.addItem(self.setup_analformula_tb(), "Analytical formula")
        simulToolBox.addItem(self.setup_geogrparams_tb(),
                             "Geographic parameters")
        simulToolBox.addItem(self.setup_output_tb(), "Output")

        simulLayout.addWidget(simulToolBox, 0, 0, 1, 2)

        simulWidget.setLayout(simulLayout)

        return simulWidget
 def _createCategoryView(self):
     self._clearCurrentView()
     
     self._currentToolBox = QToolBox(self)
     self._currentToolBox.setAutoFillBackground(False)
     for category in self._action.getPrivacyCategories():
         self._createAndInsertSingleView(category, -1)
     
     peerExceptions = SingleCategoryView(self._action, self._currentToolBox, self.logger, category=None, mode=PrivacySettings.POLICY_PEER_EXCEPTION)
     self._currentSingleViews[self._PEER_EXCEPTIONS_VIEW] = peerExceptions
     self._currentToolBox.addItem(peerExceptions, "Special Peers")
     
     w = QScrollArea(self)
     w.setAutoFillBackground(False)
     w.viewport().setAutoFillBackground(False)
     w.setWidgetResizable(True)
     w.setWidget(self._currentToolBox)
     w.setFrameShape(QFrame.NoFrame)
     self._settingsWidget.layout().addWidget(w)
Ejemplo n.º 8
0
    def setup_simulation_tab( self ):
        
        simulWidget = QWidget()  
        simulLayout = QGridLayout( )

        simulToolBox = QToolBox()

        simulToolBox.addItem( self.setup_analformula_tb(), 
                                 "Analytical formula" )         
        simulToolBox.addItem( self.setup_geogrparams_tb(), 
                                 "Geographic parameters" )
        simulToolBox.addItem( self.setup_output_tb(), 
                                 "Output" )
                
        simulLayout.addWidget( simulToolBox, 0, 0, 1, 2 )
                                                           
        simulWidget.setLayout(simulLayout)  
                
        return simulWidget 
	def __init__(self, parent = None):
		QDockWidget.__init__(self, "Herramientas", parent)
		self.setObjectName("ToolBoxDock")

		self.setAllowedAreas( self.left | self.right )
		self.setGeometry(0,0,200,1000)

		tb = QToolBox(self)
		#esta es la manera de crear una nueva entrada para toolbox
		##BASICOS
		widget_ba = QWidget(self)
		caja_ba = QVBoxLayout(widget_ba)
		widget_ba.setLayout(caja_ba)
		tb.addItem(widget_ba, "Modulos basicos")
		caja_ba.addWidget(labmod("Entrada"))
		caja_ba.addWidget(labmod("Salida", "args[0]"))
		caja_ba.addWidget(labmod("Simple", ""))
		caja_ba.addWidget(labmod("Compuesto", "submodel"))
		caja_ba.addWidget(labmod("Bucle", "times"))

		##OPERACIONES BASICAS
		widget_op = QWidget(self)
		caja_op = QVBoxLayout(widget_op)
		widget_op.setLayout(caja_op)
		tb.addItem(widget_op, "Op elementales")
		#esta es la forma de añadir un nuevo toolbutton al toolbox en un desplegable en concreto
		caja_op.addWidget(labmod("Suma", "args[0]+args[1]"))
		caja_op.addWidget(labmod("Resta", "args[0]-args[1]"))
		caja_op.addWidget(labmod("Producto", "args[0]*args[1]"))
		caja_op.addWidget(labmod("Division", "args[0]/args[1]"))
		caja_op.addWidget(labmod("Resto", "args[0]%args[1]"))
		caja_op.addWidget(labmod("Sustitucion", "V = [1,2,3]\nV[args[0]%len(V)]"))

		#OPERACIONES A NIVEL DE BIT
		widget_bit  = QWidget(self)
		caja_bit = QVBoxLayout(widget_bit)
		widget_bit.setLayout(caja_bit)
		tb.addItem(widget_bit, "Op a nivel de bit")
		caja_bit.addWidget(labmod("AND", "args[0]&args[1]"))
		caja_bit.addWidget(labmod("OR", "args[0]|args[1]"))
		caja_bit.addWidget(labmod("XOR", "args[0]^args[1]"))
		caja_bit.addWidget(labmod("NOT", "~args[0]"))
		caja_bit.addWidget(labmod("DesplazaIzda", "args[0]<<args[1]"))
		caja_bit.addWidget(labmod("DesplazaDcha", "args[0]>>args[1]"))
		caja_bit.addWidget(labmod("RotacionIzda", "def f(n,d,b):\n\tm=0\n\tfor el in range(b):\n\t\tm+=1<<el\n\tfor el in range(d):\n\t\tn=((n<<1)&m)+(((n<<1)&(1<<b))>>(b))\n\treturn n\nf(args[0],args[1],args[2])"))
		caja_bit.addWidget(labmod("RotacionDcha", "def f(n,d,b):\n\tfor el in range(d):\n\t\tn=(n>>1)+((n&1)<<(b-1))\n\treturn n\nf(args[0],args[1],args[2])"))
		caja_bit.addWidget(labmod("Permutacion", "def f(argv):\n\tv=argv[0]\n\tv=v>>argv[1]\n\tv=v&1\n\treturn v\nV=[4,3,2,1]\nt=0\nfor i in range(len(V)):\n\tt+=(f([args[0], V[i]-1])<<i)\nt"))

		#OPERACIONES MODULARES
		widget_bit  = QWidget(self)
		caja_bit = QVBoxLayout(widget_bit)
		widget_bit.setLayout(caja_bit)
		tb.addItem(widget_bit, "Op modulares")
		caja_bit.addWidget(labmod("SumaM", "(args[0]+args[1])%args[2]"))
		caja_bit.addWidget(labmod("MultiplicacionM", "(args[0]*args[1])%args[2]"))
		caja_bit.addWidget(labmod("ExponenciacionM", "g=args[0]\nu=args[1]\np=args[2]\ns = 1\nwhile u != 0:\n\tif u & 1:\n\t\ts = (s * g)%p\n\tu >>= 1\n\tg = (g * g)%p\ns"))
		caja_bit.addWidget(labmod("InversoM", "a,b,s,t,s1,t1= [args[0],args[1],1,0,0,1]\nwhile(b!=0):\n\tq,r=[a/b,a%b]\n\ta,sa=[b,s]\n\ts,ta=[s1,t]\n\tt,b=[t1,r]\n\ts1,t1=[sa-s1*q,ta-t1*q]\nwhile (s<=0):\n\ts+=args[1]\ns"))

		dockbox = QWidget(self)
		vl = QVBoxLayout(dockbox)
		dockbox.setLayout(vl)
		vl.addWidget(tb)
		self.setWidget(dockbox)

		self.adjustSize()

		self.parent().say("Caja de herramientas creada")
Ejemplo n.º 10
0
    def __init__(self, parent, model, result):
        QWidget.__init__(self, parent)
        self.setLayout(QVBoxLayout())

        scrollArea = QScrollArea(self)
        self.layout().addWidget(scrollArea)
        scrollArea.setWidgetResizable(True)

        viewport = QToolBox()
        scrollArea.setWidget(viewport)

        self.computationTimeGroup = ComputationTimeTable(result)
        self.preemptionsGroup = InformationTable(
            result, 'preemption_count', ['min', 'avg', 'max', 'sum'])
        self.migrationsGroup = InformationTable(
            result, 'migration_count', ['min', 'avg', 'max', 'sum'])
        self.taskMigrationsGroup = TaskMigrationTable(result)
        self.responseTimeGroup = InformationTable(
            result, 'response_time', ['min', 'avg', 'max', 'std dev'],
            map_=lambda x: x / float(model.cycles_per_ms))

        viewport.addItem(self.computationTimeGroup, "Computation time:")
        viewport.addItem(self.preemptionsGroup, "Preemptions:")
        viewport.addItem(self.migrationsGroup, "Migrations:")
        viewport.addItem(self.taskMigrationsGroup, "Task migrations:")
        viewport.addItem(self.responseTimeGroup, "Response time:")
Ejemplo n.º 11
0
class QuickInsert(QWidget):
    def __init__(self, dockwidget):
        super(QuickInsert, self).__init__(dockwidget)
        self._dockwidget = weakref.ref(dockwidget)
        # filled in by ButtonGroup subclasses
        self.actionDict = {}
        
        layout = QVBoxLayout()
        self.setLayout(layout)
        layout.setContentsMargins(0, 0, 0, 0)
        
        self.helpButton = QToolButton(
            icon = icons.get("help-contents"),
            autoRaise = True,
            clicked = lambda: userguide.show("quickinsert"))
        self.directionLabel = QLabel()
        self.direction = QComboBox()
        self.direction.addItems(['', '', ''])
        self.direction.setItemIcon(0, icons.get("go-up"))
        self.direction.setItemIcon(2, icons.get("go-down"))
        self.direction.setCurrentIndex(1)
        hor = QHBoxLayout()
        hor.setContentsMargins(0, 0, 0, 0)
        hor.addWidget(self.helpButton)
        hor.addWidget(self.directionLabel)
        hor.addWidget(self.direction)
        layout.addLayout(hor)
        
        self.toolbox = QToolBox(self)
        widgets.toolboxwheeler.ToolBoxWheeler(self.toolbox)
        layout.addWidget(self.toolbox)
        
        for cls in (
                articulations.Articulations,
                dynamics.Dynamics,
                spanners.Spanners,
                barlines.BarLines,
            ):
            widget = cls(self)
            self.toolbox.addItem(widget, widget.icon(), '')
        
        app.translateUI(self)
        userguide.openWhatsThis(self)
        
        # restore remembered current page
        name = QSettings().value("quickinsert/current_tool", "", type(""))
        if name:
            for i in range(self.toolbox.count()):
                if name == self.toolbox.widget(i).__class__.__name__.lower():
                    self.toolbox.setCurrentIndex(i)
                    break
        self.toolbox.currentChanged.connect(self.slotCurrentChanged)
        
    def slotCurrentChanged(self, index):
        name = self.toolbox.widget(index).__class__.__name__.lower()
        QSettings().setValue("quickinsert/current_tool", name)
    
    def translateUI(self):
        self.setWhatsThis(_(
            "<p>With the Quick Insert Panel you can add various music "
            "elements to the current note or selected music.</p>\n"
            "<p>See {link} for more information.</p>").format(link=
                userguide.util.format_link("quickinsert")))
        self.helpButton.setToolTip(_("Help"))
        self.directionLabel.setText(_("Direction:"))
        for item, text in enumerate((_("Up"), _("Neutral"), _("Down"))):
            self.direction.setItemText(item, text)
        for i in range(self.toolbox.count()):
            self.toolbox.setItemText(i, self.toolbox.widget(i).title())
            self.toolbox.setItemToolTip(i, self.toolbox.widget(i).tooltip())
            
    def actionForName(self, name):
        """This is called by the ShortcutCollection of our dockwidget, e.g. if the user presses a key."""
        try:
            return self.actionDict[name]
        except KeyError:
            pass

    def dockwidget(self):
        return self._dockwidget()
Ejemplo n.º 12
0
class QuickInsert(QWidget):
    def __init__(self, dockwidget):
        super(QuickInsert, self).__init__(dockwidget)
        self._dockwidget = weakref.ref(dockwidget)
        # filled in by ButtonGroup subclasses
        self.actionDict = {}

        layout = QVBoxLayout()
        self.setLayout(layout)
        layout.setContentsMargins(0, 0, 0, 0)

        self.helpButton = QToolButton(
            icon=icons.get("help-contents"),
            autoRaise=True,
            clicked=lambda: userguide.show("quickinsert"))
        self.directionLabel = QLabel()
        self.direction = QComboBox()
        self.direction.addItems(['', '', ''])
        self.direction.setItemIcon(0, icons.get("go-up"))
        self.direction.setItemIcon(2, icons.get("go-down"))
        self.direction.setCurrentIndex(1)
        hor = QHBoxLayout()
        hor.setContentsMargins(0, 0, 0, 0)
        hor.addWidget(self.helpButton)
        hor.addWidget(self.directionLabel)
        hor.addWidget(self.direction)
        layout.addLayout(hor)

        self.toolbox = QToolBox(self)
        widgets.toolboxwheeler.ToolBoxWheeler(self.toolbox)
        layout.addWidget(self.toolbox)

        for cls in (
                articulations.Articulations,
                dynamics.Dynamics,
                spanners.Spanners,
                barlines.BarLines,
        ):
            widget = cls(self)
            self.toolbox.addItem(widget, widget.icon(), '')

        app.translateUI(self)
        userguide.openWhatsThis(self)

        # restore remembered current page
        name = QSettings().value("quickinsert/current_tool", "", type(""))
        if name:
            for i in range(self.toolbox.count()):
                if name == self.toolbox.widget(i).__class__.__name__.lower():
                    self.toolbox.setCurrentIndex(i)
                    break
        self.toolbox.currentChanged.connect(self.slotCurrentChanged)

    def slotCurrentChanged(self, index):
        name = self.toolbox.widget(index).__class__.__name__.lower()
        QSettings().setValue("quickinsert/current_tool", name)

    def translateUI(self):
        self.setWhatsThis(
            _("<p>With the Quick Insert Panel you can add various music "
              "elements to the current note or selected music.</p>\n"
              "<p>See {link} for more information.</p>").format(
                  link=userguide.util.format_link("quickinsert")))
        self.helpButton.setToolTip(_("Help"))
        self.directionLabel.setText(_("Direction:"))
        for item, text in enumerate((_("Up"), _("Neutral"), _("Down"))):
            self.direction.setItemText(item, text)
        for i in range(self.toolbox.count()):
            self.toolbox.setItemText(i, self.toolbox.widget(i).title())
            self.toolbox.setItemToolTip(i, self.toolbox.widget(i).tooltip())

    def actionForName(self, name):
        """This is called by the ShortcutCollection of our dockwidget, e.g. if the user presses a key."""
        try:
            return self.actionDict[name]
        except KeyError:
            pass

    def dockwidget(self):
        return self._dockwidget()
Ejemplo n.º 13
0
 def __init__(self, parent=None):
     QToolBox.__init__(self, parent)
Ejemplo n.º 14
0
class MeritWidget(TraitWidget):
	"""
	@brief Das Widget, in welchem sämtliche Merits angeordnet sind.

	\todo Einen Knopf erstellen, über den der Benutzer angeben kann, welche Merits er denn wirklich alle angezeigt haben will.

	\todo Bei Merits mit Zusatztext (Language) in diesem men+ ein Zahlenfle dangeben, bei welchem der benutzer einstellen kann, wieviele verschiedene dieser scheinbar identischen merits er angezeigt haben will.
	"""


	def __init__(self, template, character, parent=None):
		super(MeritWidget, self).__init__(template, character, parent)

		self.__layout = QVBoxLayout()
		self.setLayout( self.__layout )

		self.__toolBox = QToolBox()
		## Die Auflistung der Merits soll auch unter Windows einen transparenten Hintergrund haben.
		self.__toolBox.setObjectName("transparentWidget")
		## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen.
		if os.name == "nt":
			self.__toolBox.setStyleSheet( "QScrollArea{ background: transparent; } QWidget#transparentWidget { background: transparent; }" )
		self.__layout.addWidget(self.__toolBox)

		self.__typ = "Merit"
		categories = []
		categories.extend(Config.CATEGORIES_MERITS)
		categories.extend(self._storage.categories(self.__typ))
		# Duplikate werden entfernt. Dadurch wird die in der Config-Klasse vorgegebene Reihenfolge eingehalten und zusätzliche, dort nicht erwähnte Kategorien werden hinterher angehängt.
		categories = ListTools.uniqify_ordered(categories)

		# Diese Liste speichert den Index der ToolBox-Seite bei den unterschiedlichen Kategorien
		self.__categoryIndex = {}

		# Merits werden in einer Spalte heruntergeschrieben, aber mit vertikalem Platz dazwischen.
		for item in categories:
			# Für jede Kategorie wird ein eigener Abschnitt erzeugt.
			widgetMeritCategory = QWidget()
			## Dank des Namens übernimmt dieses Widget den Stil des Eltern-Widgets.
			widgetMeritCategory.setObjectName("transparentWidget")

			layoutMeritCategory = QVBoxLayout()
			widgetMeritCategory.setLayout( layoutMeritCategory )

			self.__toolBox.addItem( widgetMeritCategory, item )
			self.__categoryIndex[item] = self.__toolBox.count() - 1
			#Debug.debug(self.__categoryIndex)

			__list = list( self._character.traits[self.__typ][item].items() )
			__list.sort()
			for merit in __list:
				#Debug.debug(merit)
				# Anlegen des Widgets, das diese Eigenschaft repräsentiert.
				traitWidget = CharaTrait( merit[1], self )
				traitWidget.setSpecialtiesHidden(True)
				if not merit[1].custom:
					traitWidget.setDescriptionHidden(True)

				# Bei Merits sind nur bestimmte Werte erlaubt.
				#Debug.debug(self._storage.traits[self.__typ][item][merit[0]])
				traitWidget.setPossibleValues(self._storage.traits[self.__typ][item][merit[1].identifier]["values"])

				# Es werden nur Eigenschaften der richtigen Alters- und Zeit-Kategorie angezeigt.
				self.hideReasonChanged.connect(traitWidget.hideOrShowTrait)

				layoutMeritCategory.addWidget( traitWidget )

				merit[1].valueChanged.connect(self.countMerits)
				#self._character.speciesChanged.connect(traitWidget.hideOrShowTrait_species)


			# Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
			layoutMeritCategory.addStretch()

		self.setMinimumWidth(Config.TRAIT_WIDTH_MIN)

		self._character.speciesChanged.connect(self.countMerits)

	#// 	dialog = new SelectMeritsDialog( this );
	#//
	#// 	QHBoxLayout* layout_button = new QHBoxLayout();
	#// 	layoutTop.addLayout( layout_button );
	#//
	#// 	button = new QPushButton();
	#// 	button.setIcon( style().standardIcon( QStyle::SP_FileDialogStart ) );
	#//
	#// 	layout_button.addStretch();
	#// 	layout_button.addWidget( button );
	#//
	#// 	connect( button, SIGNAL( clicked( bool ) ), dialog, SLOT( exec() ) );


	def countMerits(self):
		"""
		Zält die Merits in einer Kategorie, deren Wert größer 0 ist. Dieser Wert wird dann in die Überschrift der einzelnen ToolBox-Seiten angezeigt, um dem Benutzer die Übersicht zu bewahren.

		Es wird nur dann etwas angezeigt, wenn der Weert größer 0 ist.

		Versteckte Eigenschaften. also solche, die der Spezies nicht zur Verfügung stehen, können einen Wert > 0 haben, sollten aber nicht mitgezählt werden.
		"""

		for item in self._character.traits[self.__typ]:
			numberInCategory = 0
			for subitem in self._character.traits[self.__typ][item].values():
				if subitem.value > 0 and (not subitem.species or subitem.species == self._character.species):
					numberInCategory += 1

			# ToolBox-Seite des entsprechenden Kategorie mit der Anzahl gewählter Merits beschriften.
			if numberInCategory > 0:
				self.__toolBox.setItemText( self.__categoryIndex[item], "{} ({})".format(item, numberInCategory) )
			else:
				self.__toolBox.setItemText( self.__categoryIndex[item], item )
Ejemplo n.º 15
0
class CategoryWidget(QWidget):
    """
	@brief Dieses Widget kann in Kategorien aufgeteilte Widgets aufnehmen. Es werden nur jene Kategorien angezeigt, welche auch ein anzuzeigendes Widget enthalten.
	"""
    def __init__(self,
                 template,
                 character,
                 typ,
                 isCheckable=False,
                 parent=None):
        super(CategoryWidget, self).__init__(parent)

        self.__storage = template
        self.__character = character

        self._layout = QVBoxLayout()
        self.setLayout(self._layout)

        self._toolBox = QToolBox()
        ## Die Auflistung der Widgets soll auch unter Windows einen transparenten Hintergrund haben.
        self._toolBox.setObjectName("transparentWidget")
        ## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen.
        if os.name == "nt":
            self._toolBox.setStyleSheet(
                "QScrollArea{ background: transparent; } QWidget#transparentWidget { background: transparent; }"
            )

        self._layout.addWidget(self._toolBox)

        self._typ = typ
        categories = self.__storage.categories(self._typ)

        # Diese Liste speichert den Index der ToolBox-Seite bei den unterschiedlichen Kategorien
        # {
        # 	Index: [Widget, Eigenschaft1, Eigenschaft2, ...]
        # }
        self._toolBoxPageList = {}

        for item in categories:
            # Für jede Kategorie wird ein eigener Abschnitt erzeugt.
            widgetCategory = QWidget()
            ## Dank des Namens übernimmt dieses Widget den Stil des Eltern-Widgets.
            widgetCategory.setObjectName("transparentWidget")

            layoutCategory = QVBoxLayout()

            widgetCategory.setLayout(layoutCategory)

            ## In dieser Liste sammle ich die Widgets, damit sie später bei Bedarf in die ToolBox eingefügt werden können.
            self._toolBoxPageList[item] = [widgetCategory]

            __list = list(self.__character.traits[self._typ][item].items())
            __list.sort()
            for trait in __list:
                # Anlegen des Widgets, das diese Eigenschaft repräsentiert.
                traitWidget = None
                if isCheckable:
                    traitWidget = CheckTrait(trait[1], self)
                else:
                    traitWidget = CharaTrait(trait[1], self)
                    traitWidget.setSpecialtiesHidden(True)
                if type(trait) != StandardTrait or not trait[1].custom:
                    traitWidget.setDescriptionHidden(True)

                self._toolBoxPageList[item].append(trait[1])

                layoutCategory.addWidget(traitWidget)

                self.__character.traitVisibleReasonChanged.connect(
                    traitWidget.hideOrShowTrait)

            # Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
            layoutCategory.addStretch()
        #Debug.debug(self._toolBoxPageList)
        self.__character.speciesChanged.connect(self.hideOrShowToolPage)
        self.__character.breedChanged.connect(self.hideOrShowToolPage)
        self.__character.factionChanged.connect(self.hideOrShowToolPage)

    def hideOrShowToolPage(self, res):
        """
		Verbirgt eine Seite der ToolBox, wenn alle darin enthaltenen Widgets versteckt sind oder diese Kategorie für die ausgewählte Brut/Fraktion nicht zur Verfügung steht. Ansonsten wird sie dargestellt.
		"""

        # Damit die Kategorien auch nach dem Entfernen und Hinzufügen von Eigenschaften alphapetisch sortiert bleiben.
        keys = list(self._toolBoxPageList.keys())
        keys.sort()

        for item in keys:
            available = False
            for subitem in self._toolBoxPageList[item][1:]:
                ## Alles ausblenden, was nicht zur Spezies paßt.
                #if (not subitem.species or subitem.species == self.__character.species):
                if (not subitem.species
                        or subitem.species == self.__character.species) and (
                            not subitem.only
                            or self.__character.breed in subitem.only
                            or self.__character.faction in subitem.only):
                    available = True
                    break
            if available:
                # Nicht hinzufügen, was schon in der Liste steht.
                if self._toolBox.indexOf(self._toolBoxPageList[item][0]) < 0:
                    self._toolBox.addItem(self._toolBoxPageList[item][0], item)
                    self._toolBoxPageList[item][0].setVisible(True)
            else:
                indexOfWidget = self._toolBox.indexOf(
                    self._toolBoxPageList[item][0])
                if indexOfWidget >= 0:
                    self._toolBox.removeItem(indexOfWidget)
                self._toolBoxPageList[item][0].setVisible(False)
Ejemplo n.º 16
0
    def __init__(self,
                 template,
                 character,
                 typ,
                 isCheckable=False,
                 parent=None):
        super(CategoryWidget, self).__init__(parent)

        self.__storage = template
        self.__character = character

        self._layout = QVBoxLayout()
        self.setLayout(self._layout)

        self._toolBox = QToolBox()
        ## Die Auflistung der Widgets soll auch unter Windows einen transparenten Hintergrund haben.
        self._toolBox.setObjectName("transparentWidget")
        ## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen.
        if os.name == "nt":
            self._toolBox.setStyleSheet(
                "QScrollArea{ background: transparent; } QWidget#transparentWidget { background: transparent; }"
            )

        self._layout.addWidget(self._toolBox)

        self._typ = typ
        categories = self.__storage.categories(self._typ)

        # Diese Liste speichert den Index der ToolBox-Seite bei den unterschiedlichen Kategorien
        # {
        # 	Index: [Widget, Eigenschaft1, Eigenschaft2, ...]
        # }
        self._toolBoxPageList = {}

        for item in categories:
            # Für jede Kategorie wird ein eigener Abschnitt erzeugt.
            widgetCategory = QWidget()
            ## Dank des Namens übernimmt dieses Widget den Stil des Eltern-Widgets.
            widgetCategory.setObjectName("transparentWidget")

            layoutCategory = QVBoxLayout()

            widgetCategory.setLayout(layoutCategory)

            ## In dieser Liste sammle ich die Widgets, damit sie später bei Bedarf in die ToolBox eingefügt werden können.
            self._toolBoxPageList[item] = [widgetCategory]

            __list = list(self.__character.traits[self._typ][item].items())
            __list.sort()
            for trait in __list:
                # Anlegen des Widgets, das diese Eigenschaft repräsentiert.
                traitWidget = None
                if isCheckable:
                    traitWidget = CheckTrait(trait[1], self)
                else:
                    traitWidget = CharaTrait(trait[1], self)
                    traitWidget.setSpecialtiesHidden(True)
                if type(trait) != StandardTrait or not trait[1].custom:
                    traitWidget.setDescriptionHidden(True)

                self._toolBoxPageList[item].append(trait[1])

                layoutCategory.addWidget(traitWidget)

                self.__character.traitVisibleReasonChanged.connect(
                    traitWidget.hideOrShowTrait)

            # Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
            layoutCategory.addStretch()
        #Debug.debug(self._toolBoxPageList)
        self.__character.speciesChanged.connect(self.hideOrShowToolPage)
        self.__character.breedChanged.connect(self.hideOrShowToolPage)
        self.__character.factionChanged.connect(self.hideOrShowToolPage)
Ejemplo n.º 17
0
    def __init__(self, template, character, parent=None):
        super(MeritWidget, self).__init__(template, character, parent)

        self.__layout = QVBoxLayout()
        self.setLayout(self.__layout)

        self.__toolBox = QToolBox()
        ## Die Auflistung der Merits soll auch unter Windows einen transparenten Hintergrund haben.
        self.__toolBox.setObjectName("transparentWidget")
        ## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen.
        if os.name == "nt":
            self.__toolBox.setStyleSheet(
                "QScrollArea{ background: transparent; } QWidget#transparentWidget { background: transparent; }"
            )
        self.__layout.addWidget(self.__toolBox)

        self.__typ = "Merit"
        categories = []
        categories.extend(Config.CATEGORIES_MERITS)
        categories.extend(self._storage.categories(self.__typ))
        # Duplikate werden entfernt. Dadurch wird die in der Config-Klasse vorgegebene Reihenfolge eingehalten und zusätzliche, dort nicht erwähnte Kategorien werden hinterher angehängt.
        categories = ListTools.uniqify_ordered(categories)

        # Diese Liste speichert den Index der ToolBox-Seite bei den unterschiedlichen Kategorien
        self.__categoryIndex = {}

        # Merits werden in einer Spalte heruntergeschrieben, aber mit vertikalem Platz dazwischen.
        for item in categories:
            # Für jede Kategorie wird ein eigener Abschnitt erzeugt.
            widgetMeritCategory = QWidget()
            ## Dank des Namens übernimmt dieses Widget den Stil des Eltern-Widgets.
            widgetMeritCategory.setObjectName("transparentWidget")

            layoutMeritCategory = QVBoxLayout()
            widgetMeritCategory.setLayout(layoutMeritCategory)

            self.__toolBox.addItem(widgetMeritCategory, item)
            self.__categoryIndex[item] = self.__toolBox.count() - 1
            #Debug.debug(self.__categoryIndex)

            __list = list(self._character.traits[self.__typ][item].items())
            __list.sort()
            for merit in __list:
                #Debug.debug(merit)
                # Anlegen des Widgets, das diese Eigenschaft repräsentiert.
                traitWidget = CharaTrait(merit[1], self)
                traitWidget.setSpecialtiesHidden(True)
                if not merit[1].custom:
                    traitWidget.setDescriptionHidden(True)

                # Bei Merits sind nur bestimmte Werte erlaubt.
                #Debug.debug(self._storage.traits[self.__typ][item][merit[0]])
                traitWidget.setPossibleValues(self._storage.traits[
                    self.__typ][item][merit[1].identifier]["values"])

                # Es werden nur Eigenschaften der richtigen Alters- und Zeit-Kategorie angezeigt.
                self.hideReasonChanged.connect(traitWidget.hideOrShowTrait)

                layoutMeritCategory.addWidget(traitWidget)

                merit[1].valueChanged.connect(self.countMerits)
                #self._character.speciesChanged.connect(traitWidget.hideOrShowTrait_species)

            # Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
            layoutMeritCategory.addStretch()

        self.setMinimumWidth(Config.TRAIT_WIDTH_MIN)

        self._character.speciesChanged.connect(self.countMerits)
class MultipleCategoriesView(QWidget):
    def __init__(self, action, parent, logger):
        super(MultipleCategoriesView, self).__init__(parent)
        
        self.logger = logger
        self._action = action
        self._mode = PrivacySettings.get().getPolicy(self._action, None, useModified=True, categoryPolicy=PrivacySettings.CATEGORY_NEVER)
        self._currentSingleViews = {}
        self._currentToolBox = None
        
        topView = self._initTopView()
        self._initSettingsWidget()
        
        mainLayout = QVBoxLayout(self)
        mainLayout.addWidget(topView)
        mainLayout.addWidget(self._settingsWidget, 1)
        self._modeChanged(self._mode, False)
        
        get_notification_center().connectPrivacySettingsChanged(self._privacySettingsChanged)
        get_notification_center().connectPrivacySettingsDiscarded(self._privacySettingsChanged)
        
    def finish(self):
        get_notification_center().disconnectPrivacySettingsChanged(self._privacySettingsChanged)
        get_notification_center().disconnectPrivacySettingsDiscarded(self._privacySettingsChanged)
        self._clearCurrentView()

    def _initTopView(self):
        topWidget = QWidget(self)
        
        self._modeCombo = QComboBox(topWidget)
        self._modeCombo.addItem(u"from nobody")
        self._modeCombo.addItem(u"from nobody, except")
        self._modeCombo.addItem(u"from everybody, except")
        self._modeCombo.addItem(u"from everybody")
        self._modeCombo.addItem(u"depending on category")
        self._modeCombo.setCurrentIndex(self._mode)
        self._modeCombo.currentIndexChanged.connect(self._modeChanged)
        
        topLayout = QHBoxLayout(topWidget)
        topLayout.setContentsMargins(0, 0, 0, 0)
        topLayout.addWidget(QLabel(u"Accept"), 0)
        topLayout.addWidget(self._modeCombo, 1, Qt.AlignLeft)
        return topWidget
    
    def _initSettingsWidget(self):
        self._settingsWidget = QWidget(self)
        layout = QVBoxLayout(self._settingsWidget)
        layout.setSpacing(0)
        layout.setContentsMargins(0, 0, 0, 0)
    
    def _clearCurrentView(self):
        for _cat, view in self._currentSingleViews.iteritems():
            view.finish()
        self._currentSingleViews = {}
        
        layout = self._settingsWidget.layout()
        
        child = layout.takeAt(0)
        while child != None:
            child.widget().deleteLater()
            child = layout.takeAt(0)
    
    _PEER_EXCEPTIONS_VIEW = -1
    
    def _createAndInsertSingleView(self, category, index):
        singleView = SingleCategoryView(self._action, self._currentToolBox, self.logger, category)
        self._currentSingleViews[category] = singleView
        icon = self._action.getCategoryIcon(category)
        title = u"Not Categorized" if category == PrivacySettings.NO_CATEGORY else category
        if icon is not None:
            self._currentToolBox.insertItem(index, singleView, icon, title)
        else:
            self._currentToolBox.insertItem(index, singleView, title)
    
    def _createCategoryView(self):
        self._clearCurrentView()
        
        self._currentToolBox = QToolBox(self)
        self._currentToolBox.setAutoFillBackground(False)
        for category in self._action.getPrivacyCategories():
            self._createAndInsertSingleView(category, -1)
        
        peerExceptions = SingleCategoryView(self._action, self._currentToolBox, self.logger, category=None, mode=PrivacySettings.POLICY_PEER_EXCEPTION)
        self._currentSingleViews[self._PEER_EXCEPTIONS_VIEW] = peerExceptions
        self._currentToolBox.addItem(peerExceptions, "Special Peers")
        
        w = QScrollArea(self)
        w.setAutoFillBackground(False)
        w.viewport().setAutoFillBackground(False)
        w.setWidgetResizable(True)
        w.setWidget(self._currentToolBox)
        w.setFrameShape(QFrame.NoFrame)
        self._settingsWidget.layout().addWidget(w)
        
    def _updateCategoryView(self):
        if self._currentToolBox is None:
            self.logger.debug("Current tool box is None. Have to reset.")
            self._createCategoryView()
            return
        
        newCategories = self._action.getPrivacyCategories()
        last = self._currentToolBox.count() - 1
        oldCategories = [convert_string(self._currentToolBox.widget(i).getCategory()) for i in xrange(last)]
        
        # remove categories that are not there any more
        reverse_enumerate = lambda l: izip(xrange(len(l)-1, -1, -1), reversed(l))
        for i, oldCat in reverse_enumerate(oldCategories):
            if oldCat not in newCategories:
                self._currentToolBox.removeItem(i)
                
        # add new categories
        lastFound = -1
        for i, newCat in reverse_enumerate(newCategories):
            if newCat in oldCategories:
                lastFound = i
            else:
                self._createAndInsertSingleView(newCat, lastFound)
        
    def _createSingleView(self, mode):
        self._clearCurrentView()
        w = SingleCategoryView(self._action, self, self.logger, mode=mode)
        self._currentSingleViews[None] = w
        self._settingsWidget.layout().addWidget(w)
        
    @loggingSlot(int)
    def _modeChanged(self, newMode, notify=True):
        if newMode == self._mode and newMode == PrivacySettings.POLICY_BY_CATEGORY:
            self._updateCategoryView()
            return
        
        self._currentToolBox = None
        if newMode in (PrivacySettings.POLICY_EVERYBODY_EX, PrivacySettings.POLICY_NOBODY_EX):
            # single mode
            if len(self._currentSingleViews) == 0 or self._mode not in (PrivacySettings.POLICY_EVERYBODY_EX, PrivacySettings.POLICY_NOBODY_EX):
                # only reset if not already in single mode
                self._createSingleView(newMode)
            else:
                # only change mode
                self._currentSingleViews[None].setMode(newMode)
        elif newMode == PrivacySettings.POLICY_BY_CATEGORY:
            self._createCategoryView()
        else:
            self._clearCurrentView()
        
        self._mode = newMode
        if self._modeCombo.currentIndex() != newMode:
            self._modeCombo.setCurrentIndex(newMode)
        if notify:
            PrivacySettings.get().setPolicy(self._action, None, self._mode, applyImmediately=False, categoryPolicy=PrivacySettings.CATEGORY_NEVER)
    
    @loggingSlot(object, object)
    def _privacySettingsChanged(self, pluginName, actionName):
        if pluginName != self._action.getPluginName() or actionName != self._action.getName():
            return
        newMode = PrivacySettings.get().getPolicy(self._action, None, categoryPolicy=PrivacySettings.CATEGORY_NEVER)
        self._modeChanged(newMode, notify=False)
        
Ejemplo n.º 19
0
    def __init__(self, app_admin, workspace, parent):
        super(QDockWidget, self).__init__(parent)

        self._workspace = workspace
        self.app_admin = app_admin

        tb = QToolBox()
        tb.setFrameShape(QFrame.NoFrame)
        tb.layout().setContentsMargins(0, 0, 0, 0)
        tb.layout().setSpacing(1)
        tb.setObjectName('toolbox')
        tb.setMouseTracking(True)

        # hack for removing the dock title bar
        self.setTitleBarWidget(QWidget())
        self.setWidget(tb)
        self.setFeatures(QDockWidget.NoDockWidgetFeatures)

        self.app_admin.sections_changed_signal.connect(self.update_sections)
        self.update_sections()
Ejemplo n.º 20
0
Archivo: View0.py Proyecto: iras/JADE
    def __init__ (self, name, graph_view, scene, parent=None):
        
        QFrame.__init__(self, parent)
        
        self.graph_view = graph_view
        self.graph_view.setView0 (self)
        self.scene = scene

        self.setFrameStyle (QFrame.Sunken | QFrame.StyledPanel)
        
        self.font = QFont()
        self.font.setPointSize(10)
        
        
        self.graphicsView = CustomGraphicsView ()
        self.graphicsView.setRenderHint (QPainter.Antialiasing, True)
        self.graphicsView.setDragMode (QGraphicsView.RubberBandDrag)
        self.graphicsView.setViewportUpdateMode (QGraphicsView.SmartViewportUpdate)
        #self.graphicsView.setMouseTracking(True)
        
        # toolbox definition + group page definition
        sizePolicy = QSizePolicy (QSizePolicy.Fixed, QSizePolicy.Expanding)
        self.setObjectName ('Form')
        self.resize (900, 1000)
        self._toolBox = QToolBox (self)
        self._toolBox.setGeometry (QRect (0, 0, 131, 301))
        self._toolBox.setFont (self.font)
        self._toolBox.setObjectName ('_toolBox')
        self._toolBox.setCursor (Qt.PointingHandCursor)
        self.groupCluster = QWidget ()
        self.groupCluster.setGeometry (QRect(0, 0, 91, 241))
        self.groupCluster.setObjectName ('groupCluster')
        self.groupLineEdit = QLineEdit (self.groupCluster)
        self.groupLineEdit.setGeometry (QRect (2, 20, 60, 16))
        self.groupLineEdit.setObjectName ('groupLineEdit')
        self.label = QLabel (self.groupCluster)
        self.label.setGeometry (QRect (4, 6, 62, 16))
        self.label.setFont (self.font)
        self.label.setObjectName ('label')
        self.label_2 = QLabel (self.groupCluster)
        self.label_2.setGeometry (QRect (4, 40, 62, 16))
        self.label_2.setFont (self.font)
        self.label_2.setObjectName ('label_2')
        self.groupLineEdit_2 = QLineEdit (self.groupCluster)
        self.groupLineEdit_2.setGeometry (QRect(2, 54, 60, 16))
        self.groupLineEdit_2.setObjectName ('groupLineEdit_2')
        self.pushButton = QPushButton (self.groupCluster)
        self.pushButton.setGeometry (QRect (2, 90, 60, 16))
        self.pushButton.setFont (self.font)
        self.pushButton.setObjectName ('pushButton')
        self._toolBox.addItem (self.groupCluster, '')
        self._toolBox.setItemText (self._toolBox.indexOf (self.groupCluster), QApplication.translate ("Form", "Group", None, QApplication.UnicodeUTF8))
        self.setWindowTitle (QApplication.translate ("Form", "Form", None, QApplication.UnicodeUTF8))
        self.label.setText (QApplication.translate ("Form", "name group", None, QApplication.UnicodeUTF8))
        self.label_2.setText (QApplication.translate ("Form", "group id", None, QApplication.UnicodeUTF8))
        self.pushButton.setText (QApplication.translate ("Form", "add cluster", None, QApplication.UnicodeUTF8))
        self._toolBox.setSizePolicy (sizePolicy)
        self._toolBox.setEnabled (False)
        
        # adding the first cluster to the toolbox - a cluster is always present!
        self._cluster_page_list = []
        self.connect (self.pushButton, SIGNAL ("clicked()"), self.addCluster)  # connect the 'add-cluster' button to the method that taps into the model for cluster addition.
        self.connect (self.graph_view.getComm(), SIGNAL ("addCluster_MSignal(int)"), self.addClusterPage)
        self.connect (self.graph_view.getComm(), SIGNAL ("deleteCluster_MSignal(int)"), self.removeClusterPage)
        self.connect (self.graph_view.getComm(), SIGNAL ("updateClusterName_MSignal(int, QString)"), self.updateClusterViewName)
        self.addCluster () # add the first cluster. At least one cluster needs to be always present.
        self.disableAllClusterPagesDeleteButton() # since there's only one cluster page, the delete button is disabled.
        
        #size = self.style ().pixelMetric (QStyle.PM_ToolBarIconSize)
        iconSize = QSize (16, 16) #QSize (size, size)
        
        zoomInIcon = QToolButton ()
        zoomInIcon.setCursor (Qt.PointingHandCursor)
        zoomInIcon.setAutoRepeat (True)
        zoomInIcon.setAutoRepeatInterval (33)
        zoomInIcon.setAutoRepeatDelay (0)
        zoomInIcon.setIconSize (iconSize)
        
        zoomOutIcon = QToolButton ()
        zoomOutIcon.setCursor (Qt.PointingHandCursor)
        zoomOutIcon.setAutoRepeat (True)
        zoomOutIcon.setAutoRepeatInterval (33)
        zoomOutIcon.setAutoRepeatDelay (0)
        zoomOutIcon.setIconSize (iconSize)
        
        self.zoomSlider = QSlider ()
        self.zoomSlider.setCursor (Qt.PointingHandCursor)
        self.zoomSlider.setMinimum (200)
        self.zoomSlider.setMaximum (280)
        self.zoomSlider.setValue   (240)
        self.zoomSlider.setTickPosition (QSlider.TicksRight)
        
        # Zoom slider layout
        zoomSliderLayout = QVBoxLayout ()
        zoomSliderLayout.addWidget (zoomInIcon)
        zoomSliderLayout.addWidget (self.zoomSlider)
        zoomSliderLayout.addWidget (zoomOutIcon)
        
        self.printOutBtn = QPushButton()
        self.printOutBtn.setText ("print")
        self.printOutBtn.setFont (self.font)
        self.printOutBtn.setEnabled (False)
        
        self.newJADESceneBtn = QPushButton()
        self.newJADESceneBtn.setText ("new")
        self.newJADESceneBtn.setFont (self.font)
        self.newJADESceneBtn.setEnabled (False)
        
        self.loadNodesDescrpBtn = QPushButton()
        self.loadNodesDescrpBtn.setText ("load Nodes Description")
        self.loadNodesDescrpBtn.setFont (self.font)
        self.loadNodesDescrpBtn.setEnabled (True)
        
        self.graphLoadBtn = QPushButton()
        self.graphLoadBtn.setText ("load")
        self.graphLoadBtn.setFont (self.font)
        self.graphLoadBtn.setEnabled (False)
        
        self.graphSaveBtn = QPushButton()
        self.graphSaveBtn.setText ("save")
        self.graphSaveBtn.setFont (self.font)
        self.graphSaveBtn.setEnabled (False)
        
        self.resetButton = QToolButton ()
        self.resetButton.setText ("r")
        self.resetButton.setFont (self.font)
        self.resetButton.setEnabled (False)
        
        self.message_bar = QLineEdit ()
        self.message_bar.setGeometry (QRect (0, 0, 190, 12))
        self.message_bar.setObjectName ('message_bar')
        self.message_bar.setText ('Node description file, please.')
        self.message_bar.setFont (self.font)
        self.message_bar.setEnabled  (True)
        self.message_bar.setReadOnly (True)
        
        self.spacer = QSpacerItem (30, 20, QSizePolicy.Fixed, QSizePolicy.Fixed );
        
        # Label layout
        labelLayout = QHBoxLayout ()
        self.label = QLabel (name)
        self.label.setFont (self.font)
        labelLayout.addWidget (self.loadNodesDescrpBtn)
        labelLayout.addWidget (self.newJADESceneBtn)
        labelLayout.addWidget (self.graphLoadBtn)
        labelLayout.addWidget (self.graphSaveBtn)
        labelLayout.addWidget (self.printOutBtn)
        labelLayout.addItem   (self.spacer)
        labelLayout.addWidget (self.message_bar)
        #labelLayout.addWidget (self.label)
        labelLayout.addStretch ()
        
        # top layout
        topLayout = QGridLayout ()
        topLayout.setHorizontalSpacing (0)
        topLayout.setVerticalSpacing (0)
        topLayout.addLayout (labelLayout, 0, 1)
        topLayout.addWidget (self._toolBox, 1, 0)
        topLayout.addWidget (self.resetButton, 0, 2)
        topLayout.addWidget (self.graphicsView, 1, 1)
        topLayout.addLayout (zoomSliderLayout, 1, 2)
        self.setLayout (topLayout)
        
        self.connect (self.resetButton, SIGNAL ("clicked()"), self.resetView)
        self.connect (self.zoomSlider,  SIGNAL ("valueChanged(int)"), self.setupMatrix)
        self.connect (self.graphicsView.verticalScrollBar   (), SIGNAL ("valueChanged(int)"), self.setResetButtonEnabled)
        self.connect (self.graphicsView.horizontalScrollBar (), SIGNAL ("valueChanged(int)"), self.setResetButtonEnabled)
        self.connect (zoomInIcon,  SIGNAL ("clicked()"), self.zoomIn)
        self.connect (zoomOutIcon, SIGNAL ("clicked()"), self.zoomOut)
        
        self.setupMatrix ()
        
        self.printer = QPrinter (QPrinter.HighResolution)
        
        self.prev_selection_list = []
        
        self.isClusterRemovalOverridden = False
Ejemplo n.º 21
0
Archivo: View0.py Proyecto: iras/JADE
class View (QFrame):

    def __init__ (self, name, graph_view, scene, parent=None):
        
        QFrame.__init__(self, parent)
        
        self.graph_view = graph_view
        self.graph_view.setView0 (self)
        self.scene = scene

        self.setFrameStyle (QFrame.Sunken | QFrame.StyledPanel)
        
        self.font = QFont()
        self.font.setPointSize(10)
        
        
        self.graphicsView = CustomGraphicsView ()
        self.graphicsView.setRenderHint (QPainter.Antialiasing, True)
        self.graphicsView.setDragMode (QGraphicsView.RubberBandDrag)
        self.graphicsView.setViewportUpdateMode (QGraphicsView.SmartViewportUpdate)
        #self.graphicsView.setMouseTracking(True)
        
        # toolbox definition + group page definition
        sizePolicy = QSizePolicy (QSizePolicy.Fixed, QSizePolicy.Expanding)
        self.setObjectName ('Form')
        self.resize (900, 1000)
        self._toolBox = QToolBox (self)
        self._toolBox.setGeometry (QRect (0, 0, 131, 301))
        self._toolBox.setFont (self.font)
        self._toolBox.setObjectName ('_toolBox')
        self._toolBox.setCursor (Qt.PointingHandCursor)
        self.groupCluster = QWidget ()
        self.groupCluster.setGeometry (QRect(0, 0, 91, 241))
        self.groupCluster.setObjectName ('groupCluster')
        self.groupLineEdit = QLineEdit (self.groupCluster)
        self.groupLineEdit.setGeometry (QRect (2, 20, 60, 16))
        self.groupLineEdit.setObjectName ('groupLineEdit')
        self.label = QLabel (self.groupCluster)
        self.label.setGeometry (QRect (4, 6, 62, 16))
        self.label.setFont (self.font)
        self.label.setObjectName ('label')
        self.label_2 = QLabel (self.groupCluster)
        self.label_2.setGeometry (QRect (4, 40, 62, 16))
        self.label_2.setFont (self.font)
        self.label_2.setObjectName ('label_2')
        self.groupLineEdit_2 = QLineEdit (self.groupCluster)
        self.groupLineEdit_2.setGeometry (QRect(2, 54, 60, 16))
        self.groupLineEdit_2.setObjectName ('groupLineEdit_2')
        self.pushButton = QPushButton (self.groupCluster)
        self.pushButton.setGeometry (QRect (2, 90, 60, 16))
        self.pushButton.setFont (self.font)
        self.pushButton.setObjectName ('pushButton')
        self._toolBox.addItem (self.groupCluster, '')
        self._toolBox.setItemText (self._toolBox.indexOf (self.groupCluster), QApplication.translate ("Form", "Group", None, QApplication.UnicodeUTF8))
        self.setWindowTitle (QApplication.translate ("Form", "Form", None, QApplication.UnicodeUTF8))
        self.label.setText (QApplication.translate ("Form", "name group", None, QApplication.UnicodeUTF8))
        self.label_2.setText (QApplication.translate ("Form", "group id", None, QApplication.UnicodeUTF8))
        self.pushButton.setText (QApplication.translate ("Form", "add cluster", None, QApplication.UnicodeUTF8))
        self._toolBox.setSizePolicy (sizePolicy)
        self._toolBox.setEnabled (False)
        
        # adding the first cluster to the toolbox - a cluster is always present!
        self._cluster_page_list = []
        self.connect (self.pushButton, SIGNAL ("clicked()"), self.addCluster)  # connect the 'add-cluster' button to the method that taps into the model for cluster addition.
        self.connect (self.graph_view.getComm(), SIGNAL ("addCluster_MSignal(int)"), self.addClusterPage)
        self.connect (self.graph_view.getComm(), SIGNAL ("deleteCluster_MSignal(int)"), self.removeClusterPage)
        self.connect (self.graph_view.getComm(), SIGNAL ("updateClusterName_MSignal(int, QString)"), self.updateClusterViewName)
        self.addCluster () # add the first cluster. At least one cluster needs to be always present.
        self.disableAllClusterPagesDeleteButton() # since there's only one cluster page, the delete button is disabled.
        
        #size = self.style ().pixelMetric (QStyle.PM_ToolBarIconSize)
        iconSize = QSize (16, 16) #QSize (size, size)
        
        zoomInIcon = QToolButton ()
        zoomInIcon.setCursor (Qt.PointingHandCursor)
        zoomInIcon.setAutoRepeat (True)
        zoomInIcon.setAutoRepeatInterval (33)
        zoomInIcon.setAutoRepeatDelay (0)
        zoomInIcon.setIconSize (iconSize)
        
        zoomOutIcon = QToolButton ()
        zoomOutIcon.setCursor (Qt.PointingHandCursor)
        zoomOutIcon.setAutoRepeat (True)
        zoomOutIcon.setAutoRepeatInterval (33)
        zoomOutIcon.setAutoRepeatDelay (0)
        zoomOutIcon.setIconSize (iconSize)
        
        self.zoomSlider = QSlider ()
        self.zoomSlider.setCursor (Qt.PointingHandCursor)
        self.zoomSlider.setMinimum (200)
        self.zoomSlider.setMaximum (280)
        self.zoomSlider.setValue   (240)
        self.zoomSlider.setTickPosition (QSlider.TicksRight)
        
        # Zoom slider layout
        zoomSliderLayout = QVBoxLayout ()
        zoomSliderLayout.addWidget (zoomInIcon)
        zoomSliderLayout.addWidget (self.zoomSlider)
        zoomSliderLayout.addWidget (zoomOutIcon)
        
        self.printOutBtn = QPushButton()
        self.printOutBtn.setText ("print")
        self.printOutBtn.setFont (self.font)
        self.printOutBtn.setEnabled (False)
        
        self.newJADESceneBtn = QPushButton()
        self.newJADESceneBtn.setText ("new")
        self.newJADESceneBtn.setFont (self.font)
        self.newJADESceneBtn.setEnabled (False)
        
        self.loadNodesDescrpBtn = QPushButton()
        self.loadNodesDescrpBtn.setText ("load Nodes Description")
        self.loadNodesDescrpBtn.setFont (self.font)
        self.loadNodesDescrpBtn.setEnabled (True)
        
        self.graphLoadBtn = QPushButton()
        self.graphLoadBtn.setText ("load")
        self.graphLoadBtn.setFont (self.font)
        self.graphLoadBtn.setEnabled (False)
        
        self.graphSaveBtn = QPushButton()
        self.graphSaveBtn.setText ("save")
        self.graphSaveBtn.setFont (self.font)
        self.graphSaveBtn.setEnabled (False)
        
        self.resetButton = QToolButton ()
        self.resetButton.setText ("r")
        self.resetButton.setFont (self.font)
        self.resetButton.setEnabled (False)
        
        self.message_bar = QLineEdit ()
        self.message_bar.setGeometry (QRect (0, 0, 190, 12))
        self.message_bar.setObjectName ('message_bar')
        self.message_bar.setText ('Node description file, please.')
        self.message_bar.setFont (self.font)
        self.message_bar.setEnabled  (True)
        self.message_bar.setReadOnly (True)
        
        self.spacer = QSpacerItem (30, 20, QSizePolicy.Fixed, QSizePolicy.Fixed );
        
        # Label layout
        labelLayout = QHBoxLayout ()
        self.label = QLabel (name)
        self.label.setFont (self.font)
        labelLayout.addWidget (self.loadNodesDescrpBtn)
        labelLayout.addWidget (self.newJADESceneBtn)
        labelLayout.addWidget (self.graphLoadBtn)
        labelLayout.addWidget (self.graphSaveBtn)
        labelLayout.addWidget (self.printOutBtn)
        labelLayout.addItem   (self.spacer)
        labelLayout.addWidget (self.message_bar)
        #labelLayout.addWidget (self.label)
        labelLayout.addStretch ()
        
        # top layout
        topLayout = QGridLayout ()
        topLayout.setHorizontalSpacing (0)
        topLayout.setVerticalSpacing (0)
        topLayout.addLayout (labelLayout, 0, 1)
        topLayout.addWidget (self._toolBox, 1, 0)
        topLayout.addWidget (self.resetButton, 0, 2)
        topLayout.addWidget (self.graphicsView, 1, 1)
        topLayout.addLayout (zoomSliderLayout, 1, 2)
        self.setLayout (topLayout)
        
        self.connect (self.resetButton, SIGNAL ("clicked()"), self.resetView)
        self.connect (self.zoomSlider,  SIGNAL ("valueChanged(int)"), self.setupMatrix)
        self.connect (self.graphicsView.verticalScrollBar   (), SIGNAL ("valueChanged(int)"), self.setResetButtonEnabled)
        self.connect (self.graphicsView.horizontalScrollBar (), SIGNAL ("valueChanged(int)"), self.setResetButtonEnabled)
        self.connect (zoomInIcon,  SIGNAL ("clicked()"), self.zoomIn)
        self.connect (zoomOutIcon, SIGNAL ("clicked()"), self.zoomOut)
        
        self.setupMatrix ()
        
        self.printer = QPrinter (QPrinter.HighResolution)
        
        self.prev_selection_list = []
        
        self.isClusterRemovalOverridden = False
    
    def setMessageBarText (self, text):
        
        self.message_bar.setText (text)
    
    def enableControls (self):
        
        self.printOutBtn.setEnabled (True)
        self.newJADESceneBtn.setEnabled (True)
        self.graphLoadBtn.setEnabled (True)
        self.graphSaveBtn.setEnabled (True)
        self._toolBox.setEnabled (True)
    
    def disableControls (self):
        
        self.printOutBtn.setEnabled (False)
        self.newJADESceneBtn.setEnabled (False)
        self.graphLoadBtn.setEnabled (False)
        self.graphSaveBtn.setEnabled (False)
        self._toolBox.setEnabled (False)
    
    def setGraphicsViewCSSBackground (self):
        
        self.graphicsView.setStyleSheet('background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(125, 125, 135, 255), stop:1 rgba(215, 215, 215, 255));\ncolor: rgb(255, 255, 255);')
    
    def selectionChanged (self):
        
        current_selection_list = self.scene.selectedItems ()
        list_of_unselected_items = [item for item in self.prev_selection_list if item not in current_selection_list]
        
        # un-mark items in list_of_unselected_items
        for item in list_of_unselected_items:
            if self.graph_view.isTag (item) == True:
                item.switchToUnSelectedStateColour ()
        
        # mark items in current_selection_list
        for item in current_selection_list:
            if self.graph_view.isTag (item) == True:
                item.switchToSelectedStateColour ()
        
        self.prev_selection_list = current_selection_list
    
    # - - -    cluster-specific methods   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    def addCluster (self):
        
        self.graph_view.delegateClusterAddition ()
    
    def addClusterPage (self, new_cluster_id):
        
        self.enableAllClusterPagesDeleteButton () # enable all the cluster page's delete buttons (as I can be bothered to go look for the one that got previously disabled) 
        
        tmp_w = QWidget ()
        tmp_l = QLabel (tmp_w)
        tmp_e = QLineEdit (tmp_w)
        tmp_b = QPushButton (tmp_w)
        self._cluster_page_list.append ([new_cluster_id, tmp_w, tmp_l, tmp_e, tmp_b])
        
        tmp_w.setGeometry (QRect (0, 0, 131, 241))
        tmp_w.setObjectName ('Cluster_' + str (new_cluster_id))
        
        tmp_l.setGeometry (QRect (4, 6, 62, 16))
        tmp_l.setFont (self.font)
        tmp_l.setObjectName ('label_' + str (new_cluster_id))
        
        tmp_e.setGeometry (QRect (2, 20, 60, 16))
        tmp_e.setObjectName ('groupLineEdit_' + str (new_cluster_id))
        
        tmp_b.setGeometry (QRect (2, 50, 60, 16))
        tmp_b.setFont (self.font)
        tmp_b.setObjectName ('pushButton_' + str (new_cluster_id))
        
        self._toolBox.addItem (tmp_w, 'cluster_page_'+str(new_cluster_id))
        self._toolBox.setItemText (self._toolBox.indexOf (tmp_w), QApplication.translate ('Form', 'C_'+str(new_cluster_id), None, QApplication.UnicodeUTF8))
        tmp_l.setText (QApplication.translate ("Form", "name cluster", None, QApplication.UnicodeUTF8))
        tmp_b.setText (QApplication.translate ("Form", "delete", None, QApplication.UnicodeUTF8))
        self._toolBox.setCurrentIndex (new_cluster_id)
        QMetaObject.connectSlotsByName (self)
        
        # hook up the delete button (use a closure)
        receiver = lambda : self.removeCluster (new_cluster_id)
        self.connect (tmp_b, SIGNAL ("clicked()"), receiver)  # connect the 'add cluster' button to the method generating new cluster pages.
        
        receiver2 = lambda value : self.updateClusterModelName (new_cluster_id, value)
        self.connect (tmp_e, SIGNAL ("textChanged(QString)"), receiver2)
    
    def removeAllClusters (self):
        
        copy_list = list (self._cluster_page_list)
        
        self.isClusterRemovalOverridden = True
        for item in copy_list:
                self.removeCluster (item[0])
        
        self.graph_view.initGraphViewLists ()
        self.graph_view.initComm  ()
        self.graph_view.initModel ()
        
        self._cluster_page_list = []
        self.addCluster () # add the first cluster. At least one cluster needs to be always present.
        
        self.isClusterRemovalOverridden = False # remove override
    
    def removeCluster (self, cluster_id):
        
        self.graph_view.delegateClusterRemoval (cluster_id)
    
    def removeClusterPage (self, cluster_id):
        
        threshold = 1 if self.isClusterRemovalOverridden==False else 0
        
        qq = len(self._cluster_page_list)
        if qq > threshold:
            for i in range (qq-1, -1, -1):
                if int(self._cluster_page_list[i][0]) == cluster_id:
                    self._toolBox.removeItem (self._toolBox.indexOf(self._cluster_page_list[i][1]))
                    del self._cluster_page_list[i]
                    break
        
        if len(self._cluster_page_list) == 1:
            self.disableAllClusterPagesDeleteButton ()
    
    def disableAllClusterPagesDeleteButton (self):
        
        if len(self._cluster_page_list) > 0:
            for item in self._cluster_page_list:
                item[4].setEnabled (False)
    
    def enableAllClusterPagesDeleteButton (self):
        
        if len(self._cluster_page_list) > 0:
            for item in self._cluster_page_list:
                item[4].setEnabled (True)
    
    def updateClusterModelName (self, cluster_id, text):
        
        self.graph_view.delegateUpdateClusterName (cluster_id, text)
    
    def updateClusterViewName (self, cluster_id, text):
        
        if len(self._cluster_page_list) > 0:
            for item in self._cluster_page_list:
                if int(item[0]) == cluster_id:
                    item[3].setText (str(text))
    
    def updateCurrentClusterNodeList (self, node):
        
        # fetch the current cluster's id.
        curr_widget = self._toolBox.currentWidget()
        for item in self._cluster_page_list:
            if item[1] == curr_widget:
                
                # delegate cluster node list update.
                self.graph_view.delegateClusterNodeListUpdate (item[0], node)
                break
    
    def getCurrentClusterIndex (self):
        
        return self._toolBox.currentIndex ()
    
    # - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    def getGraphicsView (self):
        
        return self.graphicsView
    
    def resetView (self):
        
        self.zoomSlider.setValue (250)
        self.setupMatrix ()
        self.graphicsView.ensureVisible (QRectF (0, 0, 0, 0))
        
        self.resetButton.setEnabled (False)
    
    def setResetButtonEnabled (self):
        
        self.resetButton.setEnabled (True)
    
    def setupMatrix (self):
        
        scale = pow (2.0, (self.zoomSlider.value () - 250) / 50.0)
        
        matrix = QMatrix ()
        matrix.scale (scale, scale)
        
        self.graphicsView.setMatrix (matrix)
        self.setResetButtonEnabled ()
    
    def printOutGraph (self):
        
        qqq = QPainter (self.printer)
        self.graphicsView.render(qqq)
    
    def importNodesDescription (self):
        
        aa = QFileDialog (self).getOpenFileName()
        if aa != QString (u''): # it can be equal to QString(u'') when the user presses the Escape key, so in that circumstance, nothing is returned.
            self.graph_view.setNodesDescription (open(aa).read())
    
    def resetScene (self):
        
        self.removeAllClusters ()
        self.resetView ()
    
    def exportGraph (self):
        
        aa = QFileDialog (self).getSaveFileName ()
        if aa != QString (u''): # it can be equal to QString(u'') when the user presses the Escape key, so in that circumstance, nothing is returned.
            file0 = open (aa, 'w')
            file0.write (self.graph_view.delegateExport ())
            file0.close ()
            print '\n*** file exported.\n'
    
    def importGraph (self):
        
        aa = QFileDialog (self).getOpenFileName ()
        if aa != QString (u''): # it can be equal to QString(u'') when the user presses the Escape key, so in that circumstance, nothing is returned.
            file0 = open (aa, 'r')
            XML_content = file0.read()
            file0.close ()
            self.graph_view.delegateImport (XML_content)
            print '\n*** file imported.\n'
    
    # zoom slider
    def zoomIn  (self) : self.zoomSlider.setValue (self.zoomSlider.value() + 1)
    def zoomOut (self) : self.zoomSlider.setValue (self.zoomSlider.value() - 1)
    def getZoomSlider (self): return self.zoomSlider
    
    def setToolboxCSSColorScheme (self, css): self._toolBox.setStyleSheet (css)

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    def wireViewItemsUp (self):
        
        self.connect (self.newJADESceneBtn,    SIGNAL ("clicked()"), self.resetScene)
        self.connect (self.loadNodesDescrpBtn, SIGNAL ("clicked()"), self.importNodesDescription)
        self.connect (self.graphSaveBtn,       SIGNAL ("clicked()"), self.exportGraph)
        self.connect (self.graphLoadBtn,       SIGNAL ("clicked()"), self.importGraph)
        self.connect (self.printOutBtn,        SIGNAL ("clicked()"), self.printOutGraph)
Ejemplo n.º 22
0
	def __init__(self, template, character, typ, isCheckable=False, parent=None):
		super(CategoryWidget, self).__init__(parent)

		self.__storage = template
		self.__character = character

		self._layout = QVBoxLayout()
		self.setLayout( self._layout )

		self._toolBox = QToolBox()
		## Die Auflistung der Widgets soll auch unter Windows einen transparenten Hintergrund haben.
		self._toolBox.setObjectName("transparentWidget")
		## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen.
		if os.name == "nt":
			self._toolBox.setStyleSheet( "QScrollArea{ background: transparent; } QWidget#transparentWidget { background: transparent; }" )

		self._layout.addWidget( self._toolBox )

		self._typ = typ
		categories = self.__storage.categories(self._typ)

		# Diese Liste speichert den Index der ToolBox-Seite bei den unterschiedlichen Kategorien
		# {
		# 	Index: [Widget, Eigenschaft1, Eigenschaft2, ...]
		# }
		self._toolBoxPageList = {}

		for item in categories:
			# Für jede Kategorie wird ein eigener Abschnitt erzeugt.
			widgetCategory = QWidget()
			## Dank des Namens übernimmt dieses Widget den Stil des Eltern-Widgets.
			widgetCategory.setObjectName("transparentWidget")

			layoutCategory = QVBoxLayout()

			widgetCategory.setLayout( layoutCategory )

			## In dieser Liste sammle ich die Widgets, damit sie später bei Bedarf in die ToolBox eingefügt werden können.
			self._toolBoxPageList[item] = [widgetCategory]

			__list = list( self.__character.traits[self._typ][item].items() )
			__list.sort()
			for trait in __list:
				# Anlegen des Widgets, das diese Eigenschaft repräsentiert.
				traitWidget = None
				if isCheckable:
					traitWidget = CheckTrait( trait[1], self )
				else:
					traitWidget = CharaTrait( trait[1], self )
					traitWidget.setSpecialtiesHidden(True)
				if type(trait) != StandardTrait or not trait[1].custom:
					traitWidget.setDescriptionHidden(True)

				self._toolBoxPageList[item].append(trait[1])

				layoutCategory.addWidget( traitWidget )

				self.__character.traitVisibleReasonChanged.connect(traitWidget.hideOrShowTrait)

			# Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
			layoutCategory.addStretch()
		#Debug.debug(self._toolBoxPageList)
		self.__character.speciesChanged.connect(self.hideOrShowToolPage)
		self.__character.breedChanged.connect(self.hideOrShowToolPage)
		self.__character.factionChanged.connect(self.hideOrShowToolPage)
Ejemplo n.º 23
0
class CategoryWidget(QWidget):
	"""
	@brief Dieses Widget kann in Kategorien aufgeteilte Widgets aufnehmen. Es werden nur jene Kategorien angezeigt, welche auch ein anzuzeigendes Widget enthalten.
	"""


	def __init__(self, template, character, typ, isCheckable=False, parent=None):
		super(CategoryWidget, self).__init__(parent)

		self.__storage = template
		self.__character = character

		self._layout = QVBoxLayout()
		self.setLayout( self._layout )

		self._toolBox = QToolBox()
		## Die Auflistung der Widgets soll auch unter Windows einen transparenten Hintergrund haben.
		self._toolBox.setObjectName("transparentWidget")
		## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen.
		if os.name == "nt":
			self._toolBox.setStyleSheet( "QScrollArea{ background: transparent; } QWidget#transparentWidget { background: transparent; }" )

		self._layout.addWidget( self._toolBox )

		self._typ = typ
		categories = self.__storage.categories(self._typ)

		# Diese Liste speichert den Index der ToolBox-Seite bei den unterschiedlichen Kategorien
		# {
		# 	Index: [Widget, Eigenschaft1, Eigenschaft2, ...]
		# }
		self._toolBoxPageList = {}

		for item in categories:
			# Für jede Kategorie wird ein eigener Abschnitt erzeugt.
			widgetCategory = QWidget()
			## Dank des Namens übernimmt dieses Widget den Stil des Eltern-Widgets.
			widgetCategory.setObjectName("transparentWidget")

			layoutCategory = QVBoxLayout()

			widgetCategory.setLayout( layoutCategory )

			## In dieser Liste sammle ich die Widgets, damit sie später bei Bedarf in die ToolBox eingefügt werden können.
			self._toolBoxPageList[item] = [widgetCategory]

			__list = list( self.__character.traits[self._typ][item].items() )
			__list.sort()
			for trait in __list:
				# Anlegen des Widgets, das diese Eigenschaft repräsentiert.
				traitWidget = None
				if isCheckable:
					traitWidget = CheckTrait( trait[1], self )
				else:
					traitWidget = CharaTrait( trait[1], self )
					traitWidget.setSpecialtiesHidden(True)
				if type(trait) != StandardTrait or not trait[1].custom:
					traitWidget.setDescriptionHidden(True)

				self._toolBoxPageList[item].append(trait[1])

				layoutCategory.addWidget( traitWidget )

				self.__character.traitVisibleReasonChanged.connect(traitWidget.hideOrShowTrait)

			# Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
			layoutCategory.addStretch()
		#Debug.debug(self._toolBoxPageList)
		self.__character.speciesChanged.connect(self.hideOrShowToolPage)
		self.__character.breedChanged.connect(self.hideOrShowToolPage)
		self.__character.factionChanged.connect(self.hideOrShowToolPage)


	def hideOrShowToolPage(self, res):
		"""
		Verbirgt eine Seite der ToolBox, wenn alle darin enthaltenen Widgets versteckt sind oder diese Kategorie für die ausgewählte Brut/Fraktion nicht zur Verfügung steht. Ansonsten wird sie dargestellt.
		"""

		# Damit die Kategorien auch nach dem Entfernen und Hinzufügen von Eigenschaften alphapetisch sortiert bleiben.
		keys = list( self._toolBoxPageList.keys() )
		keys.sort()

		for item in keys:
			available = False
			for subitem in self._toolBoxPageList[item][1:]:
				## Alles ausblenden, was nicht zur Spezies paßt.
				#if (not subitem.species or subitem.species == self.__character.species):
				if (not subitem.species or subitem.species == self.__character.species) and (not subitem.only or self.__character.breed in subitem.only or self.__character.faction in subitem.only):
					available = True
					break
			if available:
				# Nicht hinzufügen, was schon in der Liste steht.
				if self._toolBox.indexOf(self._toolBoxPageList[item][0]) < 0:
					self._toolBox.addItem(self._toolBoxPageList[item][0], item)
					self._toolBoxPageList[item][0].setVisible(True)
			else:
				indexOfWidget = self._toolBox.indexOf(self._toolBoxPageList[item][0])
				if indexOfWidget >= 0:
					self._toolBox.removeItem(indexOfWidget)
				self._toolBoxPageList[item][0].setVisible(False)
Ejemplo n.º 24
0
    def __init__(self, app_admin, workspace, parent):
        super(NavigationPane, self).__init__(parent)

        self._workspace = workspace
        self.app_admin = app_admin
        
        tb = QToolBox()
        tb.setFrameShape(QFrame.NoFrame)
        tb.layout().setContentsMargins(0,0,0,0)
        tb.layout().setSpacing(1)
        tb.setObjectName('toolbox')
        tb.setMouseTracking(True)
        
        # hack for removing the dock title bar
        self.setTitleBarWidget(QWidget())
        self.setWidget(tb)
        self.setFeatures(QDockWidget.NoDockWidgetFeatures)

        self.app_admin.sections_changed_signal.connect(self.update_sections)
        self.update_sections()
Ejemplo n.º 25
0
class MeritWidget(TraitWidget):
    """
	@brief Das Widget, in welchem sämtliche Merits angeordnet sind.

	\todo Einen Knopf erstellen, über den der Benutzer angeben kann, welche Merits er denn wirklich alle angezeigt haben will.

	\todo Bei Merits mit Zusatztext (Language) in diesem men+ ein Zahlenfle dangeben, bei welchem der benutzer einstellen kann, wieviele verschiedene dieser scheinbar identischen merits er angezeigt haben will.
	"""
    def __init__(self, template, character, parent=None):
        super(MeritWidget, self).__init__(template, character, parent)

        self.__layout = QVBoxLayout()
        self.setLayout(self.__layout)

        self.__toolBox = QToolBox()
        ## Die Auflistung der Merits soll auch unter Windows einen transparenten Hintergrund haben.
        self.__toolBox.setObjectName("transparentWidget")
        ## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen.
        if os.name == "nt":
            self.__toolBox.setStyleSheet(
                "QScrollArea{ background: transparent; } QWidget#transparentWidget { background: transparent; }"
            )
        self.__layout.addWidget(self.__toolBox)

        self.__typ = "Merit"
        categories = []
        categories.extend(Config.CATEGORIES_MERITS)
        categories.extend(self._storage.categories(self.__typ))
        # Duplikate werden entfernt. Dadurch wird die in der Config-Klasse vorgegebene Reihenfolge eingehalten und zusätzliche, dort nicht erwähnte Kategorien werden hinterher angehängt.
        categories = ListTools.uniqify_ordered(categories)

        # Diese Liste speichert den Index der ToolBox-Seite bei den unterschiedlichen Kategorien
        self.__categoryIndex = {}

        # Merits werden in einer Spalte heruntergeschrieben, aber mit vertikalem Platz dazwischen.
        for item in categories:
            # Für jede Kategorie wird ein eigener Abschnitt erzeugt.
            widgetMeritCategory = QWidget()
            ## Dank des Namens übernimmt dieses Widget den Stil des Eltern-Widgets.
            widgetMeritCategory.setObjectName("transparentWidget")

            layoutMeritCategory = QVBoxLayout()
            widgetMeritCategory.setLayout(layoutMeritCategory)

            self.__toolBox.addItem(widgetMeritCategory, item)
            self.__categoryIndex[item] = self.__toolBox.count() - 1
            #Debug.debug(self.__categoryIndex)

            __list = list(self._character.traits[self.__typ][item].items())
            __list.sort()
            for merit in __list:
                #Debug.debug(merit)
                # Anlegen des Widgets, das diese Eigenschaft repräsentiert.
                traitWidget = CharaTrait(merit[1], self)
                traitWidget.setSpecialtiesHidden(True)
                if not merit[1].custom:
                    traitWidget.setDescriptionHidden(True)

                # Bei Merits sind nur bestimmte Werte erlaubt.
                #Debug.debug(self._storage.traits[self.__typ][item][merit[0]])
                traitWidget.setPossibleValues(self._storage.traits[
                    self.__typ][item][merit[1].identifier]["values"])

                # Es werden nur Eigenschaften der richtigen Alters- und Zeit-Kategorie angezeigt.
                self.hideReasonChanged.connect(traitWidget.hideOrShowTrait)

                layoutMeritCategory.addWidget(traitWidget)

                merit[1].valueChanged.connect(self.countMerits)
                #self._character.speciesChanged.connect(traitWidget.hideOrShowTrait_species)

            # Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
            layoutMeritCategory.addStretch()

        self.setMinimumWidth(Config.TRAIT_WIDTH_MIN)

        self._character.speciesChanged.connect(self.countMerits)

    #// 	dialog = new SelectMeritsDialog( this );
    #//
    #// 	QHBoxLayout* layout_button = new QHBoxLayout();
    #// 	layoutTop.addLayout( layout_button );
    #//
    #// 	button = new QPushButton();
    #// 	button.setIcon( style().standardIcon( QStyle::SP_FileDialogStart ) );
    #//
    #// 	layout_button.addStretch();
    #// 	layout_button.addWidget( button );
    #//
    #// 	connect( button, SIGNAL( clicked( bool ) ), dialog, SLOT( exec() ) );

    def countMerits(self):
        """
		Zält die Merits in einer Kategorie, deren Wert größer 0 ist. Dieser Wert wird dann in die Überschrift der einzelnen ToolBox-Seiten angezeigt, um dem Benutzer die Übersicht zu bewahren.

		Es wird nur dann etwas angezeigt, wenn der Weert größer 0 ist.

		Versteckte Eigenschaften. also solche, die der Spezies nicht zur Verfügung stehen, können einen Wert > 0 haben, sollten aber nicht mitgezählt werden.
		"""

        for item in self._character.traits[self.__typ]:
            numberInCategory = 0
            for subitem in self._character.traits[self.__typ][item].values():
                if subitem.value > 0 and (not subitem.species
                                          or subitem.species
                                          == self._character.species):
                    numberInCategory += 1

            # ToolBox-Seite des entsprechenden Kategorie mit der Anzahl gewählter Merits beschriften.
            if numberInCategory > 0:
                self.__toolBox.setItemText(
                    self.__categoryIndex[item],
                    "{} ({})".format(item, numberInCategory))
            else:
                self.__toolBox.setItemText(self.__categoryIndex[item], item)