about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--KCC-OSX.ui38
-rw-r--r--KCC.qrc1
-rw-r--r--KCC.ui49
-rw-r--r--icons/Other.pngbin0 -> 1504 bytes
-rw-r--r--kcc/KCC_gui.py116
-rw-r--r--kcc/KCC_rc.py117
-rw-r--r--kcc/KCC_ui.py22
-rwxr-xr-xkcc/comic2ebook.py5
-rwxr-xr-xkcc/image.py6
9 files changed, 219 insertions, 135 deletions
diff --git a/KCC-OSX.ui b/KCC-OSX.ui
index 9f95c68..e935245 100644
--- a/KCC-OSX.ui
+++ b/KCC-OSX.ui
@@ -444,7 +444,7 @@ p, li { white-space: pre-wrap; }
      <rect>
       <x>5</x>
       <y>10</y>
-      <width>156</width>
+      <width>210</width>
       <height>41</height>
      </rect>
     </property>
@@ -465,9 +465,9 @@ p, li { white-space: pre-wrap; }
    <widget class="QPushButton" name="AdvModeButton">
     <property name="geometry">
      <rect>
-      <x>160</x>
+      <x>207</x>
       <y>10</y>
-      <width>101</width>
+      <width>210</width>
       <height>41</height>
      </rect>
     </property>
@@ -485,27 +485,6 @@ p, li { white-space: pre-wrap; }
      <string>Advanced</string>
     </property>
    </widget>
-   <widget class="QPushButton" name="ExpertModeButton">
-    <property name="geometry">
-     <rect>
-      <x>260</x>
-      <y>10</y>
-      <width>157</width>
-      <height>41</height>
-     </rect>
-    </property>
-    <property name="font">
-     <font>
-      <pointsize>12</pointsize>
-     </font>
-    </property>
-    <property name="focusPolicy">
-     <enum>Qt::NoFocus</enum>
-    </property>
-    <property name="text">
-     <string>Expert</string>
-    </property>
-   </widget>
    <widget class="QFrame" name="OptionsAdvancedGamma">
     <property name="enabled">
      <bool>true</bool>
@@ -659,7 +638,7 @@ p, li { white-space: pre-wrap; }
          </font>
         </property>
         <property name="toolTip">
-         <string>Device profile width will be overwritten by this value.</string>
+         <string>Resolution of target device.</string>
         </property>
         <property name="text">
          <string>Custom width: </string>
@@ -692,7 +671,7 @@ p, li { white-space: pre-wrap; }
          <bool>false</bool>
         </property>
         <property name="toolTip">
-         <string>Device profile width will be overwritten by this value.</string>
+         <string>Resolution of target device.</string>
         </property>
         <property name="inputMask">
          <string>0000; </string>
@@ -712,7 +691,7 @@ p, li { white-space: pre-wrap; }
          </font>
         </property>
         <property name="toolTip">
-         <string>Device profile height will be overwritten by this value.</string>
+         <string>Resolution of target device.</string>
         </property>
         <property name="text">
          <string>Custom height: </string>
@@ -745,7 +724,7 @@ p, li { white-space: pre-wrap; }
          <bool>false</bool>
         </property>
         <property name="toolTip">
-         <string>Device profile height will be overwritten by this value.</string>
+         <string>Resolution of target device.</string>
         </property>
         <property name="inputMask">
          <string>0000; </string>
@@ -759,8 +738,8 @@ p, li { white-space: pre-wrap; }
     </widget>
    </widget>
    <zorder>BasicModeButton</zorder>
-   <zorder>ExpertModeButton</zorder>
    <zorder>AdvModeButton</zorder>
+   <zorder>ProgressBar</zorder>
    <zorder>JobList</zorder>
    <zorder>OptionsAdvanced</zorder>
    <zorder>DeviceBox</zorder>
@@ -771,7 +750,6 @@ p, li { white-space: pre-wrap; }
    <zorder>ClearButton</zorder>
    <zorder>OptionsBasic</zorder>
    <zorder>OptionsAdvancedGamma</zorder>
-   <zorder>ProgressBar</zorder>
    <zorder>OptionsExpert</zorder>
   </widget>
   <action name="ActionBasic">
diff --git a/KCC.qrc b/KCC.qrc
index 01fe5b2..07f771d 100644
--- a/KCC.qrc
+++ b/KCC.qrc
@@ -3,6 +3,7 @@
     <file>icons/comic2ebook.png</file>
   </qresource>
   <qresource prefix="Devices">
+    <file>icons/Other.png</file>
     <file>icons/Kindle.png</file>
   </qresource>
   <qresource prefix="Formats">
diff --git a/KCC.ui b/KCC.ui
index 664cad8..ee67fc1 100644
--- a/KCC.ui
+++ b/KCC.ui
@@ -394,7 +394,7 @@ p, li { white-space: pre-wrap; }
      <rect>
       <x>10</x>
       <y>10</y>
-      <width>141</width>
+      <width>195</width>
       <height>32</height>
      </rect>
     </property>
@@ -413,9 +413,9 @@ p, li { white-space: pre-wrap; }
    <widget class="QPushButton" name="AdvModeButton">
     <property name="geometry">
      <rect>
-      <x>160</x>
+      <x>217</x>
       <y>10</y>
-      <width>91</width>
+      <width>195</width>
       <height>32</height>
      </rect>
     </property>
@@ -431,27 +431,6 @@ p, li { white-space: pre-wrap; }
      <string>Advanced</string>
     </property>
    </widget>
