diff --git a/.gitignore b/.gitignore index 2f78cf5..731c196 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ *.pyc +MANIFEST +dist/ +build/ diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..7a8f6b8 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,3 @@ +include trimage +recursive-include pixmaps * + diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dialog-warning.png b/dialog-warning.png deleted file mode 100644 index 3951521..0000000 Binary files a/dialog-warning.png and /dev/null differ diff --git a/compressing.gif b/pixmaps/compressing.gif similarity index 100% rename from compressing.gif rename to pixmaps/compressing.gif diff --git a/list-add.png b/pixmaps/list-add.png similarity index 100% rename from list-add.png rename to pixmaps/list-add.png diff --git a/trimage-icon.png b/pixmaps/trimage-icon.png similarity index 100% rename from trimage-icon.png rename to pixmaps/trimage-icon.png diff --git a/view-refresh.png b/pixmaps/view-refresh.png similarity index 100% rename from view-refresh.png rename to pixmaps/view-refresh.png diff --git a/logo-trimage.svg b/resources/logo-trimage.svg similarity index 100% rename from logo-trimage.svg rename to resources/logo-trimage.svg diff --git a/todo b/resources/todo similarity index 100% rename from todo rename to resources/todo diff --git a/window.ui b/resources/window.ui similarity index 100% rename from window.ui rename to resources/window.ui diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..fc9bdd6 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,5 @@ +[install] +install_lib=/usr/local/share/trimage +install_data=/usr/local/share/trimage +install_scripts=/usr/local/bin + diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..86aa83e --- /dev/null +++ b/setup.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +from distutils.core import setup + +setup(name = "Trimage", + version = "1.0.0b", + description = "Trimage image compressor - A cross-platform tool for optimizing PNG and JPG files", + author = "Kilian Valkhof, Paul Chaplin", + author_email = "help@trimage.org", + url = "http://trimage.org", + license = "MIT license", + packages = ["hurry", "hurry/filesize",""], + data_files = [("pixmaps", ["pixmaps/list-add.png", + "pixmaps/view-refresh.png", + "pixmaps/compressing.gif", + "pixmaps/trimage-icon.png"])], + scripts = ["trimage"], + long_description = """Trimage is a cross-platform GUI and command-line interface to optimize image files via optipng, advpng and jpegoptim, depending on the filetype (currently, PNG and JPG files are supported). It was inspired by imageoptim. All image files are losslessy compressed on the highest available compression levels. Trimage gives you various input functions to fit your own workflow: A regular file dialog, dragging and dropping and various command line options.""" + ) diff --git a/trimage.py b/trimage old mode 100644 new mode 100755 similarity index 63% rename from trimage.py rename to trimage index ec3a77f..228fdb5 --- a/trimage.py +++ b/trimage @@ -1,3 +1,5 @@ +#!/usr/bin/python + import sys from os import listdir from os import path @@ -8,9 +10,7 @@ from PyQt4.QtCore import * from PyQt4.QtGui import * from hurry.filesize import * -from ui import Ui_trimage - -VERSION = "1.0.0" +VERSION = "1.0.0b" class StartQT4(QMainWindow): @@ -146,7 +146,7 @@ class StartQT4(QMainWindow): if self.checkname(image): delegatorlist.append((image, QIcon(image))) self.imagelist.append(("Compressing...", "", "", "", image, - QIcon(QPixmap("compressing.gif")))) + QIcon(QPixmap("pixmaps/compressing.gif")))) else: sys.stderr.write("[error] %s not an image file" % image) @@ -338,6 +338,158 @@ class Worker(QThread): #make sure the app quits after all images are done quit() +class TrimageTableView(QTableView): + """Init the table drop event.""" + def __init__(self, parent=None): + super(TrimageTableView, self).__init__(parent) + self.setAcceptDrops(True) + + def dragEnterEvent(self, event): + if event.mimeData().hasFormat("text/uri-list"): + event.accept() + else: + event.ignore() + + def dragMoveEvent(self, event): + event.accept() + + def dropEvent(self, event): + files = str(event.mimeData().data("text/uri-list")).strip().split() + for i, file in enumerate(files): + files[i] = QUrl(QString(file)).toLocalFile() + self.emit(SIGNAL("fileDropEvent"), (files)) + + +class Ui_trimage(object): + def setupUi(self, trimage): + trimage.setObjectName("trimage") + trimage.resize(600, 170) + trimage.setWindowIcon(QIcon("pixmaps/trimage-icon.png")) + + self.centralwidget = QWidget(trimage) + self.centralwidget.setObjectName("centralwidget") + + self.gridLayout_2 = QGridLayout(self.centralwidget) + self.gridLayout_2.setMargin(0) + self.gridLayout_2.setSpacing(0) + self.gridLayout_2.setObjectName("gridLayout_2") + + self.widget = QWidget(self.centralwidget) + self.widget.setEnabled(True) + sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(1) + sizePolicy.setVerticalStretch(1) + sizePolicy.setHeightForWidth( + self.widget.sizePolicy().hasHeightForWidth()) + self.widget.setSizePolicy(sizePolicy) + self.widget.setObjectName("widget") + + self.verticalLayout = QVBoxLayout(self.widget) + self.verticalLayout.setSpacing(0) + self.verticalLayout.setMargin(0) + self.verticalLayout.setObjectName("verticalLayout") + + self.frame = QFrame(self.widget) + self.frame.setObjectName("frame") + + self.verticalLayout_2 = QVBoxLayout(self.frame) + self.verticalLayout_2.setSpacing(0) + self.verticalLayout_2.setMargin(0) + self.verticalLayout_2.setObjectName("verticalLayout_2") + + self.horizontalLayout = QHBoxLayout() + self.horizontalLayout.setSpacing(0) + self.horizontalLayout.setMargin(10) + self.horizontalLayout.setObjectName("horizontalLayout") + + self.addfiles = QPushButton(self.frame) + font = QFont() + font.setPointSize(9) + self.addfiles.setFont(font) + self.addfiles.setCursor(Qt.PointingHandCursor) + icon = QIcon() + icon.addPixmap(QPixmap("pixmaps/list-add.png"), QIcon.Normal, QIcon.Off) + self.addfiles.setIcon(icon) + self.addfiles.setObjectName("addfiles") + self.addfiles.setAcceptDrops(True) + self.horizontalLayout.addWidget(self.addfiles) + + self.label = QLabel(self.frame) + font = QFont() + font.setPointSize(8) + self.label.setFont(font) + self.label.setFrameShadow(QFrame.Plain) + self.label.setMargin(1) + self.label.setIndent(10) + self.label.setObjectName("label") + self.horizontalLayout.addWidget(self.label) + + spacerItem = QSpacerItem(498, 20, QSizePolicy.Expanding, + QSizePolicy.Minimum) + self.horizontalLayout.addItem(spacerItem) + self.recompress = QPushButton(self.frame) + font = QFont() + font.setPointSize(9) + self.recompress.setFont(font) + self.recompress.setCursor(Qt.PointingHandCursor) + + icon1 = QIcon() + icon1.addPixmap(QPixmap("pixmaps/view-refresh.png"), QIcon.Normal, QIcon.Off) + + self.recompress.setIcon(icon1) + self.recompress.setCheckable(False) + self.recompress.setObjectName("recompress") + self.horizontalLayout.addWidget(self.recompress) + self.verticalLayout_2.addLayout(self.horizontalLayout) + + self.processedfiles = TrimageTableView(self.frame) + self.processedfiles.setEnabled(True) + self.processedfiles.setFrameShape(QFrame.NoFrame) + self.processedfiles.setFrameShadow(QFrame.Plain) + self.processedfiles.setLineWidth(0) + self.processedfiles.setMidLineWidth(0) + self.processedfiles.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) + self.processedfiles.setTabKeyNavigation(True) + self.processedfiles.setAlternatingRowColors(True) + self.processedfiles.setTextElideMode(Qt.ElideRight) + self.processedfiles.setShowGrid(True) + self.processedfiles.setGridStyle(Qt.NoPen) + self.processedfiles.setSortingEnabled(False) + self.processedfiles.setObjectName("processedfiles") + self.processedfiles.resizeColumnsToContents() + self.processedfiles.setSelectionMode(QAbstractItemView.NoSelection) + self.verticalLayout_2.addWidget(self.processedfiles) + self.verticalLayout.addWidget(self.frame) + self.gridLayout_2.addWidget(self.widget, 0, 0, 1, 1) + trimage.setCentralWidget(self.centralwidget) + + self.retranslateUi(trimage) + QMetaObject.connectSlotsByName(trimage) + + def retranslateUi(self, trimage): + trimage.setWindowTitle(QApplication.translate("trimage", + "Trimage image compressor", None, QApplication.UnicodeUTF8)) + self.addfiles.setToolTip(QApplication.translate("trimage", + "Add file to the compression list", None, + QApplication.UnicodeUTF8)) + self.addfiles.setText(QApplication.translate("trimage", + "&Add and compress", None, QApplication.UnicodeUTF8)) + self.addfiles.setShortcut(QApplication.translate("trimage", + "Alt+A", None, QApplication.UnicodeUTF8)) + self.label.setText(QApplication.translate("trimage", + "Drag and drop images onto the table", None, + QApplication.UnicodeUTF8)) + self.recompress.setToolTip(QApplication.translate("trimage", + "Recompress selected images", None, QApplication.UnicodeUTF8)) + self.recompress.setText(QApplication.translate("trimage", + "&Recompress", None, QApplication.UnicodeUTF8)) + self.recompress.setShortcut(QApplication.translate("trimage", + "Alt+R", None, QApplication.UnicodeUTF8)) + self.processedfiles.setToolTip(QApplication.translate("trimage", + "Drag files in here", None, QApplication.UnicodeUTF8)) + self.processedfiles.setWhatsThis(QApplication.translate("trimage", + "Drag files in here", None, QApplication.UnicodeUTF8)) + if __name__ == "__main__": app = QApplication(sys.argv) myapp = StartQT4() diff --git a/ui.py b/ui.py index ff1d8da..685c8f3 100644 --- a/ui.py +++ b/ui.py @@ -28,7 +28,7 @@ class Ui_trimage(object): def setupUi(self, trimage): trimage.setObjectName("trimage") trimage.resize(600, 170) - trimage.setWindowIcon(QIcon("trimage-icon.png")) + trimage.setWindowIcon(QIcon("pixmaps/trimage-icon.png")) self.centralwidget = QWidget(trimage) self.centralwidget.setObjectName("centralwidget") @@ -72,7 +72,7 @@ class Ui_trimage(object): self.addfiles.setFont(font) self.addfiles.setCursor(Qt.PointingHandCursor) icon = QIcon() - icon.addPixmap(QPixmap("list-add.png"), QIcon.Normal, QIcon.Off) + icon.addPixmap(QPixmap("pixmaps/list-add.png"), QIcon.Normal, QIcon.Off) self.addfiles.setIcon(icon) self.addfiles.setObjectName("addfiles") self.addfiles.setAcceptDrops(True) @@ -98,7 +98,7 @@ class Ui_trimage(object): self.recompress.setCursor(Qt.PointingHandCursor) icon1 = QIcon() - icon1.addPixmap(QPixmap("view-refresh.png"), QIcon.Normal, QIcon.Off) + icon1.addPixmap(QPixmap("pixmaps/view-refresh.png"), QIcon.Normal, QIcon.Off) self.recompress.setIcon(icon1) self.recompress.setCheckable(False)