summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/shutdown.xml14
-rw-r--r--portato/gui/qt/windows.py66
-rw-r--r--portato/gui/templates/ui/AboutDialog.ui144
-rw-r--r--portato/gui/templates/ui/MainWindow.ui18
-rw-r--r--portato/plugins/shutdown.py17
5 files changed, 147 insertions, 112 deletions
diff --git a/plugins/shutdown.xml b/plugins/shutdown.xml
new file mode 100644
index 0000000..98f39d3
--- /dev/null
+++ b/plugins/shutdown.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<plugin
+ author="René 'Necoro' Neumann"
+ name="Shutdown">
+ <import>portato.plugins.shutdown</import>
+
+ <hook
+ hook = "after_emerge"
+ call = "shutdown">
+ <connect type="after" />
+ </hook>
+
+ <disabled />
+</plugin>
diff --git a/portato/gui/qt/windows.py b/portato/gui/qt/windows.py
index abb69ad..7c1726e 100644
--- a/portato/gui/qt/windows.py
+++ b/portato/gui/qt/windows.py
@@ -81,20 +81,60 @@ class Window (object):
return wrapper
+class PluginDialog (Window):
+ __metaclass__ = WindowMeta
+
+ def __init__ (self, parent, plugins):
+
+ Window.__init__(self, parent)
+
+ self.pluginList.setHeaderLabels(["Plugin", "Author"])
+ self.plugins = {}
+ self.changedPlugins = {}
+
+ for p in plugins:
+ item = Qt.QTreeWidgetItem(self.pluginList, [p.name,p.author])
+ item.setCheckState(0, qCheck(p.is_enabled()))
+ self.plugins.update({self.create_key(p.name,p.author) : p}) # create a list of plugins
+
+ self.pluginList.resizeColumnToContents(0)
+
+ Qt.QObject.connect(self.pluginList, Qt.SIGNAL("itemClicked(QTreeWidgetItem*, int)"), self.cb_plugin_toggled)
+
+ def create_key (self, name, author):
+ return str(name + "_" + author)
+
+ def cb_plugin_toggled (self, item, col):
+ if col != 0:
+ return
+
+ self.changedPlugins.update({ \
+ self.create_key(str(item.text(0)), str(item.text(1))) : \
+ qIsChecked(item.checkState(0))\
+ })
+
+ @Qt.pyqtSignature("")
+ def on_buttonBox_accepted(self):
+ for pluginKey, value in self.changedPlugins.iteritems():
+ self.plugins[pluginKey].set_enabled(value)
+
+ self.accept()
+
class AboutDialog (Window):
"""A window showing the "about"-informations."""
__metaclass__ = WindowMeta
- def __init__ (self, parent = None, plugins = []):
+ def __init__ (self, parent = None):
"""Constructor.
@param parent: the parent window
- @type parent: Qt.QWidget
- @param plugins: The list of plugins (author,name) to show in the "Plugins"-Tab.
- @type plugins: (string, string)[]"""
+ @type parent: Qt.QWidget"""
Window.__init__(self, parent)
+ self.pix = Qt.QPixmap(APP_ICON)
+ self.imgLabel.setPixmap(self.pix) # yes we have to use a label for the image ...
+
self.label.setText("""
<font size=5><b>Portato v.%s</b></font><br><br>
A Portage-GUI<br>
@@ -104,15 +144,7 @@ Copyright (C) 2006-2007 Ren&eacute; 'Necoro' Neumann &lt;necoro@necoro.net&gt;<b
<br>
Icon created by P4R4D0X""" % VERSION)
- self.pluginList.setHeaderLabels(["Plugin", "Author"])
- for p in plugins:
- Qt.QTreeWidgetItem(self.pluginList, list(p))
-
- self.pluginList.resizeColumnToContents(0)
-
- self.adjustSize()
-
class SearchDialog (Window):
"""A window showing the results of a search process."""
__metaclass__ = WindowMeta
@@ -805,13 +837,15 @@ class MainWindow (Window):
@Qt.pyqtSignature("")
def on_aboutAction_triggered (self):
- queue = plugin.get_plugin_queue()
+ AboutDialog(self).exec_()
+
+ @Qt.pyqtSignature("")
+ def on_pluginAction_triggered (self):
+ queue = plugin.get_plugin_queue().get_plugins()
if queue is None:
queue = []
- else:
- queue = queue.get_plugin_data()
- AboutDialog(self, queue).exec_()
+ PluginDialog(self, queue).exec_()
@Qt.pyqtSignature("")
def on_prefAction_triggered (self):
diff --git a/portato/gui/templates/ui/AboutDialog.ui b/portato/gui/templates/ui/AboutDialog.ui
index b4064dd..ce89b44 100644
--- a/portato/gui/templates/ui/AboutDialog.ui
+++ b/portato/gui/templates/ui/AboutDialog.ui
@@ -8,8 +8,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>369</width>
- <height>270</height>
+ <width>400</width>
+ <height>300</height>
</rect>
</property>
<property name="windowTitle" >
@@ -23,94 +23,42 @@
<number>6</number>
</property>
<item>
- <widget class="QTabWidget" name="tabWidget" >
- <property name="currentIndex" >
- <number>0</number>
+ <widget class="QLabel" name="imgLabel" >
+ <property name="text" >
+ <string/>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label" >
+ <property name="text" >
+ <string>TextLabel</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignCenter</set>
+ </property>
+ <property name="wordWrap" >
+ <bool>true</bool>
</property>
- <widget class="QWidget" name="tab" >
- <attribute name="title" >
- <string>About</string>
- </attribute>
- <layout class="QVBoxLayout" >
- <property name="margin" >
- <number>9</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item>
- <widget class="QLabel" name="label" >
- <property name="text" >
- <string>TextLabel</string>
- </property>
- <property name="alignment" >
- <set>Qt::AlignCenter</set>
- </property>
- <property name="wordWrap" >
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <spacer>
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" >
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="tab_2" >
- <attribute name="title" >
- <string>Plugins</string>
- </attribute>
- <layout class="QVBoxLayout" >
- <property name="margin" >
- <number>9</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item>
- <widget class="QTreeWidget" name="pluginList" >
- <property name="editTriggers" >
- <set>QAbstractItemView::NoEditTriggers</set>
- </property>
- <property name="showDropIndicator" stdset="0" >
- <bool>false</bool>
- </property>
- <property name="alternatingRowColors" >
- <bool>true</bool>
- </property>
- <property name="rootIsDecorated" >
- <bool>false</bool>
- </property>
- <property name="columnCount" >
- <number>2</number>
- </property>
- <column>
- <property name="text" >
- <string>1</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>1</string>
- </property>
- </column>
- </widget>
- </item>
- </layout>
- </widget>
</widget>
</item>
<item>
+ <spacer>
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" >
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
<widget class="QDialogButtonBox" name="buttonBox" >
<property name="orientation" >
<enum>Qt::Horizontal</enum>
@@ -134,12 +82,28 @@
<slot>accept()</slot>
<hints>
<hint type="sourcelabel" >
- <x>174</x>
- <y>252</y>
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>AboutDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>316</x>
+ <y>260</y>
</hint>
<hint type="destinationlabel" >
- <x>176</x>
- <y>197</y>
+ <x>286</x>
+ <y>274</y>
</hint>
</hints>
</connection>
diff --git a/portato/gui/templates/ui/MainWindow.ui b/portato/gui/templates/ui/MainWindow.ui
index e2eb0dc..9a3e15e 100644
--- a/portato/gui/templates/ui/MainWindow.ui
+++ b/portato/gui/templates/ui/MainWindow.ui
@@ -428,12 +428,6 @@ p, li { white-space: pre-wrap; }
<addaction name="separator" />
<addaction name="quitAction" />
</widget>
- <widget class="QMenu" name="helpMenu" >
- <property name="title" >
- <string>&amp;?</string>
- </property>
- <addaction name="aboutAction" />
- </widget>
<widget class="QMenu" name="emergeMenu" >
<property name="title" >
<string>&amp;Emerge</string>
@@ -448,6 +442,13 @@ p, li { white-space: pre-wrap; }
<addaction name="separator" />
<addaction name="killAction" />
</widget>
+ <widget class="QMenu" name="helpMenu" >
+ <property name="title" >
+ <string>&amp;?</string>
+ </property>
+ <addaction name="aboutAction" />
+ <addaction name="pluginAction" />
+ </widget>
<addaction name="fileMenu" />
<addaction name="emergeMenu" />
<addaction name="helpMenu" />
@@ -540,6 +541,11 @@ p, li { white-space: pre-wrap; }
<string>Show &amp;new packages</string>
</property>
</action>
+ <action name="pluginAction" >
+ <property name="text" >
+ <string>Plugins</string>
+ </property>
+ </action>
</widget>
<customwidgets>
<customwidget>
diff --git a/portato/plugins/shutdown.py b/portato/plugins/shutdown.py
new file mode 100644
index 0000000..a29ee6f
--- /dev/null
+++ b/portato/plugins/shutdown.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+#
+# File: portato/plugins/shutdown.py
+# This file is part of the Portato-Project, a graphical portage-frontend.
+#
+# Copyright (C) 2007 René 'Necoro' Neumann
+# This is free software. You may redistribute copies of it under the terms of
+# the GNU General Public License version 2.
+# There is NO WARRANTY, to the extent permitted by law.
+#
+# Written by René 'Necoro' Neumann <necoro@necoro.net>
+
+import os
+
+def shutdown (*args):
+ """Shutdown the computer. May not work if not root."""
+ os.system("shutdown -h now")