-   <widget class="QPushButton" name="ExpertModeButton">
-    <property name="geometry">
-     <rect>
-      <x>260</x>
-      <y>10</y>
-      <width>151</width>
-      <height>32</height>
-     </rect>
-    </property>
-    <property name="font">
-     <font>
-      <pointsize>9</pointsize>
-     </font>
-    </property>
-    <property name="focusPolicy">
-     <enum>Qt::NoFocus</enum>
-    </property>
-    <property name="text">
-     <string>Expert</string>
-    </property>
-   </widget>
    <widget class="QFrame" name="OptionsAdvancedGamma">
     <property name="enabled">
      <bool>true</bool>
@@ -583,7 +562,7 @@ p, li { white-space: pre-wrap; }
       <item row="0" column="0">
        <widget class="QLabel" name="wLabel">
         <property name="toolTip">
-         <string>Device profile width will be overwritten by this value.</string>
+         <string>Resolution of target device.</string>
         </property>
         <property name="text">
          <string>Custom width: </string>
@@ -611,7 +590,7 @@ p, li { white-space: pre-wrap; }
          <bool>false</bool>
         </property>
         <property name="toolTip">
-         <string>Device profile width will be overwritten by this value.</string>
+         <string>Resolution of target device.</string>
         </property>
         <property name="inputMask">
          <string>0000; </string>
@@ -624,7 +603,7 @@ p, li { white-space: pre-wrap; }
       <item row="0" column="2">
        <widget class="QLabel" name="hLabel">
         <property name="toolTip">
-         <string>Device profile height will be overwritten by this value.</string>
+         <string>Resolution of target device.</string>
         </property>
         <property name="text">
          <string>Custom height: </string>
@@ -652,7 +631,7 @@ p, li { white-space: pre-wrap; }
          <bool>false</bool>
         </property>
         <property name="toolTip">
-         <string>Device profile height will be overwritten by this value.</string>
+         <string>Resolution of target device.</string>
         </property>
         <property name="inputMask">
          <string>0000; </string>
@@ -665,6 +644,20 @@ p, li { white-space: pre-wrap; }
      </layout>
     </widget>
    </widget>
+   <zorder>OptionsAdvanced</zorder>
+   <zorder>DeviceBox</zorder>
+   <zorder>FormatBox</zorder>
+   <zorder>ConvertButton</zorder>
+   <zorder>DirectoryButton</zorder>
+   <zorder>FileButton</zorder>
+   <zorder>ClearButton</zorder>
+   <zorder>OptionsBasic</zorder>
+   <zorder>JobList</zorder>
+   <zorder>BasicModeButton</zorder>
+   <zorder>AdvModeButton</zorder>
+   <zorder>OptionsAdvancedGamma</zorder>
+   <zorder>OptionsExpert</zorder>
+   <zorder>ProgressBar</zorder>
   </widget>
   <action name="ActionBasic">
    <property name="checkable">
