summaryrefslogtreecommitdiff
path: root/src/frontend
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-06-24 21:55:37 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-06-24 21:55:37 +0100
commitf7e54cc8a29e5fa319ce21d6ec268e210397740a (patch)
tree5078d7a5f7f2393aa3b5068d980b0d3598bff878 /src/frontend
parent2faa4c83dbaca3958feb092c9776f016a0133e8f (diff)
write a proper Makefile, rearrange source code a bit
Diffstat (limited to 'src/frontend')
-rwxr-xr-xsrc/frontend/cli/sisyphus-cli.py33
-rwxr-xr-xsrc/frontend/cli/sisyphus-cli.sh116
-rwxr-xr-xsrc/frontend/gui/accesories.py50
-rwxr-xr-xsrc/frontend/gui/development.py50
-rwxr-xr-xsrc/frontend/gui/everything.py61
-rwxr-xr-xsrc/frontend/gui/games.py77
-rwxr-xr-xsrc/frontend/gui/graphics.py50
-rw-r--r--src/frontend/gui/icon/category_accessories.pngbin0 -> 10321 bytes
-rw-r--r--src/frontend/gui/icon/category_all.pngbin0 -> 16629 bytes
-rw-r--r--src/frontend/gui/icon/category_development.pngbin0 -> 6675 bytes
-rw-r--r--src/frontend/gui/icon/category_games.pngbin0 -> 3165 bytes
-rw-r--r--src/frontend/gui/icon/category_graphics.pngbin0 -> 31803 bytes
-rw-r--r--src/frontend/gui/icon/category_internet.pngbin0 -> 7535 bytes
-rw-r--r--src/frontend/gui/icon/category_local.pngbin0 -> 5384 bytes
-rw-r--r--src/frontend/gui/icon/category_multimedia.pngbin0 -> 5276 bytes
-rw-r--r--src/frontend/gui/icon/category_office.pngbin0 -> 5638 bytes
-rw-r--r--src/frontend/gui/icon/category_system.pngbin0 -> 9621 bytes
-rw-r--r--src/frontend/gui/icon/package_install.pngbin0 -> 498 bytes
-rw-r--r--src/frontend/gui/icon/package_search.pngbin0 -> 2959 bytes
-rw-r--r--src/frontend/gui/icon/package_uninstall.pngbin0 -> 250 bytes
-rw-r--r--src/frontend/gui/icon/remove_orphans.pngbin0 -> 354 bytes
-rw-r--r--src/frontend/gui/icon/system_upgrade.pngbin0 -> 1089 bytes
-rw-r--r--src/frontend/gui/icon/window_close.pngbin0 -> 971 bytes
-rw-r--r--src/frontend/gui/icon/window_icon.pngbin0 -> 2691 bytes
-rwxr-xr-xsrc/frontend/gui/internet.py100
-rwxr-xr-xsrc/frontend/gui/local.py50
-rwxr-xr-xsrc/frontend/gui/multimedia.py50
-rwxr-xr-xsrc/frontend/gui/office.py84
-rwxr-xr-xsrc/frontend/gui/sisyphus-gui.py106
-rwxr-xr-xsrc/frontend/gui/system.py50
-rw-r--r--src/frontend/gui/ui/accesories.ui220
-rw-r--r--src/frontend/gui/ui/development.ui220
-rw-r--r--src/frontend/gui/ui/everything.ui220
-rw-r--r--src/frontend/gui/ui/games.ui220
-rw-r--r--src/frontend/gui/ui/graphics.ui220
-rw-r--r--src/frontend/gui/ui/internet.ui220
-rw-r--r--src/frontend/gui/ui/local.ui217
-rw-r--r--src/frontend/gui/ui/multimedia.ui220
-rw-r--r--src/frontend/gui/ui/office.ui220
-rw-r--r--src/frontend/gui/ui/sisyphus-gui.ui520
-rw-r--r--src/frontend/gui/ui/system.ui220
41 files changed, 3594 insertions, 0 deletions
diff --git a/src/frontend/cli/sisyphus-cli.py b/src/frontend/cli/sisyphus-cli.py
new file mode 100755
index 0000000..3d4fb3a
--- /dev/null
+++ b/src/frontend/cli/sisyphus-cli.py
@@ -0,0 +1,33 @@
+#!/usr/bin/python3
+
+import sys
+import subprocess
+from libsisyphus import *
+
+check_if_srcmode()
+
+if "__main__" == __name__:
+ if "install" in sys.argv[1:]:
+ sisyphus_pkg_install()
+ elif "uninstall" in sys.argv[1:]:
+ sisyphus_pkg_uninstall()
+ elif "force-uninstall" in sys.argv[1:]:
+ sisyphus_pkg_force_uninstall()
+ elif "remove-orphans" in sys.argv[1:]:
+ sisyphus_pkg_remove_orphans()
+ elif "upgrade" in sys.argv[1:]:
+ sisyphus_pkg_system_upgrade()
+ elif "auto-install" in sys.argv[1:]:
+ sisyphus_pkg_auto_install()
+ elif "auto-uninstall" in sys.argv[1:]:
+ sisyphus_pkg_auto_uninstall()
+ elif "auto-force-uninstall" in sys.argv[1:]:
+ sisyphus_pkg_auto_force_uninstall()
+ elif "auto-remove-orphans" in sys.argv[1:]:
+ sisyphus_pkg_auto_remove_orphans()
+ elif "auto-upgrade" in sys.argv[1:]:
+ sisyphus_pkg_auto_system_upgrade()
+ elif "search" in sys.argv[1:]:
+ sisyphus_pkg_search()
+ elif "update" in sys.argv[1:]:
+ sisyphus_pkg_system_update()
diff --git a/src/frontend/cli/sisyphus-cli.sh b/src/frontend/cli/sisyphus-cli.sh
new file mode 100755
index 0000000..79023aa
--- /dev/null
+++ b/src/frontend/cli/sisyphus-cli.sh
@@ -0,0 +1,116 @@
+#!/usr/bin/env bash
+
+source /usr/lib/sisyphus/libsisyphus.sh
+
+checksystemmode
+
+action=$1
+shift
+
+case "$action" in
+ install)
+ checksync
+ localdbcsvpre
+ emerge -a "$@"
+ updatelocaldb
+ ;;
+ uninstall)
+ checksync
+ localdbcsvpre
+ emerge --depclean -a "$@"
+ updatelocaldb
+ ;;
+ force-uninstall)
+ checksync
+ localdbcsvpre
+ emerge --unmerge -a "$@"
+ updatelocaldb
+ ;;
+ remove-orphans)
+ checksync
+ localdbcsvpre
+ emerge --depclean -a
+ updatelocaldb
+ ;;
+ upgrade)
+ checksync
+ localdbcsvpre
+ emerge -uDaN --with-bdeps=y @system @world "$@"
+ updatelocaldb
+ ;;
+ auto-install)
+ redcoresync
+ localdbcsvpre
+ emerge "$@"
+ updatelocaldb
+ ;;
+ auto-uninstall)
+ redcoresync
+ localdbcsvpre
+ emerge --depclean "$@"
+ updatelocaldb
+ ;;
+ auto-force-uninstall)
+ redcoresync
+ localdbcsvpre
+ emerge --unmerge "$@"
+ updatelocaldb
+ ;;
+ auto-remove-orphans)
+ redcoresync
+ localdbcsvpre
+ emerge --depclean -q
+ updatelocaldb
+ ;;
+ auto-upgrade)
+ redcoresync
+ localdbcsvpre
+ emerge -uDN --with-bdeps=y @system @world "$@"
+ updatelocaldb
+ ;;
+ search)
+ emerge -s "$@"
+ ;;
+ update)
+ redcoresync
+ ;;
+ belongs)
+ equery belongs "$@"
+ ;;
+ depends)
+ equery depends "$@"
+ ;;
+ files)
+ equery files "$@"
+ ;;
+ sysinfo)
+ emerge --info
+ ;;
+ *)
+ cat <<-"EOH"
+ Usage: sisyphus command [package(s)]
+
+ sisyphus is a simple wrapper around portage, gentoolkit, and portage-utils that provides an
+ apt-get/yum-alike interface to these commands, to assist people transitioning from
+ Debian/RedHat-based systems to Gentoo.
+
+ Commands :
+ install - Install new packages
+ uninstall - Uninstall packages safely
+ force-uninstall - *Unsafely* uninstall packages
+ remove-orphans - Uninstall packages that are no longer needed
+ upgrade - Upgrade system
+ auto-install - Install new packages (no confirmation)
+ auto-uninstall - Uninstall packages safely (no confirmation)
+ auto-force-uninstall - *Unsafely* uninstall packages (no confirmation)
+ auto-remove-orphans - Uninstall packages that are no longer needed (no confirmation)
+ auto-upgrade - Upgrade system (no confirmation)
+ search - Search for packages
+ update - Resync portage tree, portage config && redcore overlay
+ belongs - List what package FILE(s) belong to
+ depends - List all packages directly depending on given package
+ files - List all files installed by package
+ sysinfo - Display information about installed core packages and portage configuration
+ EOH
+ ;;
+esac
diff --git a/src/frontend/gui/accesories.py b/src/frontend/gui/accesories.py
new file mode 100755
index 0000000..32d3b68
--- /dev/null
+++ b/src/frontend/gui/accesories.py
@@ -0,0 +1,50 @@
+#!/usr/bin/python3
+import sys, subprocess, sqlite3
+from PyQt5 import QtCore, QtGui, QtWidgets, uic
+
+class Accesories(QtWidgets.QMainWindow):
+ def __init__(self):
+ super(Accesories, self).__init__()
+ uic.loadUi('ui/accesories.ui', self)
+ self.centerOnScreen()
+ self.show()
+ self.load_packages()
+
+ self.package_install.clicked.connect(self.install_package)
+ self.package_uninstall.clicked.connect(self.uninstall_package)
+ self.orphans_remove.clicked.connect(self.remove_orphans)
+ self.category_exit.clicked.connect(self.exit_category)
+
+ def centerOnScreen(self):
+ resolution = QtWidgets.QDesktopWidget().screenGeometry()
+ self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
+ (resolution.height() / 2) - (self.frameSize().height() / 2))
+
+ def install_package(self):
+ pkgname = self.table_accesories.item(self.table_accesories.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-install'] + pkgname.split())
+
+ def uninstall_package(self):
+ pkgname = self.table_accesories.item(self.table_accesories.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-uninstall'] + pkgname.split())
+
+ def remove_orphans(self):
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'remove-orphans'])
+
+ def exit_category(self):
+ self.close()
+
+ def load_packages(self):
+ with sqlite3.connect('/var/lib/sisyphus/db/sisyphus.db') as db:
+ cursor=db.cursor()
+ cursor.execute('''SELECT * from remote_packages''')
+ rows = cursor.fetchall()
+
+ for row in rows:
+ inx = rows.index(row)
+ self.table_accesories.insertRow(inx)
+ self.table_accesories.setItem(inx, 0, QtWidgets.QTableWidgetItem(row[0]))
+ self.table_accesories.setItem(inx, 1, QtWidgets.QTableWidgetItem(row[1]))
+ self.table_accesories.setItem(inx, 2, QtWidgets.QTableWidgetItem(row[2]))
+ self.table_accesories.setItem(inx, 3, QtWidgets.QTableWidgetItem(row[3]))
+ self.table_accesories.setItem(inx, 4, QtWidgets.QTableWidgetItem(row[4]))
diff --git a/src/frontend/gui/development.py b/src/frontend/gui/development.py
new file mode 100755
index 0000000..ede83a4
--- /dev/null
+++ b/src/frontend/gui/development.py
@@ -0,0 +1,50 @@
+#!/usr/bin/python3
+import sys, subprocess, sqlite3
+from PyQt5 import QtCore, QtGui, QtWidgets, uic
+
+class Development(QtWidgets.QMainWindow):
+ def __init__(self):
+ super(Development, self).__init__()
+ uic.loadUi('ui/development.ui', self)
+ self.centerOnScreen()
+ self.show()
+ self.load_packages()
+
+ self.package_install.clicked.connect(self.install_package)
+ self.package_uninstall.clicked.connect(self.uninstall_package)
+ self.orphans_remove.clicked.connect(self.remove_orphans)
+ self.category_exit.clicked.connect(self.exit_category)
+
+ def centerOnScreen(self):
+ resolution = QtWidgets.QDesktopWidget().screenGeometry()
+ self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
+ (resolution.height() / 2) - (self.frameSize().height() / 2))
+
+ def install_package(self):
+ pkgname = self.table_development.item(self.table_development.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-install'] + pkgname.split())
+
+ def uninstall_package(self):
+ pkgname = self.table_development.item(self.table_development.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-uninstall'] + pkgname.split())
+
+ def remove_orphans(self):
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-uninstall'])
+
+ def exit_category(self):
+ self.close()
+
+ def load_packages(self):
+ with sqlite3.connect('/var/lib/sisyphus/db/sisyphus.db') as db:
+ cursor=db.cursor()
+ cursor.execute('''SELECT * from remote_packages''')
+ rows = cursor.fetchall()
+
+ for row in rows:
+ inx = rows.index(row)
+ self.table_development.insertRow(inx)
+ self.table_development.setItem(inx, 0, QtWidgets.QTableWidgetItem(row[0]))
+ self.table_development.setItem(inx, 1, QtWidgets.QTableWidgetItem(row[1]))
+ self.table_development.setItem(inx, 2, QtWidgets.QTableWidgetItem(row[2]))
+ self.table_development.setItem(inx, 3, QtWidgets.QTableWidgetItem(row[3]))
+ self.table_development.setItem(inx, 4, QtWidgets.QTableWidgetItem(row[4]))
diff --git a/src/frontend/gui/everything.py b/src/frontend/gui/everything.py
new file mode 100755
index 0000000..ac83ca6
--- /dev/null
+++ b/src/frontend/gui/everything.py
@@ -0,0 +1,61 @@
+#!/usr/bin/python3
+import sys, subprocess, sqlite3
+from PyQt5 import QtCore, QtGui, QtWidgets, uic
+
+class Everything(QtWidgets.QMainWindow):
+ def __init__(self):
+ super(Everything, self).__init__()
+ uic.loadUi('ui/everything.ui', self)
+ self.centerOnScreen()
+ self.show()
+ self.load_packages()
+
+ self.package_install.clicked.connect(self.install_package)
+ self.package_uninstall.clicked.connect(self.uninstall_package)
+ self.orphans_remove.clicked.connect(self.remove_orphans)
+ self.category_exit.clicked.connect(self.exit_category)
+
+ def centerOnScreen(self):
+ resolution = QtWidgets.QDesktopWidget().screenGeometry()
+ self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
+ (resolution.height() / 2) - (self.frameSize().height() / 2))
+
+ def install_package(self):
+ pkgname = self.table_everything.item(self.table_everything.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-install'] + pkgname.split())
+
+ def uninstall_package(self):
+ pkgname = self.table_everything.item(self.table_everything.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-uninstall'] + pkgname.split())
+
+ def remove_orphans(self):
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'remove-orphans'])
+
+ def exit_category(self):
+ self.close()
+
+ def load_packages(self):
+ with sqlite3.connect('/var/lib/sisyphus/db/sisyphus.db') as db:
+ cursor=db.cursor()
+ cursor.execute('''SELECT
+ a.category AS cat,
+ a.name AS pn,
+ a.version AS av,
+ i.version AS iv,
+ a.description AS descr
+ FROM remote_packages AS a
+ LEFT JOIN local_packages AS i
+ ON a.category = i.category
+ AND a.name = i.name
+ AND a.slot = i.slot
+ ''')
+ rows = cursor.fetchall()
+
+ for row in rows:
+ inx = rows.index(row)
+ self.table_everything.insertRow(inx)
+ self.table_everything.setItem(inx, 0, QtWidgets.QTableWidgetItem(row[0]))
+ self.table_everything.setItem(inx, 1, QtWidgets.QTableWidgetItem(row[1]))
+ self.table_everything.setItem(inx, 2, QtWidgets.QTableWidgetItem(row[2]))
+ self.table_everything.setItem(inx, 3, QtWidgets.QTableWidgetItem(row[3]))
+ self.table_everything.setItem(inx, 4, QtWidgets.QTableWidgetItem(row[4]))
diff --git a/src/frontend/gui/games.py b/src/frontend/gui/games.py
new file mode 100755
index 0000000..5eed9fa
--- /dev/null
+++ b/src/frontend/gui/games.py
@@ -0,0 +1,77 @@
+#!/usr/bin/python3
+import sys, subprocess, sqlite3
+from PyQt5 import QtCore, QtGui, QtWidgets, uic
+
+class Games(QtWidgets.QMainWindow):
+ def __init__(self):
+ super(Games, self).__init__()
+ uic.loadUi('ui/games.ui', self)
+ self.centerOnScreen()
+ self.show()
+ self.load_packages()
+
+ self.package_install.clicked.connect(self.install_package)
+ self.package_uninstall.clicked.connect(self.uninstall_package)
+ self.orphans_remove.clicked.connect(self.remove_orphans)
+ self.category_exit.clicked.connect(self.exit_category)
+
+ def centerOnScreen(self):
+ resolution = QtWidgets.QDesktopWidget().screenGeometry()
+ self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
+ (resolution.height() / 2) - (self.frameSize().height() / 2))
+
+ def install_package(self):
+ pkgname = self.table_games.item(self.table_games.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-install'] + pkgname.split())
+
+ def uninstall_package(self):
+ pkgname = self.table_games.item(self.table_games.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-uninstall'] + pkgname.split())
+
+ def remove_orphans(self):
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'remove-orphans'])
+
+ def exit_category(self):
+ self.close()
+
+ def load_packages(self):
+ with sqlite3.connect('/var/lib/sisyphus/db/sisyphus.db') as db:
+ cursor=db.cursor()
+ cursor.execute('''SELECT
+ a.category AS cat,
+ a.name AS pn,
+ a.version AS av,
+ i.version AS iv,
+ a.description AS descr
+ FROM remote_packages AS a
+ LEFT JOIN local_packages AS i
+ ON a.category = i.category
+ AND a.name = i.name
+ AND a.slot = i.slot
+ WHERE a.name IN
+ ('steam',
+ 'playonlinux',
+ 'armagetronad',
+ 'chromium-bsu',
+ 'supertuxkart',
+ 'teeworlds',
+ 'dosbox',
+ 'snes9x',
+ 'zsnes',
+ 'urbanterror',
+ 'openttd',
+ '0ad',
+ 'warzone2100',
+ 'wesnoth',
+ 'xonotic')
+ ''')
+ rows = cursor.fetchall()
+
+ for row in rows:
+ inx = rows.index(row)
+ self.table_games.insertRow(inx)
+ self.table_games.setItem(inx, 0, QtWidgets.QTableWidgetItem(row[0]))
+ self.table_games.setItem(inx, 1, QtWidgets.QTableWidgetItem(row[1]))
+ self.table_games.setItem(inx, 2, QtWidgets.QTableWidgetItem(row[2]))
+ self.table_games.setItem(inx, 3, QtWidgets.QTableWidgetItem(row[3]))
+ self.table_games.setItem(inx, 4, QtWidgets.QTableWidgetItem(row[4]))
diff --git a/src/frontend/gui/graphics.py b/src/frontend/gui/graphics.py
new file mode 100755
index 0000000..a50a169
--- /dev/null
+++ b/src/frontend/gui/graphics.py
@@ -0,0 +1,50 @@
+#!/usr/bin/python3
+import sys, subprocess, sqlite3
+from PyQt5 import QtCore, QtGui, QtWidgets, uic
+
+class Graphics(QtWidgets.QMainWindow):
+ def __init__(self):
+ super(Graphics, self).__init__()
+ uic.loadUi('ui/graphics.ui', self)
+ self.centerOnScreen()
+ self.show()
+ self.load_packages()
+
+ self.package_install.clicked.connect(self.install_package)
+ self.package_uninstall.clicked.connect(self.uninstall_package)
+ self.orphans_remove.clicked.connect(self.remove_orphans)
+ self.category_exit.clicked.connect(self.exit_category)
+
+ def centerOnScreen(self):
+ resolution = QtWidgets.QDesktopWidget().screenGeometry()
+ self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
+ (resolution.height() / 2) - (self.frameSize().height() / 2))
+
+ def install_package(self):
+ pkgname = self.table_graphics.item(self.table_graphics.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-install'] + pkgname.split())
+
+ def uninstall_package(self):
+ pkgname = self.table_graphics.item(self.table_graphics.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-uninstall'] + pkgname.split())
+
+ def remove_orphans(self):
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'remove-orphans'])
+
+ def exit_category(self):
+ self.close()
+
+ def load_packages(self):
+ with sqlite3.connect('/var/lib/sisyphus/db/sisyphus.db') as db:
+ cursor=db.cursor()
+ cursor.execute('''SELECT * from remote_packages''')
+ rows = cursor.fetchall()
+
+ for row in rows:
+ inx = rows.index(row)
+ self.table_graphics.insertRow(inx)
+ self.table_graphics.setItem(inx, 0, QtWidgets.QTableWidgetItem(row[0]))
+ self.table_graphics.setItem(inx, 1, QtWidgets.QTableWidgetItem(row[1]))
+ self.table_graphics.setItem(inx, 2, QtWidgets.QTableWidgetItem(row[2]))
+ self.table_graphics.setItem(inx, 3, QtWidgets.QTableWidgetItem(row[3]))
+ self.table_graphics.setItem(inx, 4, QtWidgets.QTableWidgetItem(row[4]))
diff --git a/src/frontend/gui/icon/category_accessories.png b/src/frontend/gui/icon/category_accessories.png
new file mode 100644
index 0000000..becbfc9
--- /dev/null
+++ b/src/frontend/gui/icon/category_accessories.png
Binary files differ
diff --git a/src/frontend/gui/icon/category_all.png b/src/frontend/gui/icon/category_all.png
new file mode 100644
index 0000000..462c97c
--- /dev/null
+++ b/src/frontend/gui/icon/category_all.png
Binary files differ
diff --git a/src/frontend/gui/icon/category_development.png b/src/frontend/gui/icon/category_development.png
new file mode 100644
index 0000000..b2c160e
--- /dev/null
+++ b/src/frontend/gui/icon/category_development.png
Binary files differ
diff --git a/src/frontend/gui/icon/category_games.png b/src/frontend/gui/icon/category_games.png
new file mode 100644
index 0000000..b128490
--- /dev/null
+++ b/src/frontend/gui/icon/category_games.png
Binary files differ
diff --git a/src/frontend/gui/icon/category_graphics.png b/src/frontend/gui/icon/category_graphics.png
new file mode 100644
index 0000000..63c7c5e
--- /dev/null
+++ b/src/frontend/gui/icon/category_graphics.png
Binary files differ
diff --git a/src/frontend/gui/icon/category_internet.png b/src/frontend/gui/icon/category_internet.png
new file mode 100644
index 0000000..9f630cd
--- /dev/null
+++ b/src/frontend/gui/icon/category_internet.png
Binary files differ
diff --git a/src/frontend/gui/icon/category_local.png b/src/frontend/gui/icon/category_local.png
new file mode 100644
index 0000000..561d218
--- /dev/null
+++ b/src/frontend/gui/icon/category_local.png
Binary files differ
diff --git a/src/frontend/gui/icon/category_multimedia.png b/src/frontend/gui/icon/category_multimedia.png
new file mode 100644
index 0000000..e6414e6
--- /dev/null
+++ b/src/frontend/gui/icon/category_multimedia.png
Binary files differ
diff --git a/src/frontend/gui/icon/category_office.png b/src/frontend/gui/icon/category_office.png
new file mode 100644
index 0000000..78af8a4
--- /dev/null
+++ b/src/frontend/gui/icon/category_office.png
Binary files differ
diff --git a/src/frontend/gui/icon/category_system.png b/src/frontend/gui/icon/category_system.png
new file mode 100644
index 0000000..2a360bd
--- /dev/null
+++ b/src/frontend/gui/icon/category_system.png
Binary files differ
diff --git a/src/frontend/gui/icon/package_install.png b/src/frontend/gui/icon/package_install.png
new file mode 100644
index 0000000..736cddf
--- /dev/null
+++ b/src/frontend/gui/icon/package_install.png
Binary files differ
diff --git a/src/frontend/gui/icon/package_search.png b/src/frontend/gui/icon/package_search.png
new file mode 100644
index 0000000..5f50a53
--- /dev/null
+++ b/src/frontend/gui/icon/package_search.png
Binary files differ
diff --git a/src/frontend/gui/icon/package_uninstall.png b/src/frontend/gui/icon/package_uninstall.png
new file mode 100644
index 0000000..187ce04
--- /dev/null
+++ b/src/frontend/gui/icon/package_uninstall.png
Binary files differ
diff --git a/src/frontend/gui/icon/remove_orphans.png b/src/frontend/gui/icon/remove_orphans.png
new file mode 100644
index 0000000..b165bf7
--- /dev/null
+++ b/src/frontend/gui/icon/remove_orphans.png
Binary files differ
diff --git a/src/frontend/gui/icon/system_upgrade.png b/src/frontend/gui/icon/system_upgrade.png
new file mode 100644
index 0000000..4443cb7
--- /dev/null
+++ b/src/frontend/gui/icon/system_upgrade.png
Binary files differ
diff --git a/src/frontend/gui/icon/window_close.png b/src/frontend/gui/icon/window_close.png
new file mode 100644
index 0000000..35dbf35
--- /dev/null
+++ b/src/frontend/gui/icon/window_close.png
Binary files differ
diff --git a/src/frontend/gui/icon/window_icon.png b/src/frontend/gui/icon/window_icon.png
new file mode 100644
index 0000000..da169ba
--- /dev/null
+++ b/src/frontend/gui/icon/window_icon.png
Binary files differ
diff --git a/src/frontend/gui/internet.py b/src/frontend/gui/internet.py
new file mode 100755
index 0000000..e8ad1d3
--- /dev/null
+++ b/src/frontend/gui/internet.py
@@ -0,0 +1,100 @@
+#!/usr/bin/python3
+import sys, subprocess, sqlite3
+from PyQt5 import QtCore, QtGui, QtWidgets, uic
+
+class Internet(QtWidgets.QMainWindow):
+ def __init__(self):
+ super(Internet, self).__init__()
+ uic.loadUi('ui/internet.ui', self)
+ self.centerOnScreen()
+ self.show()
+ self.load_packages()
+
+ self.package_install.clicked.connect(self.install_package)
+ self.package_uninstall.clicked.connect(self.uninstall_package)
+ self.orphans_remove.clicked.connect(self.remove_orphans)
+ self.category_exit.clicked.connect(self.exit_category)
+
+ def centerOnScreen(self):
+ resolution = QtWidgets.QDesktopWidget().screenGeometry()
+ self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
+ (resolution.height() / 2) - (self.frameSize().height() / 2))
+
+ def install_package(self):
+ pkgname = self.table_internet.item(self.table_internet.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-install'] + pkgname.split())
+
+ def uninstall_package(self):
+ pkgname = self.table_internet.item(self.table_internet.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-uninstall'] + pkgname.split())
+
+ def remove_orphans(self):
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'remove-orphans'])
+
+ def exit_category(self):
+ self.close()
+
+ def load_packages(self):
+ with sqlite3.connect('/var/lib/sisyphus/db/sisyphus.db') as db:
+ cursor=db.cursor()
+ cursor.execute('''SELECT
+ a.category AS cat,
+ a.name AS pn,
+ a.version AS av,
+ i.version AS iv,
+ a.description AS descr
+ FROM remote_packages AS a
+ LEFT JOIN local_packages AS i
+ ON a.category = i.category
+ AND a.name = i.name
+ AND a.slot = i.slot
+ WHERE a.name IN
+ ('firewalld',
+ 'ufw',
+ 'ufw-frontends',
+ 'cifs-utils',
+ 'samba',
+ 'sshfs',
+ 'filezilla',
+ 'franz',
+ 'qtox',
+ 'telegram',
+ 'viber',
+ 'konversation',
+ 'quassel',
+ 'aria2',
+ 'dropbox',
+ 'megasync',
+ 'owncloud-client',
+ 'teamviewer',
+ 'telnet-bsd',
+ 'tigervnc',
+ 'youtube-dl',
+ 'quiterss',
+ 'qbittorrent',
+ 'transmission',
+ 'firefox',
+ 'google-chrome',
+ 'opera',
+ 'qupzilla',
+ 'vivaldi',
+ 'adobe-flash',
+ 'chrome-binary-plugins',
+ 'freshplayerplugin',
+ 'google-talkplugin',
+ 'wmail',
+ 'trojita',
+ 'aircrack-ng',
+ 'wavemon',
+ 'messengerfordesktop')
+ ''')
+ rows = cursor.fetchall()
+
+ for row in rows:
+ inx = rows.index(row)
+ self.table_internet.insertRow(inx)
+ self.table_internet.setItem(inx, 0, QtWidgets.QTableWidgetItem(row[0]))
+ self.table_internet.setItem(inx, 1, QtWidgets.QTableWidgetItem(row[1]))
+ self.table_internet.setItem(inx, 2, QtWidgets.QTableWidgetItem(row[2]))
+ self.table_internet.setItem(inx, 3, QtWidgets.QTableWidgetItem(row[3]))
+ self.table_internet.setItem(inx, 4, QtWidgets.QTableWidgetItem(row[4]))
diff --git a/src/frontend/gui/local.py b/src/frontend/gui/local.py
new file mode 100755
index 0000000..e8b506a
--- /dev/null
+++ b/src/frontend/gui/local.py
@@ -0,0 +1,50 @@
+#!/usr/bin/python3
+import sys, subprocess, sqlite3
+from PyQt5 import QtCore, QtGui, QtWidgets, uic
+
+class Local(QtWidgets.QMainWindow):
+ def __init__(self):
+ super(Local, self).__init__()
+ uic.loadUi('ui/local.ui', self)
+ self.centerOnScreen()
+ self.show()
+ self.load_packages()
+
+ self.package_install.clicked.connect(self.install_package)
+ self.package_uninstall.clicked.connect(self.uninstall_package)
+ self.orphans_remove.clicked.connect(self.remove_orphans)
+ self.category_exit.clicked.connect(self.exit_category)
+
+ def centerOnScreen(self):
+ resolution = QtWidgets.QDesktopWidget().screenGeometry()
+ self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
+ (resolution.height() / 2) - (self.frameSize().height() / 2))
+
+ def install_package(self):
+ pkgname = self.table_local.item(self.table_local.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-install'] + pkgname.split())
+
+ def uninstall_package(self):
+ pkgname = self.table_local.item(self.table_local.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-uninstall'] + pkgname.split())
+
+ def remove_orphans(self):
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'remove-orphans'])
+
+ def exit_category(self):
+ self.close()
+
+ def load_packages(self):
+ with sqlite3.connect('/var/lib/sisyphus/db/sisyphus.db') as db:
+ cursor=db.cursor()
+ cursor.execute('''SELECT * from local_packages''')
+ rows = cursor.fetchall()
+
+ for row in rows:
+ inx = rows.index(row)
+ self.table_local.insertRow(inx)
+ self.table_local.setItem(inx, 0, QtWidgets.QTableWidgetItem(row[0]))
+ self.table_local.setItem(inx, 1, QtWidgets.QTableWidgetItem(row[1]))
+ self.table_local.setItem(inx, 2, QtWidgets.QTableWidgetItem(row[2]))
+ self.table_local.setItem(inx, 3, QtWidgets.QTableWidgetItem(row[3]))
+ self.table_local.setItem(inx, 4, QtWidgets.QTableWidgetItem(row[4]))
diff --git a/src/frontend/gui/multimedia.py b/src/frontend/gui/multimedia.py
new file mode 100755
index 0000000..e4214f2
--- /dev/null
+++ b/src/frontend/gui/multimedia.py
@@ -0,0 +1,50 @@
+#!/usr/bin/python3
+import sys, subprocess, sqlite3
+from PyQt5 import QtCore, QtGui, QtWidgets, uic
+
+class Multimedia(QtWidgets.QMainWindow):
+ def __init__(self):
+ super(Multimedia, self).__init__()
+ uic.loadUi('ui/multimedia.ui', self)
+ self.centerOnScreen()
+ self.show()
+ self.load_packages()
+
+ self.package_install.clicked.connect(self.install_package)
+ self.package_uninstall.clicked.connect(self.uninstall_package)
+ self.orphans_remove.clicked.connect(self.remove_orphans)
+ self.category_exit.clicked.connect(self.exit_category)
+
+ def centerOnScreen(self):
+ resolution = QtWidgets.QDesktopWidget().screenGeometry()
+ self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
+ (resolution.height() / 2) - (self.frameSize().height() / 2))
+
+ def install_package(self):
+ pkgname = self.table_multimedia.item(self.table_multimedia.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-install'] + pkgname.split())
+
+ def uninstall_package(self):
+ pkgname = self.table_multimedia.item(self.table_multimedia.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-uninstall'] + pkgname.split())
+
+ def remove_orphans(self):
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'remove-orphans'])
+
+ def exit_category(self):
+ self.close()
+
+ def load_packages(self):
+ with sqlite3.connect('/var/lib/sisyphus/db/sisyphus.db') as db:
+ cursor=db.cursor()
+ cursor.execute('''SELECT * from remote_packages''')
+ rows = cursor.fetchall()
+
+ for row in rows:
+ inx = rows.index(row)
+ self.table_multimedia.insertRow(inx)
+ self.table_multimedia.setItem(inx, 0, QtWidgets.QTableWidgetItem(row[0]))
+ self.table_multimedia.setItem(inx, 1, QtWidgets.QTableWidgetItem(row[1]))
+ self.table_multimedia.setItem(inx, 2, QtWidgets.QTableWidgetItem(row[2]))
+ self.table_multimedia.setItem(inx, 3, QtWidgets.QTableWidgetItem(row[3]))
+ self.table_multimedia.setItem(inx, 4, QtWidgets.QTableWidgetItem(row[4]))
diff --git a/src/frontend/gui/office.py b/src/frontend/gui/office.py
new file mode 100755
index 0000000..286494a
--- /dev/null
+++ b/src/frontend/gui/office.py
@@ -0,0 +1,84 @@
+#!/usr/bin/python3
+import sys, subprocess, sqlite3
+from PyQt5 import QtCore, QtGui, QtWidgets, uic
+
+class Office(QtWidgets.QMainWindow):
+ def __init__(self):
+ super(Office, self).__init__()
+ uic.loadUi('ui/office.ui', self)
+ self.centerOnScreen()
+ self.show()
+ self.load_packages()
+
+ self.package_install.clicked.connect(self.install_package)
+ self.package_uninstall.clicked.connect(self.uninstall_package)
+ self.orphans_remove.clicked.connect(self.remove_orphans)
+ self.category_exit.clicked.connect(self.exit_category)
+
+ def centerOnScreen(self):
+ resolution = QtWidgets.QDesktopWidget().screenGeometry()
+ self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
+ (resolution.height() / 2) - (self.frameSize().height() / 2))
+
+ def install_package(self):
+ pkgname = self.table_office.item(self.table_office.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-install'] + pkgname.split())
+
+ def uninstall_package(self):
+ pkgname = self.table_office.item(self.table_office.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-uninstall'] + pkgname.split())
+
+ def remove_orphans(self):
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'remove-orphans'])
+
+ def exit_category(self):
+ self.close()
+
+ def load_packages(self):
+ with sqlite3.connect('/var/lib/sisyphus/db/sisyphus.db') as db:
+ cursor=db.cursor()
+ cursor.execute('''SELECT
+ a.category AS cat,
+ a.name AS pn,
+ a.version AS av,
+ i.version AS iv,
+ a.description AS descr
+ FROM remote_packages AS a
+ LEFT JOIN local_packages AS i
+ ON a.category = i.category
+ AND a.name = i.name
+ AND a.slot = i.slot
+ WHERE a.name IN
+ ('fet',
+ 'libreoffice',
+ 'wps-office',
+ 'tesseract',
+ 'okular',
+ 'cantarell',
+ 'corefonts',
+ 'dejavu',
+ 'liberation-fonts',
+ 'libertine',
+ 'noto',
+ 'open-sans',
+ 'roboto',
+ 'ttf-bitstream-vera',
+ 'qpdfview',
+ 'cups',
+ 'cups-filters',
+ 'cups-pdf',
+ 'simple-scan',
+ 'cnijfilter',
+ 'cnijfilter-drivers',
+ 'hplip')
+ ''')
+ rows = cursor.fetchall()
+
+ for row in rows:
+ inx = rows.index(row)
+ self.table_office.insertRow(inx)
+ self.table_office.setItem(inx, 0, QtWidgets.QTableWidgetItem(row[0]))
+ self.table_office.setItem(inx, 1, QtWidgets.QTableWidgetItem(row[1]))
+ self.table_office.setItem(inx, 2, QtWidgets.QTableWidgetItem(row[2]))
+ self.table_office.setItem(inx, 3, QtWidgets.QTableWidgetItem(row[3]))
+ self.table_office.setItem(inx, 4, QtWidgets.QTableWidgetItem(row[4]))
diff --git a/src/frontend/gui/sisyphus-gui.py b/src/frontend/gui/sisyphus-gui.py
new file mode 100755
index 0000000..1cc4fb6
--- /dev/null
+++ b/src/frontend/gui/sisyphus-gui.py
@@ -0,0 +1,106 @@
+#!/usr/bin/python3
+import sys, subprocess
+from PyQt5 import QtCore, QtGui, QtWidgets, uic
+
+from accesories import Accesories
+from development import Development
+from games import Games
+from graphics import Graphics
+from internet import Internet
+from multimedia import Multimedia
+from office import Office
+from system import System
+from local import Local
+from everything import Everything
+
+class Sisyphus(QtWidgets.QMainWindow):
+ def __init__(self):
+ super(Sisyphus, self).__init__()
+ uic.loadUi('ui/sisyphus-gui.ui', self)
+ self.centerOnScreen()
+ self.show()
+
+ self.package_search.clicked.connect(self.search_package)
+ self.package_install.clicked.connect(self.install_package)
+ self.package_uninstall.clicked.connect(self.uninstall_package)
+ self.system_upgrade.clicked.connect(self.upgrade_system)
+ self.orphans_remove.clicked.connect(self.remove_orphans)
+
+ self.category_accesories.clicked.connect(self.accesories_category)
+ self.category_development.clicked.connect(self.development_category)
+ self.category_games.clicked.connect(self.games_category)
+ self.category_graphics.clicked.connect(self.graphics_category)
+ self.category_internet.clicked.connect(self.internet_category)
+ self.category_multimedia.clicked.connect(self.multimedia_category)
+ self.category_office.clicked.connect(self.office_category)
+ self.category_system.clicked.connect(self.system_category)
+ self.category_local.clicked.connect(self.local_category)
+ self.category_everything.clicked.connect(self.everything_category)
+
+ def centerOnScreen (self):
+ resolution = QtWidgets.QDesktopWidget().screenGeometry()
+ self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
+ (resolution.height() / 2) - (self.frameSize().height() / 2))
+
+ def search_package(self):
+ pkgname = self.input.text()
+ subprocess.Popen(['xterm', '-hold', '-e', 'sisyphus', 'search'] + pkgname.split())
+
+ def install_package(self):
+ pkgname = self.input.text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-install'] + pkgname.split())
+
+ def uninstall_package(self):
+ pkgname = self.input.text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-uninstall'] + pkgname.split())
+
+ def upgrade_system(self):
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'autoupgrade'])
+
+ def remove_orphans(self):
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'remove-orphans'])
+
+ def accesories_category(self):
+ self.window = Accesories()
+ self.window.show()
+
+ def development_category(self):
+ self.window = Development()
+ self.window.show()
+
+ def games_category(self):
+ self.window = Games()
+ self.window.show()
+
+ def graphics_category(self):
+ self.window = Graphics()
+ self.window.show()
+
+ def internet_category(self):
+ self.window = Internet()
+ self.window.show()
+
+ def multimedia_category(self):
+ self.window = Multimedia()
+ self.window.show()
+
+ def office_category(self):
+ self.window = Office()
+ self.window.show()
+
+ def system_category(self):
+ self.window = System()
+ self.window.show()
+
+ def local_category(self):
+ self.window = Local()
+ self.window.show()
+
+ def everything_category(self):
+ self.window = Everything()
+ self.window.show()
+
+if __name__ == '__main__':
+ app = QtWidgets.QApplication(sys.argv)
+ window = Sisyphus()
+ sys.exit(app.exec_())
diff --git a/src/frontend/gui/system.py b/src/frontend/gui/system.py
new file mode 100755
index 0000000..f8cc428
--- /dev/null
+++ b/src/frontend/gui/system.py
@@ -0,0 +1,50 @@
+#!/usr/bin/python3
+import sys, subprocess, sqlite3
+from PyQt5 import QtCore, QtGui, QtWidgets, uic
+
+class System(QtWidgets.QMainWindow):
+ def __init__(self):
+ super(System, self).__init__()
+ uic.loadUi('ui/system.ui', self)
+ self.centerOnScreen()
+ self.show()
+ self.load_packages()
+
+ self.package_install.clicked.connect(self.install_package)
+ self.package_uninstall.clicked.connect(self.uninstall_package)
+ self.orphans_remove.clicked.connect(self.remove_orphans)
+ self.category_exit.clicked.connect(self.exit_category)
+
+ def centerOnScreen(self):
+ resolution = QtWidgets.QDesktopWidget().screenGeometry()
+ self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
+ (resolution.height() / 2) - (self.frameSize().height() / 2))
+
+ def install_package(self):
+ pkgname = self.table_system.item(self.table_system.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-install'] + pkgname.split())
+
+ def uninstall_package(self):
+ pkgname = self.table_system.item(self.table_system.currentRow(), 1).text()
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'auto-uninstall'] + pkgname.split())
+
+ def remove_orphans(self):
+ subprocess.Popen(['xterm', '-e', 'sisyphus', 'remove-orphans'])
+
+ def exit_category(self):
+ self.close()
+
+ def load_packages(self):
+ with sqlite3.connect('/var/lib/sisyphus/db/sisyphus.db') as db:
+ cursor=db.cursor()
+ cursor.execute('''SELECT * from remote_packages''')
+ rows = cursor.fetchall()
+
+ for row in rows:
+ inx = rows.index(row)
+ self.table_system.insertRow(inx)
+ self.table_system.setItem(inx, 0, QtWidgets.QTableWidgetItem(row[0]))
+ self.table_system.setItem(inx, 1, QtWidgets.QTableWidgetItem(row[1]))
+ self.table_system.setItem(inx, 2, QtWidgets.QTableWidgetItem(row[2]))
+ self.table_system.setItem(inx, 3, QtWidgets.QTableWidgetItem(row[3]))
+ self.table_system.setItem(inx, 4, QtWidgets.QTableWidgetItem(row[4]))
diff --git a/src/frontend/gui/ui/accesories.ui b/src/frontend/gui/ui/accesories.ui
new file mode 100644
index 0000000..ea9e495
--- /dev/null
+++ b/src/frontend/gui/ui/accesories.ui
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Accesories</class>
+ <widget class="QWidget" name="Accesories">
+ <property name="windowModality">
+ <enum>Qt::ApplicationModal</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1000</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1000</width>
+ <height>600</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>Sisyphus : Category Accesories</string>
+ </property>
+ <property name="windowIcon">
+ <iconset>
+ <normaloff>../icon/category_accessories.png</normaloff>../icon/category_accessories.png</iconset>
+ </property>
+ <widget class="QTableWidget" name="table_accesories">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>25</y>
+ <width>950</width>
+ <height>475</height>
+ </rect>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>950</width>
+ <height>500</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QAbstractScrollArea::AdjustToContents</enum>
+ </property>
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="dragDropOverwriteMode">
+ <bool>false</bool>
+ </property>
+ <property name="selectionMode">
+ <enum>QAbstractItemView::SingleSelection</enum>
+ </property>
+ <property name="selectionBehavior">
+ <enum>QAbstractItemView::SelectRows</enum>
+ </property>
+ <attribute name="horizontalHeaderCascadingSectionResizes">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="horizontalHeaderDefaultSectionSize">
+ <number>110</number>
+ </attribute>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
+ <property name="text">
+ <string>Category</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Available Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Installed Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Description</string>
+ </property>
+ </column>
+ </widget>
+ <widget class="QPushButton" name="package_uninstall">
+ <property name="geometry">
+ <rect>
+ <x>275</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Uninstall package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_uninstall.png</normaloff>../icon/package_uninstall.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="orphans_remove">
+ <property name="geometry">
+ <rect>
+ <x>525</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Remove orphan packages&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/remove_orphans.png</normaloff>../icon/remove_orphans.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_exit">
+ <property name="geometry">
+ <rect>
+ <x>775</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Close window&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/window_close.png</normaloff>../icon/window_close.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="package_install">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Install package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_install.png</normaloff>../icon/package_install.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ </widget>
+ <tabstops>
+ <tabstop>table_accesories</tabstop>
+ <tabstop>package_install</tabstop>
+ <tabstop>package_uninstall</tabstop>
+ <tabstop>orphans_remove</tabstop>
+ <tabstop>category_exit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/frontend/gui/ui/development.ui b/src/frontend/gui/ui/development.ui
new file mode 100644
index 0000000..4c102f1
--- /dev/null
+++ b/src/frontend/gui/ui/development.ui
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Development</class>
+ <widget class="QWidget" name="Development">
+ <property name="windowModality">
+ <enum>Qt::ApplicationModal</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1000</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1000</width>
+ <height>600</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>Sisyphus : Category Development</string>
+ </property>
+ <property name="windowIcon">
+ <iconset>
+ <normaloff>../icon/category_development.png</normaloff>../icon/category_development.png</iconset>
+ </property>
+ <widget class="QTableWidget" name="table_development">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>25</y>
+ <width>950</width>
+ <height>475</height>
+ </rect>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>950</width>
+ <height>500</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QAbstractScrollArea::AdjustToContents</enum>
+ </property>
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="dragDropOverwriteMode">
+ <bool>false</bool>
+ </property>
+ <property name="selectionMode">
+ <enum>QAbstractItemView::SingleSelection</enum>
+ </property>
+ <property name="selectionBehavior">
+ <enum>QAbstractItemView::SelectRows</enum>
+ </property>
+ <attribute name="horizontalHeaderCascadingSectionResizes">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="horizontalHeaderDefaultSectionSize">
+ <number>110</number>
+ </attribute>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
+ <property name="text">
+ <string>Category</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Available Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Installed Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Description</string>
+ </property>
+ </column>
+ </widget>
+ <widget class="QPushButton" name="package_uninstall">
+ <property name="geometry">
+ <rect>
+ <x>275</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Uninstall package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_uninstall.png</normaloff>../icon/package_uninstall.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="orphans_remove">
+ <property name="geometry">
+ <rect>
+ <x>525</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Remove orphan packages&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/remove_orphans.png</normaloff>../icon/remove_orphans.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_exit">
+ <property name="geometry">
+ <rect>
+ <x>775</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Close window&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/window_close.png</normaloff>../icon/window_close.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="package_install">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Install package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_install.png</normaloff>../icon/package_install.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ </widget>
+ <tabstops>
+ <tabstop>table_development</tabstop>
+ <tabstop>package_install</tabstop>
+ <tabstop>package_uninstall</tabstop>
+ <tabstop>orphans_remove</tabstop>
+ <tabstop>category_exit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/frontend/gui/ui/everything.ui b/src/frontend/gui/ui/everything.ui
new file mode 100644
index 0000000..b609cee
--- /dev/null
+++ b/src/frontend/gui/ui/everything.ui
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Everything</class>
+ <widget class="QWidget" name="Everything">
+ <property name="windowModality">
+ <enum>Qt::ApplicationModal</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1000</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1000</width>
+ <height>600</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>Sisyphus : All Packages</string>
+ </property>
+ <property name="windowIcon">
+ <iconset>
+ <normaloff>../icon/category_all.png</normaloff>../icon/category_all.png</iconset>
+ </property>
+ <widget class="QTableWidget" name="table_everything">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>25</y>
+ <width>950</width>
+ <height>475</height>
+ </rect>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>950</width>
+ <height>500</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QAbstractScrollArea::AdjustToContents</enum>
+ </property>
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="dragDropOverwriteMode">
+ <bool>false</bool>
+ </property>
+ <property name="selectionMode">
+ <enum>QAbstractItemView::SingleSelection</enum>
+ </property>
+ <property name="selectionBehavior">
+ <enum>QAbstractItemView::SelectRows</enum>
+ </property>
+ <attribute name="horizontalHeaderCascadingSectionResizes">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="horizontalHeaderDefaultSectionSize">
+ <number>110</number>
+ </attribute>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
+ <property name="text">
+ <string>Category</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Available Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Installed Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Description</string>
+ </property>
+ </column>
+ </widget>
+ <widget class="QPushButton" name="package_uninstall">
+ <property name="geometry">
+ <rect>
+ <x>275</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Uninstall package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_uninstall.png</normaloff>../icon/package_uninstall.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="orphans_remove">
+ <property name="geometry">
+ <rect>
+ <x>525</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Remove orphan packages&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/remove_orphans.png</normaloff>../icon/remove_orphans.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_exit">
+ <property name="geometry">
+ <rect>
+ <x>775</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Close window&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/window_close.png</normaloff>../icon/window_close.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="package_install">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Install package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_install.png</normaloff>../icon/package_install.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ </widget>
+ <tabstops>
+ <tabstop>table_everything</tabstop>
+ <tabstop>package_install</tabstop>
+ <tabstop>package_uninstall</tabstop>
+ <tabstop>orphans_remove</tabstop>
+ <tabstop>category_exit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/frontend/gui/ui/games.ui b/src/frontend/gui/ui/games.ui
new file mode 100644
index 0000000..0bbc787
--- /dev/null
+++ b/src/frontend/gui/ui/games.ui
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Games</class>
+ <widget class="QWidget" name="Games">
+ <property name="windowModality">
+ <enum>Qt::ApplicationModal</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1000</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1000</width>
+ <height>600</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>Sisyphus : Category Games</string>
+ </property>
+ <property name="windowIcon">
+ <iconset>
+ <normaloff>../icon/category_games.png</normaloff>../icon/category_games.png</iconset>
+ </property>
+ <widget class="QTableWidget" name="table_games">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>25</y>
+ <width>950</width>
+ <height>475</height>
+ </rect>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>950</width>
+ <height>500</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QAbstractScrollArea::AdjustToContents</enum>
+ </property>
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="dragDropOverwriteMode">
+ <bool>false</bool>
+ </property>
+ <property name="selectionMode">
+ <enum>QAbstractItemView::SingleSelection</enum>
+ </property>
+ <property name="selectionBehavior">
+ <enum>QAbstractItemView::SelectRows</enum>
+ </property>
+ <attribute name="horizontalHeaderCascadingSectionResizes">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="horizontalHeaderDefaultSectionSize">
+ <number>110</number>
+ </attribute>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
+ <property name="text">
+ <string>Category</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Available Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Installed Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Description</string>
+ </property>
+ </column>
+ </widget>
+ <widget class="QPushButton" name="package_uninstall">
+ <property name="geometry">
+ <rect>
+ <x>275</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Uninstall package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_uninstall.png</normaloff>../icon/package_uninstall.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="orphans_remove">
+ <property name="geometry">
+ <rect>
+ <x>525</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Remove orphan packages&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/remove_orphans.png</normaloff>../icon/remove_orphans.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_exit">
+ <property name="geometry">
+ <rect>
+ <x>775</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Close window&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/window_close.png</normaloff>../icon/window_close.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="package_install">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Install package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_install.png</normaloff>../icon/package_install.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ </widget>
+ <tabstops>
+ <tabstop>table_games</tabstop>
+ <tabstop>package_install</tabstop>
+ <tabstop>package_uninstall</tabstop>
+ <tabstop>orphans_remove</tabstop>
+ <tabstop>category_exit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/frontend/gui/ui/graphics.ui b/src/frontend/gui/ui/graphics.ui
new file mode 100644
index 0000000..e943b49
--- /dev/null
+++ b/src/frontend/gui/ui/graphics.ui
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Graphics</class>
+ <widget class="QWidget" name="Graphics">
+ <property name="windowModality">
+ <enum>Qt::ApplicationModal</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1000</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1000</width>
+ <height>600</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>Sisyphus : Category Graphics</string>
+ </property>
+ <property name="windowIcon">
+ <iconset>
+ <normaloff>../icon/category_graphics.png</normaloff>../icon/category_graphics.png</iconset>
+ </property>
+ <widget class="QTableWidget" name="table_graphics">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>25</y>
+ <width>950</width>
+ <height>475</height>
+ </rect>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>950</width>
+ <height>500</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QAbstractScrollArea::AdjustToContents</enum>
+ </property>
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="dragDropOverwriteMode">
+ <bool>false</bool>
+ </property>
+ <property name="selectionMode">
+ <enum>QAbstractItemView::SingleSelection</enum>
+ </property>
+ <property name="selectionBehavior">
+ <enum>QAbstractItemView::SelectRows</enum>
+ </property>
+ <attribute name="horizontalHeaderCascadingSectionResizes">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="horizontalHeaderDefaultSectionSize">
+ <number>110</number>
+ </attribute>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
+ <property name="text">
+ <string>Category</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Available Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Installed Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Description</string>
+ </property>
+ </column>
+ </widget>
+ <widget class="QPushButton" name="package_uninstall">
+ <property name="geometry">
+ <rect>
+ <x>275</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Uninstall package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_uninstall.png</normaloff>../icon/package_uninstall.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="orphans_remove">
+ <property name="geometry">
+ <rect>
+ <x>525</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Remove orphan packages&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/remove_orphans.png</normaloff>../icon/remove_orphans.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_exit">
+ <property name="geometry">
+ <rect>
+ <x>775</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Close window&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/window_close.png</normaloff>../icon/window_close.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="package_install">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Install package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_install.png</normaloff>../icon/package_install.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ </widget>
+ <tabstops>
+ <tabstop>table_graphics</tabstop>
+ <tabstop>package_install</tabstop>
+ <tabstop>package_uninstall</tabstop>
+ <tabstop>orphans_remove</tabstop>
+ <tabstop>category_exit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/frontend/gui/ui/internet.ui b/src/frontend/gui/ui/internet.ui
new file mode 100644
index 0000000..810c065
--- /dev/null
+++ b/src/frontend/gui/ui/internet.ui
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Internet</class>
+ <widget class="QWidget" name="Internet">
+ <property name="windowModality">
+ <enum>Qt::ApplicationModal</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1000</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1000</width>
+ <height>600</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>Sisyphus : Category Internet</string>
+ </property>
+ <property name="windowIcon">
+ <iconset>
+ <normaloff>../icon/category_internet.png</normaloff>../icon/category_internet.png</iconset>
+ </property>
+ <widget class="QTableWidget" name="table_internet">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>25</y>
+ <width>950</width>
+ <height>475</height>
+ </rect>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>950</width>
+ <height>500</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QAbstractScrollArea::AdjustToContents</enum>
+ </property>
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="dragDropOverwriteMode">
+ <bool>false</bool>
+ </property>
+ <property name="selectionMode">
+ <enum>QAbstractItemView::SingleSelection</enum>
+ </property>
+ <property name="selectionBehavior">
+ <enum>QAbstractItemView::SelectRows</enum>
+ </property>
+ <attribute name="horizontalHeaderCascadingSectionResizes">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="horizontalHeaderDefaultSectionSize">
+ <number>110</number>
+ </attribute>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
+ <property name="text">
+ <string>Category</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Available Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Installed Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Description</string>
+ </property>
+ </column>
+ </widget>
+ <widget class="QPushButton" name="package_uninstall">
+ <property name="geometry">
+ <rect>
+ <x>275</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Uninstall package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_uninstall.png</normaloff>../icon/package_uninstall.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="orphans_remove">
+ <property name="geometry">
+ <rect>
+ <x>525</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Remove orphan packages&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/remove_orphans.png</normaloff>../icon/remove_orphans.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_exit">
+ <property name="geometry">
+ <rect>
+ <x>775</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Close window&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/window_close.png</normaloff>../icon/window_close.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="package_install">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Install package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_install.png</normaloff>../icon/package_install.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ </widget>
+ <tabstops>
+ <tabstop>table_internet</tabstop>
+ <tabstop>package_install</tabstop>
+ <tabstop>package_uninstall</tabstop>
+ <tabstop>orphans_remove</tabstop>
+ <tabstop>category_exit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/frontend/gui/ui/local.ui b/src/frontend/gui/ui/local.ui
new file mode 100644
index 0000000..46cd6f9
--- /dev/null
+++ b/src/frontend/gui/ui/local.ui
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Local</class>
+ <widget class="QWidget" name="Local">
+ <property name="windowModality">
+ <enum>Qt::ApplicationModal</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1000</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1000</width>
+ <height>600</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>Sisyphus : Local Packages</string>
+ </property>
+ <property name="windowIcon">
+ <iconset>
+ <normaloff>../icon/category_local.png</normaloff>../icon/category_local.png</iconset>
+ </property>
+ <widget class="QTableWidget" name="table_local">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>25</y>
+ <width>950</width>
+ <height>475</height>
+ </rect>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>950</width>
+ <height>500</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QAbstractScrollArea::AdjustToContents</enum>
+ </property>
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="dragDropOverwriteMode">
+ <bool>false</bool>
+ </property>
+ <property name="selectionMode">
+ <enum>QAbstractItemView::SingleSelection</enum>
+ </property>
+ <property name="selectionBehavior">
+ <enum>QAbstractItemView::SelectRows</enum>
+ </property>
+ <attribute name="horizontalHeaderCascadingSectionResizes">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
+ <property name="text">
+ <string>Category</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Slot</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Description</string>
+ </property>
+ </column>
+ </widget>
+ <widget class="QPushButton" name="package_uninstall">
+ <property name="geometry">
+ <rect>
+ <x>275</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Uninstall package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_uninstall.png</normaloff>../icon/package_uninstall.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="orphans_remove">
+ <property name="geometry">
+ <rect>
+ <x>525</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Remove orphan packages&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/remove_orphans.png</normaloff>../icon/remove_orphans.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_exit">
+ <property name="geometry">
+ <rect>
+ <x>775</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Close window&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/window_close.png</normaloff>../icon/window_close.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="package_install">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Install package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_install.png</normaloff>../icon/package_install.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ </widget>
+ <tabstops>
+ <tabstop>table_local</tabstop>
+ <tabstop>package_install</tabstop>
+ <tabstop>package_uninstall</tabstop>
+ <tabstop>orphans_remove</tabstop>
+ <tabstop>category_exit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/frontend/gui/ui/multimedia.ui b/src/frontend/gui/ui/multimedia.ui
new file mode 100644
index 0000000..b2c4938
--- /dev/null
+++ b/src/frontend/gui/ui/multimedia.ui
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Multimedia</class>
+ <widget class="QWidget" name="Multimedia">
+ <property name="windowModality">
+ <enum>Qt::ApplicationModal</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1000</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1000</width>
+ <height>600</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>Sisyphus : Category Multimedia</string>
+ </property>
+ <property name="windowIcon">
+ <iconset>
+ <normaloff>../icon/category_multimedia.png</normaloff>../icon/category_multimedia.png</iconset>
+ </property>
+ <widget class="QTableWidget" name="table_multimedia">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>25</y>
+ <width>950</width>
+ <height>475</height>
+ </rect>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>950</width>
+ <height>500</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QAbstractScrollArea::AdjustToContents</enum>
+ </property>
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="dragDropOverwriteMode">
+ <bool>false</bool>
+ </property>
+ <property name="selectionMode">
+ <enum>QAbstractItemView::SingleSelection</enum>
+ </property>
+ <property name="selectionBehavior">
+ <enum>QAbstractItemView::SelectRows</enum>
+ </property>
+ <attribute name="horizontalHeaderCascadingSectionResizes">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="horizontalHeaderDefaultSectionSize">
+ <number>110</number>
+ </attribute>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
+ <property name="text">
+ <string>Category</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Available Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Installed Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Description</string>
+ </property>
+ </column>
+ </widget>
+ <widget class="QPushButton" name="package_uninstall">
+ <property name="geometry">
+ <rect>
+ <x>275</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Uninstall package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_uninstall.png</normaloff>../icon/package_uninstall.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="orphans_remove">
+ <property name="geometry">
+ <rect>
+ <x>525</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Remove orphan packages&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/remove_orphans.png</normaloff>../icon/remove_orphans.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_exit">
+ <property name="geometry">
+ <rect>
+ <x>775</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Close window&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/window_close.png</normaloff>../icon/window_close.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="package_install">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Install package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_install.png</normaloff>../icon/package_install.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ </widget>
+ <tabstops>
+ <tabstop>table_multimedia</tabstop>
+ <tabstop>package_install</tabstop>
+ <tabstop>package_uninstall</tabstop>
+ <tabstop>orphans_remove</tabstop>
+ <tabstop>category_exit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/frontend/gui/ui/office.ui b/src/frontend/gui/ui/office.ui
new file mode 100644
index 0000000..d1d3bad
--- /dev/null
+++ b/src/frontend/gui/ui/office.ui
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Office</class>
+ <widget class="QWidget" name="Office">
+ <property name="windowModality">
+ <enum>Qt::ApplicationModal</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1000</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1000</width>
+ <height>600</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>Sisyphus : Category Office</string>
+ </property>
+ <property name="windowIcon">
+ <iconset>
+ <normaloff>../icon/category_office.png</normaloff>../icon/category_office.png</iconset>
+ </property>
+ <widget class="QTableWidget" name="table_office">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>25</y>
+ <width>950</width>
+ <height>475</height>
+ </rect>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>950</width>
+ <height>500</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QAbstractScrollArea::AdjustToContents</enum>
+ </property>
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="dragDropOverwriteMode">
+ <bool>false</bool>
+ </property>
+ <property name="selectionMode">
+ <enum>QAbstractItemView::SingleSelection</enum>
+ </property>
+ <property name="selectionBehavior">
+ <enum>QAbstractItemView::SelectRows</enum>
+ </property>
+ <attribute name="horizontalHeaderCascadingSectionResizes">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="horizontalHeaderDefaultSectionSize">
+ <number>110</number>
+ </attribute>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
+ <property name="text">
+ <string>Category</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Available Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Installed Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Description</string>
+ </property>
+ </column>
+ </widget>
+ <widget class="QPushButton" name="package_uninstall">
+ <property name="geometry">
+ <rect>
+ <x>275</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Uninstall package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_uninstall.png</normaloff>../icon/package_uninstall.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="orphans_remove">
+ <property name="geometry">
+ <rect>
+ <x>525</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Remove orphan packages&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/remove_orphans.png</normaloff>../icon/remove_orphans.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_exit">
+ <property name="geometry">
+ <rect>
+ <x>775</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Close window&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/window_close.png</normaloff>../icon/window_close.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="package_install">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Install package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_install.png</normaloff>../icon/package_install.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ </widget>
+ <tabstops>
+ <tabstop>table_office</tabstop>
+ <tabstop>package_install</tabstop>
+ <tabstop>package_uninstall</tabstop>
+ <tabstop>orphans_remove</tabstop>
+ <tabstop>category_exit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/frontend/gui/ui/sisyphus-gui.ui b/src/frontend/gui/ui/sisyphus-gui.ui
new file mode 100644
index 0000000..0d6749c
--- /dev/null
+++ b/src/frontend/gui/ui/sisyphus-gui.ui
@@ -0,0 +1,520 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1000</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1000</width>
+ <height>600</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>Sisyphus : Graphical User Interface</string>
+ </property>
+ <property name="windowIcon">
+ <iconset>
+ <normaloff>../icon/window_icon.png</normaloff>../icon/window_icon.png</iconset>
+ </property>
+ <property name="layoutDirection">
+ <enum>Qt::LeftToRight</enum>
+ </property>
+ <property name="autoFillBackground">
+ <bool>true</bool>
+ </property>
+ <widget class="QWidget" name="sisyphus">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <widget class="QFrame" name="manage">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1000</width>
+ <height>200</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="layoutDirection">
+ <enum>Qt::LeftToRight</enum>
+ </property>
+ <property name="autoFillBackground">
+ <bool>true</bool>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Plain</enum>
+ </property>
+ <widget class="QLineEdit" name="input">
+ <property name="geometry">
+ <rect>
+ <x>100</x>
+ <y>30</y>
+ <width>800</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Enter package name you want to Search/Install/Uninstall&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>Enter package name...</string>
+ </property>
+ <property name="frame">
+ <bool>true</bool>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignJustify|Qt::AlignVCenter</set>
+ </property>
+ <property name="clearButtonEnabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="package_install">
+ <property name="geometry">
+ <rect>
+ <x>215</x>
+ <y>105</y>
+ <width>190</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Install package(s)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_install.png</normaloff>../icon/package_install.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="package_search">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>105</y>
+ <width>190</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Search package(s)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_search.png</normaloff>../icon/package_search.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="package_uninstall">
+ <property name="geometry">
+ <rect>
+ <x>405</x>
+ <y>105</y>
+ <width>190</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Uninstall package(s)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_uninstall.png</normaloff>../icon/package_uninstall.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="system_upgrade">
+ <property name="geometry">
+ <rect>
+ <x>595</x>
+ <y>105</y>
+ <width>190</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Upgrade system&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/system_upgrade.png</normaloff>../icon/system_upgrade.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="orphans_remove">
+ <property name="geometry">
+ <rect>
+ <x>785</x>
+ <y>105</y>
+ <width>190</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Remove orphan packages&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/remove_orphans.png</normaloff>../icon/remove_orphans.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ </widget>
+ <widget class="QFrame" name="browse">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>200</y>
+ <width>1000</width>
+ <height>400</height>
+ </rect>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Plain</enum>
+ </property>
+ <widget class="QPushButton" name="category_accesories">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>20</y>
+ <width>150</width>
+ <height>150</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Browse Accesories Category&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/category_accessories.png</normaloff>../icon/category_accessories.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>64</width>
+ <height>64</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_games">
+ <property name="geometry">
+ <rect>
+ <x>425</x>
+ <y>20</y>
+ <width>150</width>
+ <height>150</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Browse Games Category&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/category_games.png</normaloff>../icon/category_games.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>64</width>
+ <height>64</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_graphics">
+ <property name="geometry">
+ <rect>
+ <x>625</x>
+ <y>20</y>
+ <width>150</width>
+ <height>150</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Browse Graphics Category&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/category_graphics.png</normaloff>../icon/category_graphics.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>64</width>
+ <height>64</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_internet">
+ <property name="geometry">
+ <rect>
+ <x>825</x>
+ <y>20</y>
+ <width>150</width>
+ <height>150</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Browse Internet Category&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/category_internet.png</normaloff>../icon/category_internet.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>64</width>
+ <height>64</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_multimedia">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>215</y>
+ <width>150</width>
+ <height>150</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Browse Multimedia Category&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/category_multimedia.png</normaloff>../icon/category_multimedia.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>64</width>
+ <height>64</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_office">
+ <property name="geometry">
+ <rect>
+ <x>225</x>
+ <y>215</y>
+ <width>150</width>
+ <height>150</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Browse Office Category&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/category_office.png</normaloff>../icon/category_office.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>64</width>
+ <height>64</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_system">
+ <property name="geometry">
+ <rect>
+ <x>425</x>
+ <y>215</y>
+ <width>150</width>
+ <height>150</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Browse System Category&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/category_system.png</normaloff>../icon/category_system.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>64</width>
+ <height>64</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_development">
+ <property name="geometry">
+ <rect>
+ <x>225</x>
+ <y>20</y>
+ <width>150</width>
+ <height>150</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Browse Development Category&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/category_development.png</normaloff>../icon/category_development.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>64</width>
+ <height>64</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_everything">
+ <property name="geometry">
+ <rect>
+ <x>625</x>
+ <y>215</y>
+ <width>150</width>
+ <height>150</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Browse All Packages&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/category_all.png</normaloff>../icon/category_all.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>64</width>
+ <height>64</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_local">
+ <property name="geometry">
+ <rect>
+ <x>825</x>
+ <y>215</y>
+ <width>150</width>
+ <height>150</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Browse Installed Packages&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/category_local.png</normaloff>../icon/category_local.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>64</width>
+ <height>64</height>
+ </size>
+ </property>
+ </widget>
+ </widget>
+ </widget>
+ </widget>
+ <tabstops>
+ <tabstop>input</tabstop>
+ <tabstop>package_search</tabstop>
+ <tabstop>package_install</tabstop>
+ <tabstop>package_uninstall</tabstop>
+ <tabstop>system_upgrade</tabstop>
+ <tabstop>orphans_remove</tabstop>
+ <tabstop>category_accesories</tabstop>
+ <tabstop>category_development</tabstop>
+ <tabstop>category_games</tabstop>
+ <tabstop>category_graphics</tabstop>
+ <tabstop>category_internet</tabstop>
+ <tabstop>category_multimedia</tabstop>
+ <tabstop>category_office</tabstop>
+ <tabstop>category_system</tabstop>
+ <tabstop>category_local</tabstop>
+ <tabstop>category_everything</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/frontend/gui/ui/system.ui b/src/frontend/gui/ui/system.ui
new file mode 100644
index 0000000..59f1967
--- /dev/null
+++ b/src/frontend/gui/ui/system.ui
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>System</class>
+ <widget class="QWidget" name="System">
+ <property name="windowModality">
+ <enum>Qt::ApplicationModal</enum>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1000</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1000</width>
+ <height>600</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>Sisyphus : Category System</string>
+ </property>
+ <property name="windowIcon">
+ <iconset>
+ <normaloff>../icon/category_system.png</normaloff>../icon/category_system.png</iconset>
+ </property>
+ <widget class="QTableWidget" name="table_system">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>25</y>
+ <width>950</width>
+ <height>475</height>
+ </rect>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>950</width>
+ <height>500</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::Panel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QAbstractScrollArea::AdjustToContents</enum>
+ </property>
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="dragDropOverwriteMode">
+ <bool>false</bool>
+ </property>
+ <property name="selectionMode">
+ <enum>QAbstractItemView::SingleSelection</enum>
+ </property>
+ <property name="selectionBehavior">
+ <enum>QAbstractItemView::SelectRows</enum>
+ </property>
+ <attribute name="horizontalHeaderCascadingSectionResizes">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="horizontalHeaderDefaultSectionSize">
+ <number>110</number>
+ </attribute>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
+ <property name="text">
+ <string>Category</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Name</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Available Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Installed Version</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Description</string>
+ </property>
+ </column>
+ </widget>
+ <widget class="QPushButton" name="package_uninstall">
+ <property name="geometry">
+ <rect>
+ <x>275</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Uninstall package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_uninstall.png</normaloff>../icon/package_uninstall.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="orphans_remove">
+ <property name="geometry">
+ <rect>
+ <x>525</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Remove orphan packages&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/remove_orphans.png</normaloff>../icon/remove_orphans.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="category_exit">
+ <property name="geometry">
+ <rect>
+ <x>775</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Close window&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/window_close.png</normaloff>../icon/window_close.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="package_install">
+ <property name="geometry">
+ <rect>
+ <x>25</x>
+ <y>530</y>
+ <width>200</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property name="toolTip">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;Install package&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normaloff>../icon/package_install.png</normaloff>../icon/package_install.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>32</width>
+ <height>32</height>
+ </size>
+ </property>
+ </widget>
+ </widget>
+ <tabstops>
+ <tabstop>table_system</tabstop>
+ <tabstop>package_install</tabstop>
+ <tabstop>package_uninstall</tabstop>
+ <tabstop>orphans_remove</tabstop>
+ <tabstop>category_exit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>