diff --git a/icons/Other.png b/icons/Other.png
new file mode 100644
index 0000000..3e307ef
--- /dev/null
+++ b/icons/Other.png
Binary files differdiff --git a/kcc/KCC_gui.py b/kcc/KCC_gui.py
index aff3a4d..99a251b 100644
--- a/kcc/KCC_gui.py
+++ b/kcc/KCC_gui.py
@@ -39,6 +39,8 @@ class Icons:
     def __init__(self):
         self.deviceKindle = QtGui.QIcon()
         self.deviceKindle.addPixmap(QtGui.QPixmap(":/Devices/icons/Kindle.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.deviceOther = QtGui.QIcon()
+        self.deviceOther.addPixmap(QtGui.QPixmap(":/Devices/icons/Other.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
 
         self.MOBIFormat = QtGui.QIcon()
         self.MOBIFormat.addPixmap(QtGui.QPixmap(":/Formats/icons/MOBI.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
@@ -97,28 +99,28 @@ class WorkerThread(QtCore.QThread):
             argv.append("--quality=1")
         elif GUI.QualityBox.checkState() == 2:
             argv.append("--quality=2")
-        if GUI.ProcessingBox.isChecked():
-            argv.append("--noprocessing")
-        if GUI.UpscaleBox.isChecked() and not GUI.StretchBox.isChecked():
-            argv.append("--upscale")
-        if GUI.NoRotateBox.isChecked():
-            argv.append("--nosplitrotate")
-        if GUI.BorderBox.isChecked():
-            argv.append("--blackborders")
-        if GUI.StretchBox.isChecked():
-            argv.append("--stretch")
-        if GUI.NoDitheringBox.isChecked():
-            argv.append("--nodithering")
-        if self.parent.GammaValue > 0.09:
-            argv.append("--gamma=" + self.parent.GammaValue)
-        if str(GUI.FormatBox.currentText()) == 'CBZ':
-            argv.append("--cbz-output")
-        if str(GUI.customWidth.text()) != '':
+        if self.parent.currentMode > 1:
+            if GUI.ProcessingBox.isChecked():
+                argv.append("--noprocessing")
+            if GUI.UpscaleBox.isChecked() and not GUI.StretchBox.isChecked():
+                argv.append("--upscale")
+            if GUI.NoRotateBox.isChecked():
+                argv.append("--nosplitrotate")
+            if GUI.BorderBox.isChecked():
+                argv.append("--blackborders")
+            if GUI.StretchBox.isChecked():
+                argv.append("--stretch")
+            if GUI.NoDitheringBox.isChecked():
+                argv.append("--nodithering")
+            if self.parent.GammaValue > 0.09:
+                argv.append("--gamma=" + self.parent.GammaValue)
+            if str(GUI.FormatBox.currentText()) == 'CBZ':
+                argv.append("--cbz-output")
+        if self.parent.currentMode > 2:
             argv.append("--customwidth=" + str(GUI.customWidth.text()))
-        if str(GUI.customHeight.text()) != '':
             argv.append("--customheight=" + str(GUI.customHeight.text()))
-        if GUI.ColorBox.isChecked():
-            argv.append("--forcecolor")
+            if GUI.ColorBox.isChecked():
+                argv.append("--forcecolor")
         for i in range(GUI.JobList.count()):
             currentJobs.append(str(GUI.JobList.item(i).text()))
         GUI.JobList.clear()
@@ -150,7 +152,7 @@ class WorkerThread(QtCore.QThread):
                         self.emit(QtCore.SIGNAL("addMessage"), 'Creating MOBI file...', 'info')
                         self.emit(QtCore.SIGNAL("progressBarTick"), 1)
                         try:
-                            retcode = call('kindlegen "' + outputPath + '"', shell=True)
+                            retcode = call('kindlegen -verbose "' + outputPath + '"', shell=True)
                         except:
                             continue
                         if retcode == 0:
@@ -174,7 +176,8 @@ class WorkerThread(QtCore.QThread):
                                           'MOBI file will work correctly but it will be highly oversized.', 'warning')
                         else:
                             os.remove(outputPath)
-                            os.remove(outputPath.replace('.epub', '.mobi'))
+                            if os.path.exists(outputPath.replace('.epub', '.mobi')):
+                                os.remove(outputPath.replace('.epub', '.mobi'))
                             self.emit(QtCore.SIGNAL("addMessage"), 'KindleGen failed to create MOBI!', 'error')
                             self.emit(QtCore.SIGNAL("addMessage"), 'Try converting a bit smaller batch.', 'error')
                     else:
@@ -246,7 +249,6 @@ class Ui_KCC(object):
         MainWindow.resize(420, 270)
         GUI.BasicModeButton.setStyleSheet('font-weight:Bold;')
         GUI.AdvModeButton.setStyleSheet('font-weight:Normal;')
-        GUI.ExpertModeButton.setStyleSheet('font-weight:Normal;')
         GUI.FormatBox.setCurrentIndex(0)
         GUI.FormatBox.setEnabled(False)
         GUI.OptionsAdvanced.setEnabled(False)
@@ -255,16 +257,6 @@ class Ui_KCC(object):
         GUI.ProcessingBox.hide()
         GUI.UpscaleBox.hide()
         GUI.NoRotateBox.hide()
-        GUI.ProcessingBox.setChecked(False)
-        GUI.UpscaleBox.setChecked(False)
-        GUI.NoRotateBox.setChecked(False)
-        GUI.BorderBox.setChecked(False)
-        GUI.StretchBox.setChecked(False)
-        GUI.NoDitheringBox.setChecked(False)
-        GUI.GammaSlider.setValue(0)
-        GUI.customWidth.setText('')
-        GUI.customHeight.setText('')
-        GUI.ColorBox.setChecked(False)
 
     def modeAdvanced(self):
         self.currentMode = 2
@@ -273,7 +265,6 @@ class Ui_KCC(object):
         MainWindow.resize(420, 345)
         GUI.BasicModeButton.setStyleSheet('font-weight:Normal;')
         GUI.AdvModeButton.setStyleSheet('font-weight:Bold;')
-        GUI.ExpertModeButton.setStyleSheet('font-weight:Normal;')
         GUI.FormatBox.setEnabled(True)
         GUI.ProcessingBox.show()
         GUI.UpscaleBox.show()
@@ -281,30 +272,19 @@ class Ui_KCC(object):
         GUI.OptionsAdvancedGamma.setEnabled(True)
         GUI.OptionsAdvanced.setEnabled(True)
         GUI.OptionsExpert.setEnabled(False)
-        GUI.customWidth.setText('')
-        GUI.customHeight.setText('')
-        GUI.ColorBox.setChecked(False)
 
     def modeExpert(self):
+        self.modeAdvanced()
         self.currentMode = 3
         MainWindow.setMinimumSize(QtCore.QSize(420, 380))
         MainWindow.setMaximumSize(QtCore.QSize(420, 380))
         MainWindow.resize(420, 380)
-        GUI.BasicModeButton.setStyleSheet('font-weight:Normal;')
-        GUI.AdvModeButton.setStyleSheet('font-weight:Normal;')
-        GUI.ExpertModeButton.setStyleSheet('font-weight:Bold;')
-        GUI.FormatBox.setEnabled(True)
-        GUI.ProcessingBox.show()
-        GUI.UpscaleBox.show()
-        GUI.NoRotateBox.show()
-        GUI.OptionsAdvancedGamma.setEnabled(True)
-        GUI.OptionsAdvanced.setEnabled(True)
         GUI.OptionsExpert.setEnabled(True)
 
     def modeConvert(self, enable):
-        GUI.BasicModeButton.setEnabled(enable)
-        GUI.AdvModeButton.setEnabled(enable)
-        GUI.ExpertModeButton.setEnabled(enable)
+        if self.currentMode != 3:
+            GUI.BasicModeButton.setEnabled(enable)
+            GUI.AdvModeButton.setEnabled(enable)
         GUI.DirectoryButton.setEnabled(enable)
         GUI.ClearButton.setEnabled(enable)
         GUI.FileButton.setEnabled(enable)
@@ -332,6 +312,21 @@ class Ui_KCC(object):
             self.GammaValue = value
         GUI.GammaLabel.setText('Gamma: ' + str(value))
 
+    def changeDevice(self, value):
+        if value == 11 and self.currentMode != 3:
+            GUI.BasicModeButton.setEnabled(False)
+            GUI.AdvModeButton.setEnabled(False)
+            self.modeExpert()
+        elif self.currentMode == 3:
+            GUI.BasicModeButton.setEnabled(True)
+            GUI.AdvModeButton.setEnabled(True)
+            self.modeBasic()
+        if value in [0, 1, 5, 6, 7, 8, 9, 11]:
+            GUI.QualityBox.setCheckState(0)
+            GUI.QualityBox.setEnabled(False)
+        else:
+            GUI.QualityBox.setEnabled(True)
+
     def addMessage(self, message, icon=None, replace=False):
         if icon:
             icon = eval('self.icons.' + icon)
@@ -365,6 +360,11 @@ class Ui_KCC(object):
             self.addMessage('No files selected! Please choose files to convert.', 'error')
             self.needClean = True
             return
+        if self.currentMode > 2 and (str(GUI.customWidth.text()) == '' or str(GUI.customHeight.text()) == ''):
+            GUI.JobList.clear()
+            self.addMessage('Target resolution is not set!', 'error')
+            self.needClean = True
+            return
         self.worker.start()
 
     def hideProgressBar(self):
@@ -374,6 +374,7 @@ class Ui_KCC(object):
     def saveSettings(self, event):
         self.settings.setValue('lastPath', self.lastPath)
         self.settings.setValue('lastDevice', GUI.DeviceBox.currentIndex())
+        self.settings.setValue('currentMode', self.currentMode)
         self.settings.sync()
 
     def __init__(self, UI, KCC):
@@ -385,6 +386,7 @@ class Ui_KCC(object):
         self.settings = QtCore.QSettings('KindleComicConverter', 'KindleComicConverter')
         self.lastPath = self.settings.value('lastPath', '', type=str)
         self.lastDevice = self.settings.value('lastDevice', 10, type=int)
+        self.currentMode = self.settings.value('currentMode', 1, type=int)
         self.worker = WorkerThread(self)
         self.versionCheck = VersionThread(self)
         self.needClean = True
@@ -407,12 +409,12 @@ class Ui_KCC(object):
 
         GUI.BasicModeButton.clicked.connect(self.modeBasic)
         GUI.AdvModeButton.clicked.connect(self.modeAdvanced)
-        GUI.ExpertModeButton.clicked.connect(self.modeExpert)
         GUI.DirectoryButton.clicked.connect(self.selectDir)
         GUI.ClearButton.clicked.connect(self.clearJobs)
         GUI.FileButton.clicked.connect(self.selectFile)
         GUI.ConvertButton.clicked.connect(self.convertStart)
         GUI.GammaSlider.valueChanged.connect(self.changeGamma)
+        GUI.DeviceBox.activated.connect(self.changeDevice)
         KCC.connect(self.worker, QtCore.SIGNAL("progressBarTick"), self.updateProgressbar)
         KCC.connect(self.worker, QtCore.SIGNAL("modeConvert"), self.modeConvert)
         KCC.connect(self.worker, QtCore.SIGNAL("addMessage"), self.addMessage)
@@ -422,12 +424,22 @@ class Ui_KCC(object):
         KCC.closeEvent = self.saveSettings
 
         for profile in profiles:
-            GUI.DeviceBox.addItem(self.icons.deviceKindle, profile)
+            if profile != "Other":
+                GUI.DeviceBox.addItem(self.icons.deviceKindle, profile)
+            else:
+                GUI.DeviceBox.addItem(self.icons.deviceOther, profile)
         GUI.DeviceBox.setCurrentIndex(self.lastDevice)
+
         for f in formats:
             GUI.FormatBox.addItem(eval('self.icons.' + f + 'Format'), f)
         GUI.FormatBox.setCurrentIndex(0)
 
-        self.modeBasic()
+        if self.currentMode == 1:
+            self.modeBasic()
+        elif self.currentMode == 2:
+            self.modeAdvanced()
+        elif self.currentMode == 3:
+            self.modeExpert()
         self.versionCheck.start()
         self.hideProgressBar()
+        self.changeDevice(self.lastDevice)
\ No newline at end of file
diff --git a/kcc/KCC_rc.py b/kcc/KCC_rc.py
index cf53258..0fa5393 100644
--- a/kcc/KCC_rc.py
+++ b/kcc/KCC_rc.py
@@ -2,7 +2,7 @@
 
 # Resource object code
 #
-# Created: Pt 14. cze 15:03:03 2013
+# Created: Śr 19. cze 10:35:51 2013
 #      by: The Resource Compiler for PyQt (Qt v4.8.4)
 #
 # WARNING! All changes made in this file will be lost!
@@ -7680,6 +7680,102 @@ qt_resource_data = "\
 \x30\x39\x2c\x80\xc9\x61\x01\x4c\x0e\x0b\x60\x72\xfe\x0d\x3d\x48\
 \xb1\xea\xac\xcd\x38\x11\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
 \x60\x82\
+\x00\x00\x05\xe0\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3\x3e\x61\xcb\
+\x00\x00\x00\x06\x62\x4b\x47\x44\x00\x00\x00\x00\x00\x00\xf9\x43\
+\xbb\x7f\x00\x00\x05\x95\x49\x44\x41\x54\x78\xda\xed\x5d\xc1\x6a\
+\x25\x45\x14\x3d\xd5\x69\xd1\x30\x82\x82\x0b\xa1\x47\x88\x9b\x2c\
+\x14\x5c\x48\xe1\x07\x08\x32\x2b\x41\x44\xc1\x9d\x0b\xc1\x45\xb2\
+\x57\xf0\x0f\xfc\x00\xc1\xac\xdd\x89\x2e\x5c\xa9\x2b\x71\x40\x44\
+\x1c\x0a\x92\x85\x0c\x48\x22\x44\x85\xde\x08\x2a\x12\x83\x3a\xe9\
+\x76\x31\x79\x43\xa7\xd2\xd5\xaf\xfa\xbd\x7e\xdd\xf7\x56\x9f\x03\
+\x43\x42\x32\x79\xdd\xef\x9e\x53\xa7\xee\xbd\x5d\xaf\x0a\x20\x08\
+\x82\x20\x08\x82\x20\x08\x82\x20\x08\x82\x20\x08\x22\x7d\x18\x09\
+\x37\x61\xad\xbd\x09\xe0\x16\x80\x1d\x00\x8f\xcd\x28\xfe\x7f\x03\
+\xf8\x15\xc0\xd7\xce\xb9\xbb\xb3\x13\x80\xb5\xf6\x19\x00\xef\x03\
+\x78\x19\x40\x36\xf3\xc1\xf8\x3d\x80\x77\x9d\x73\xb7\xc7\xbc\xe8\
+\xd6\x84\xe4\xbf\x06\xe0\x73\x00\xcf\x49\x71\xa2\x89\x71\x13\xc0\
+\x9b\x45\x51\xfc\x5b\x96\xe5\x37\x49\x0b\xc0\x5a\xfb\x22\x80\xcf\
+\x00\x3c\x42\xde\xaf\x39\xf2\x4b\x45\x51\xfc\x56\x96\xe5\x9d\x24\
+\xa7\x00\x6b\xed\x36\x80\x1f\x01\x3c\x45\xbe\x83\xf8\x07\xc0\xb3\
+\xce\xb9\x9f\x36\x7d\xa1\x29\xe6\xdd\xb7\x49\xfe\x52\x3c\x0c\xe0\
+\xbd\x31\x2e\x34\x85\x00\x5e\x27\xbf\x51\x78\xd5\x5a\xbb\x95\xa2\
+\x00\x9e\x27\xb7\x51\x78\xe2\xb2\x2c\x4e\x47\x00\xd6\xda\x1b\x00\
+\x1e\x25\xb7\xd1\x78\x32\x35\x07\x78\x88\x9c\xca\x8a\x57\xc6\x18\
+\xcf\x1b\xb9\xa4\x9b\xd9\xde\xde\xc6\xce\x4e\xdc\xb4\x67\xcc\xfd\
+\x0a\x36\xcb\x32\x18\x63\x50\xd7\xf5\x95\x7f\xd2\x71\x7e\x7e\x8e\
+\xd3\xd3\x53\x0a\xa0\x89\xdd\xdd\x5d\x1c\x1c\x1c\xcc\x62\xe4\x1d\
+\x1d\x1d\x61\x6f\x6f\x8f\x02\x58\x07\x0b\x17\xf0\xa1\xc1\x01\x38\
+\x05\x0c\x40\x7c\x53\x00\x8b\x69\xa0\xf9\x3d\x85\x90\xa0\x00\x8c\
+\x31\x57\x04\xe0\x8b\xa0\xe9\x00\x14\x42\x62\x02\x58\x10\xee\x8b\
+\x20\xf4\x7f\x9b\xc4\x53\x04\x89\x39\x40\x88\xf8\xb6\xa9\xa1\xaa\
+\x2a\x8a\x40\xbb\x00\xda\x46\x7f\x28\x19\x6c\x4e\x01\x8b\x52\xb1\
+\xae\x6b\x54\x55\x45\x11\x78\xc8\x52\x23\xbf\xed\x67\x8b\xbf\xcb\
+\xb2\xec\x41\xdf\x80\x50\xe2\x00\x7d\xc9\xef\x4a\x08\x59\x2e\x2a\
+\x13\x80\x4f\xfe\x2a\x23\xf7\x41\x32\x58\x5d\xc0\x64\x5b\xec\x1b\
+\x68\x11\xc0\x32\xf2\xfb\x88\xc1\x18\x83\xfa\x92\xfc\xc5\x6b\xb5\
+\xb5\x8d\xe7\x28\x84\x5c\x1a\xe9\x5d\x75\xbf\x3f\x6a\x7b\x8b\xa0\
+\x41\x70\x5f\x21\xa4\xda\x75\x14\x25\x80\x2c\xcb\xa2\x4a\xbd\x55\
+\x93\x38\x5f\x04\xcd\xd7\x6a\x8a\xa1\x99\x3f\xf4\xb9\x96\x46\x31\
+\x88\x76\x80\x50\xa7\x6f\xdd\x6b\x84\x44\xe0\x27\x8f\x21\x47\xf2\
+\x9d\x44\xf3\x34\x22\xd2\x01\x86\x22\x3b\x46\x68\x3e\x99\x31\x42\
+\xf0\x2b\x0c\xcd\x4e\x90\x4b\x1a\xfd\xcd\x29\x60\x28\xdb\x8f\x15\
+\x43\x88\xb4\x98\x52\xb3\xcd\x55\xb4\x88\x40\x5c\x15\xd0\x95\x6c\
+\x8d\xe1\x0a\xab\x12\xa7\xb5\xcf\x20\x46\x00\xcb\x82\xd5\x45\xfe\
+\x90\xe2\x58\x27\xe9\xd3\x28\x02\x51\xad\xe0\xae\x5e\xfd\xb2\x40\
+\x4e\x11\xe8\x50\x7f\x42\x53\xab\x59\x9c\x00\x34\x66\xd2\x5d\xfd\
+\x0b\xe9\x62\x10\x29\x80\x95\x45\x30\xa1\x70\xfc\x0a\x42\x8b\x13\
+\x88\x12\xc0\x2a\xa4\x5f\xf9\x1b\x81\x01\xa7\x03\xac\x40\x66\xf3\
+\x6b\x6c\x93\x45\x42\xa0\x43\x2e\x20\x59\x04\x62\xd7\x03\xc4\x26\
+\x83\x92\x83\xbb\x6c\xd9\x1a\x05\x10\x21\x02\xed\x09\xa1\x74\x17\
+\x50\xe1\x00\x9a\x45\x20\xdd\x05\x92\x70\x00\xe9\x89\x96\x64\x11\
+\xa8\x58\x13\xa8\x71\xe1\xc6\x3a\x0b\x58\x28\x00\xc5\x39\x80\x36\
+\x87\xca\xb5\x38\x80\x1f\xcc\xae\xc5\x9e\x44\x42\x53\x40\x97\x0b\
+\x68\x21\x5f\xb2\x8b\xa9\xd9\x20\x82\x9f\xf1\x63\x12\xa8\xaa\x24\
+\xd4\xb2\x40\x44\xd5\x16\x31\x5a\x57\xdd\xd0\x01\x06\x74\x01\x8d\
+\xa4\x4b\x76\x2f\x95\x9b\x44\x49\x17\x41\x5b\xcf\x82\x53\xc0\x86\
+\x12\x41\x89\x81\xe5\x8a\xa0\x99\x43\x53\xae\x42\x01\x30\x09\xd4\
+\x0d\x76\x02\x67\x24\x00\x92\x4d\x07\x50\xb7\xec\x9a\x02\x20\x28\
+\x80\x21\x47\xfe\xd0\x9f\x16\xa6\x00\x14\x0b\x80\x98\x89\x00\x48\
+\xfe\x8c\x05\x10\x5a\x5f\xcf\xb5\x00\x33\x10\x80\xf6\x91\xaf\xe1\
+\xc1\x95\x2a\x07\xd0\x0a\xc9\x4f\x31\x33\xe9\xc4\xb7\xd9\xbd\x64\
+\x31\x68\x5b\xb3\xa0\xc2\x01\xb4\x90\xcf\x29\x60\xc3\xe4\x6b\x9c\
+\xff\xa5\x2f\x62\xc9\x48\x3e\xcb\x40\x71\xa4\x87\xca\x3d\xe9\xa2\
+\xd0\xb8\x5c\x2d\x63\x00\x37\x7b\xef\xdc\x1f\x60\x26\xb6\xaf\x75\
+\xb3\x28\xf1\x0e\xa0\x7d\x37\x6f\x3a\xc0\x8c\xa6\x82\xae\x92\x95\
+\x9f\x0e\x5e\x41\x04\xcb\x1c\x81\x0e\x90\x78\x1f\x40\x43\x1d\x1d\
+\x9b\xc7\xd0\x01\x56\x24\x5e\xbb\x0b\x48\x9f\x06\x54\xee\x10\x22\
+\x5d\x04\x9a\xda\xd7\xb9\x06\xf2\x63\x8f\x6b\x31\xf7\xa3\xcd\x24\
+\x36\x25\x07\xe8\x3d\x7a\x04\x04\x5f\x53\x3f\x43\xf5\xf1\xf1\xb1\
+\x22\xa8\x47\x26\x85\x27\x86\x0c\x94\x30\xc5\x6c\xb7\x7a\xed\xe7\
+\x8b\xe0\x37\x5f\x6b\x82\xf7\xc1\x13\x43\x06\x4a\x9e\x7a\x9f\x19\
+\xc8\x1c\x40\x6f\x0e\xd0\x7c\x1a\xa8\xad\x9e\xbe\x7e\x8f\x5c\x0f\
+\x30\x48\xf2\x24\xae\x8e\x8e\x21\xb3\xae\x81\xba\x52\xe1\x0c\xfc\
+\x68\x58\x7f\x95\x46\xf4\x2c\xaa\x2b\x42\xe1\xa2\xd0\x35\xe6\x4e\
+\x4d\x4f\x03\x17\x44\xff\x77\xef\x02\xc8\x72\x15\x6d\x6c\xb1\x07\
+\x46\x4c\x7d\x28\x63\xdb\xe1\x15\xa1\xaf\xcd\xfb\x35\xc6\x20\xcf\
+\xf3\xe0\xef\x59\x05\xf4\x70\x80\xd0\xa9\x9e\x6d\x47\xb7\xfa\xbf\
+\x1f\xa2\x14\x8b\x15\x81\xe6\x6a\x40\xac\x00\x62\x4f\xf0\x0e\x91\
+\x31\x55\xf0\xfd\x4d\x2d\xa5\x4f\x03\xa2\x3b\x81\xd2\xcf\x08\x0a\
+\x09\x57\xd3\xce\xa6\x2a\x1e\x06\xf9\xd6\x2e\xdd\xb5\x34\x6d\x6b\
+\xab\x6e\xbb\xf8\xa1\xe6\xf7\xb1\xa7\x2f\x0a\x60\x43\x01\x96\xe2\
+\x08\x5a\xd7\x31\xaa\x7f\x1a\xc8\x0d\xa3\x13\x12\xc0\xd9\xd9\x19\
+\x0e\x0f\x0f\x67\x11\xf8\xe3\xe3\x63\x0a\xc0\xc7\xc9\xc9\x09\xf6\
+\xf7\xf7\x39\x2c\x47\x04\x9f\x05\x50\x00\x04\x05\x40\x50\x00\x04\
+\x05\x40\x50\x00\x04\x05\x40\x50\x00\x1b\x04\xdb\x76\xc2\xe2\x35\
+\xb6\x00\xfe\x02\x70\x8f\xbc\x46\xe3\x8f\xa4\x04\xe0\x9c\xab\x00\
+\xfc\x4c\x5e\xa3\x70\x31\x46\xac\xa6\xc8\x01\xbe\x20\xb7\x51\xf8\
+\xd6\x39\xf7\x67\x8a\x02\xf8\xf0\x52\xdd\x44\x37\x3e\x48\xb2\x0a\
+\x70\xce\xfd\x30\xd6\x9b\x53\x8c\xaf\x00\x7c\x92\x72\x19\xf8\x0e\
+\x80\x2f\xc9\x73\x2b\xee\x02\x78\xc3\x39\x37\x4a\xc5\xb4\x35\xc5\
+\x3b\x2c\xcb\xb2\x2a\x8a\xe2\x63\x00\x37\x00\xbc\x30\xd5\x7d\x08\
+\x2c\xf9\x3e\x05\xf0\x8a\x73\xee\xf7\xb1\x2e\x3a\xf9\x7a\x2a\x6b\
+\xed\x2e\x80\xb7\x00\xdc\x02\xf0\x34\x80\xc7\x67\x44\xfa\x19\x80\
+\x5f\x00\xdc\x06\xf0\x91\x73\xee\x3b\x8e\x03\x82\x20\x08\x82\x20\
+\x08\x82\x20\x08\x82\x20\x08\x62\x23\xf8\x1f\x8e\x96\x1e\x7d\x49\
+\xfc\xce\x76\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
 "
 
 qt_resource_name = "\
@@ -7755,31 +7851,36 @@ qt_resource_name = "\
 \x0b\x2e\x17\xc7\
 \x00\x4b\
 \x00\x69\x00\x6e\x00\x64\x00\x6c\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x09\
+\x0e\xc5\xfa\x07\
+\x00\x4f\
+\x00\x74\x00\x68\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
 "
 
 qt_resource_struct = "\
 \x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x01\
-\x00\x00\x00\x28\x00\x02\x00\x00\x00\x01\x00\x00\x00\x15\
-\x00\x00\x00\x36\x00\x02\x00\x00\x00\x01\x00\x00\x00\x10\
-\x00\x00\x00\x46\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0c\
+\x00\x00\x00\x28\x00\x02\x00\x00\x00\x01\x00\x00\x00\x16\
+\x00\x00\x00\x36\x00\x02\x00\x00\x00\x01\x00\x00\x00\x11\
+\x00\x00\x00\x46\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0d\
 \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0a\
 \x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00\x06\
 \x00\x00\x00\x58\x00\x02\x00\x00\x00\x03\x00\x00\x00\x07\
 \x00\x00\x01\x68\x00\x00\x00\x00\x00\x01\x00\x01\x89\x6e\
 \x00\x00\x01\x52\x00\x00\x00\x00\x00\x01\x00\x01\x6d\x1f\
 \x00\x00\x01\x7e\x00\x00\x00\x00\x00\x01\x00\x01\xa8\xaa\
-\x00\x00\x00\x58\x00\x02\x00\x00\x00\x01\x00\x00\x00\x0b\
+\x00\x00\x00\x58\x00\x02\x00\x00\x00\x02\x00\x00\x00\x0b\
 \x00\x00\x01\x92\x00\x00\x00\x00\x00\x01\x00\x01\xd2\xa5\
-\x00\x00\x00\x58\x00\x02\x00\x00\x00\x03\x00\x00\x00\x0d\
+\x00\x00\x01\xac\x00\x00\x00\x00\x00\x01\x00\x01\xdd\xac\
+\x00\x00\x00\x58\x00\x02\x00\x00\x00\x03\x00\x00\x00\x0e\
 \x00\x00\x00\x7e\x00\x00\x00\x00\x00\x01\x00\x00\x09\x5d\
 \x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
 \x00\x00\x00\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x9a\
-\x00\x00\x00\x58\x00\x02\x00\x00\x00\x04\x00\x00\x00\x11\
+\x00\x00\x00\x58\x00\x02\x00\x00\x00\x04\x00\x00\x00\x12\
 \x00\x00\x01\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x46\x38\
 \x00\x00\x00\xce\x00\x00\x00\x00\x00\x01\x00\x00\x37\xa3\
 \x00\x00\x00\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x3a\
 \x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x3c\x02\
-\x00\x00\x00\x58\x00\x02\x00\x00\x00\x01\x00\x00\x00\x16\
+\x00\x00\x00\x58\x00\x02\x00\x00\x00\x01\x00\x00\x00\x17\
 \x00\x00\x01\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x4f\x8f\
 "
 
diff --git a/kcc/KCC_ui.py b/kcc/KCC_ui.py
index 1e5f144..cb903c6 100644
--- a/kcc/KCC_ui.py
+++ b/kcc/KCC_ui.py
@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'KCC.ui'
 #
-# Created: Tue Jun 18 22:41:54 2013
+# Created: Wed Jun 19 10:47:29 2013
 #      by: PyQt4 UI code generator 4.10.1
 #
 # WARNING! All changes made in this file will be lost!
@@ -155,26 +155,19 @@ class Ui_KCC(object):
         self.JobList.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
         self.JobList.setObjectName(_fromUtf8("JobList"))
         self.BasicModeButton = QtGui.QPushButton(self.Form)
-        self.BasicModeButton.setGeometry(QtCore.QRect(10, 10, 141, 32))
+        self.BasicModeButton.setGeometry(QtCore.QRect(10, 10, 195, 32))
         font = QtGui.QFont()
         font.setPointSize(9)
         self.BasicModeButton.setFont(font)
         self.BasicModeButton.setFocusPolicy(QtCore.Qt.NoFocus)
         self.BasicModeButton.setObjectName(_fromUtf8("BasicModeButton"))
         self.AdvModeButton = QtGui.QPushButton(self.Form)
-        self.AdvModeButton.setGeometry(QtCore.QRect(160, 10, 91, 32))
+        self.AdvModeButton.setGeometry(QtCore.QRect(217, 10, 195, 32))
         font = QtGui.QFont()
         font.setPointSize(9)
         self.AdvModeButton.setFont(font)
         self.AdvModeButton.setFocusPolicy(QtCore.Qt.NoFocus)
         self.AdvModeButton.setObjectName(_fromUtf8("AdvModeButton"))
-        self.ExpertModeButton = QtGui.QPushButton(self.Form)
-        self.ExpertModeButton.setGeometry(QtCore.QRect(260, 10, 151, 32))
-        font = QtGui.QFont()
-        font.setPointSize(9)
-        self.ExpertModeButton.setFont(font)
-        self.ExpertModeButton.setFocusPolicy(QtCore.Qt.NoFocus)
-        self.ExpertModeButton.setObjectName(_fromUtf8("ExpertModeButton"))
         self.OptionsAdvancedGamma = QtGui.QFrame(self.Form)
         self.OptionsAdvancedGamma.setEnabled(True)
         self.OptionsAdvancedGamma.setGeometry(QtCore.QRect(10, 305, 401, 41))
@@ -300,19 +293,18 @@ class Ui_KCC(object):
         self.RotateBox.setText(_translate("KCC", "Horizontal mode", None))
         self.BasicModeButton.setText(_translate("KCC", "Basic", None))
         self.AdvModeButton.setText(_translate("KCC", "Advanced", None))
-        self.ExpertModeButton.setText(_translate("KCC", "Expert", None))
         self.GammaLabel.setToolTip(_translate("KCC", "When converting color images setting this option to 1.0 MIGHT improve readability.", None))
         self.GammaLabel.setText(_translate("KCC", "Gamma: Auto", None))
         self.GammaSlider.setToolTip(_translate("KCC", "<html><head/><body><p>When converting color images setting this option to 1.0 <span style=\" font-weight:600;\">might</span> improve readability.</p></body></html>", None))
         self.ColorBox.setToolTip(_translate("KCC", "Do not convert images to grayscale.", None))
         self.ColorBox.setText(_translate("KCC", "Color mode", None))
-        self.wLabel.setToolTip(_translate("KCC", "Device profile width will be overwritten by this value.", None))
+        self.wLabel.setToolTip(_translate("KCC", "Resolution of target device.", None))
         self.wLabel.setText(_translate("KCC", "Custom width: ", None))
-        self.customWidth.setToolTip(_translate("KCC", "Device profile width will be overwritten by this value.", None))
+        self.customWidth.setToolTip(_translate("KCC", "Resolution of target device.", None))
         self.customWidth.setInputMask(_translate("KCC", "0000; ", None))
-        self.hLabel.setToolTip(_translate("KCC", "Device profile height will be overwritten by this value.", None))
+        self.hLabel.setToolTip(_translate("KCC", "Resolution of target device.", None))
         self.hLabel.setText(_translate("KCC", "Custom height: ", None))
-        self.customHeight.setToolTip(_translate("KCC", "Device profile height will be overwritten by this value.", None))
+        self.customHeight.setToolTip(_translate("KCC", "Resolution of target device.", None))
         self.customHeight.setInputMask(_translate("KCC", "0000; ", None))
         self.ActionBasic.setText(_translate("KCC", "Basic", None))
         self.ActionAdvanced.setText(_translate("KCC", "Advanced", None))
diff --git a/kcc/comic2ebook.py b/kcc/comic2ebook.py
index 87a2658..b9243af 100755
--- a/kcc/comic2ebook.py
+++ b/kcc/comic2ebook.py
@@ -813,6 +813,11 @@ def checkOptions():
     if options.rotate:
         options.panelview = True
         options.landscapemode = False
+    # Disable all Kindle features
+    if options.profile == 'OTHER':
+        options.landscapemode = False
+        options.panelview = False
+        options.quality = 0
     # Override profile data
     if options.customwidth != 0 or options.customheight != 0:
         X = image.ProfileData.Profiles[options.profile][1][0]
diff --git a/kcc/image.py b/kcc/image.py
index 93b9bfc..3f32329 100755
--- a/kcc/image.py
+++ b/kcc/image.py
@@ -92,7 +92,8 @@ class ProfileData:
         'KDXG': ("Kindle DXG", (824, 1200), Palette16, 1.8, (1236, 1800)),
         'KF': ("Kindle Fire", (600, 1024), Palette16, 1.0, (900, 1536)),
         'KFHD': ("Kindle Fire HD 7\"", (800, 1280), Palette16, 1.0, (1200, 1920)),
-        'KFHD8': ("Kindle Fire HD 8.9\"", (1200, 1920), Palette16, 1.0, (1800, 2880))
+        'KFHD8': ("Kindle Fire HD 8.9\"", (1200, 1920), Palette16, 1.0, (1800, 2880)),
+        'Other': ("Other", (0, 0), Palette16, 1.0, (0, 0)),
     }
 
     ProfileLabels = {
@@ -106,7 +107,8 @@ class ProfileData:
         "Kindle DXG": 'KDXG',
         "Kindle Fire": 'KF',
         "Kindle Fire HD 7\"": 'KFHD',
-        "Kindle Fire HD 8.9\"": 'KFHD8'
+        "Kindle Fire HD 8.9\"": 'KFHD8',
+        "Other": 'OTHER'
     }