@@ -4,8 +4,8 @@ | |||
# Created by falkTX | |||
# | |||
PYUIC = pyuic4 | |||
PYRCC = pyrcc4 | |||
PYUIC = pyuic4 --pyqt3-wrapper | |||
PYRCC = pyrcc4 -py3 | |||
all: build | |||
@@ -14,21 +14,24 @@ build: UI RES LANG | |||
UI: tools | |||
tools: \ | |||
src/ui_logs.py | |||
src/ui_logs.py src/ui_render.py | |||
src/ui_logs.py: src/ui/logs.ui | |||
$(PYUIC) -w -o src/ui_logs.py $< | |||
$(PYUIC) -o src/ui_logs.py $< | |||
src/ui_render.py: src/ui/render.ui | |||
$(PYUIC) -o src/ui_render.py $< | |||
RES: src/icons_rc.py | |||
src/icons_rc.py: src/icons/icons.qrc | |||
$(PYRCC) -py3 -o src/icons_rc.py $< | |||
$(PYRCC) -o src/icons_rc.py $< | |||
LANG: | |||
# pylupdate4 -verbose src/lang/lang.pro | |||
# lrelease src/lang/lang.pro | |||
clean: | |||
rm -f *~ src/*~ src/*.pyc src/*.so src/ui_*.py src/icons_rc.py | |||
rm -f *~ src/*~ src/*.pyc src/*.dll src/*.so src/ui_*.py src/icons_rc.py | |||
distclean: clean |
@@ -1,6 +1,10 @@ | |||
<RCC version="1.0"> | |||
<qresource prefix="/"> | |||
<file>16x16/document-open.png</file> | |||
<file>16x16/edit-delete.png</file> | |||
<file>16x16/media-record.png</file> | |||
<file>16x16/media-playback-stop.png</file> | |||
<file>16x16/window-close.png</file> | |||
<file>48x48/media-record.png</file> | |||
</qresource> | |||
</RCC> |
@@ -781,7 +781,6 @@ def midi_get_lost_event_count(port_buffer): | |||
# Session | |||
def set_timebase_callback(client, session_callback, arg): | |||
jacklib.jack_set_timebase_callback.argtypes = [POINTER(jack_client_t), JackSessionCallback, c_void_p] | |||
jacklib.jack_set_timebase_callback.restype = c_int | |||
@@ -0,0 +1,55 @@ | |||
#!/usr/bin/env python | |||
# -*- coding: utf-8 -*- | |||
# Helper functions for extra jacklib functionality | |||
# Copyright (C) 2012 Filipe Coelho <falktx@gmail.com> | |||
# | |||
# This program is free software; you can redistribute it and/or modify | |||
# it under the terms of the GNU General Public License as published by | |||
# the Free Software Foundation; either version 2 of the License, or | |||
# any later version. | |||
# | |||
# This program is distributed in the hope that it will be useful, | |||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
# GNU General Public License for more details. | |||
# | |||
# For a full copy of the GNU General Public License see the COPYING file | |||
import jacklib | |||
def get_jack_status_error_string(c_status): | |||
status = c_status.value | |||
error_string = "" | |||
if (status & jacklib.JackFailure): | |||
error_string += "Overall operation failed;\n" | |||
if (status & jacklib.JackInvalidOption): | |||
error_string += "The operation contained an invalid or unsupported option;\n" | |||
if (status & jacklib.JackNameNotUnique): | |||
error_string += "The desired client name was not unique;\n" | |||
if (status & jacklib.JackServerStarted): | |||
error_string += "The JACK server was started as a result of this operation;\n" | |||
if (status & jacklib.JackServerFailed): | |||
error_string += "Unable to connect to the JACK server;\n" | |||
if (status & jacklib.JackServerError): | |||
error_string += "Communication error with the JACK server;\n" | |||
if (status & jacklib.JackNoSuchClient): | |||
error_string += "Requested client does not exist;\n" | |||
if (status & jacklib.JackLoadFailure): | |||
error_string += "Unable to load internal client;\n" | |||
if (status & jacklib.JackInitFailure): | |||
error_string += "Unable to initialize client;\n" | |||
if (status & jacklib.JackShmFailure): | |||
error_string += "Unable to access shared memory;\n" | |||
if (status & jacklib.JackVersionError): | |||
error_string += "Client's protocol version does not match;\n" | |||
if (status & jacklib.JackBackendError): | |||
error_string += "Backend Error;\n" | |||
if (status & jacklib.JackClientZombie): | |||
error_string += "Client is being shutdown against its will;\n" | |||
if (error_string): | |||
error_string = error_string.strip().rsplit(";", 1)[0]+"." | |||
return error_string |
@@ -215,7 +215,7 @@ class LogsReadThread(QThread): | |||
if (self.LOG_FILE_LADISH): | |||
self.log_ladish_file.close() | |||
# Class Window | |||
# Logs Window | |||
class LogsW(QDialog, ui_logs.Ui_LogsW): | |||
LOG_PATH = os.path.join(HOME, ".log") | |||
@@ -0,0 +1,305 @@ | |||
#!/usr/bin/env python | |||
# -*- coding: utf-8 -*- | |||
# JACK-Capture frontend, with freewheel and transport support | |||
# Copyright (C) 2012 Filipe Coelho <falktx@gmail.com> | |||
# | |||
# This program is free software; you can redistribute it and/or modify | |||
# it under the terms of the GNU General Public License as published by | |||
# the Free Software Foundation; either version 2 of the License, or | |||
# any later version. | |||
# | |||
# This program is distributed in the hope that it will be useful, | |||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
# GNU General Public License for more details. | |||
# | |||
# For a full copy of the GNU General Public License see the COPYING file | |||
# Imports (Global) | |||
from PyQt4.QtCore import pyqtSlot, Qt, QProcess, QTime, QTimer, SIGNAL, SLOT | |||
from PyQt4.QtGui import QDialog | |||
from time import sleep | |||
# Imports (Custom Stuff) | |||
import ui_render | |||
from shared import * | |||
from jacklib_helpers import * | |||
global jack_client | |||
jack_client = None | |||
# Render Window | |||
class RenderW(QDialog, ui_render.Ui_RenderW): | |||
def __init__(self, parent, flags): | |||
QDialog.__init__(self, parent, flags) | |||
self.setupUi(self) | |||
# ------------------------------------------------------------- | |||
# Get JACK client and base information | |||
global jack_client | |||
if (jack_client): | |||
self.m_jack_client = jack_client | |||
self.m_closeClient = False | |||
else: | |||
self.m_jack_client = jacklib.client_open("Render-Dialog", jacklib.JackNoStartServer, None) | |||
self.m_closeClient = True | |||
self.m_buffer_size = jacklib.get_buffer_size(self.m_jack_client) | |||
for i in range(self.cb_buffer_size.count()): | |||
if (int(self.cb_buffer_size.itemText(i)) == self.m_buffer_size): | |||
self.cb_buffer_size.setCurrentIndex(i) | |||
self.m_sample_rate = jacklib.get_sample_rate(self.m_jack_client) | |||
# ------------------------------------------------------------- | |||
# Internal stuff | |||
self.m_max_time = 180 | |||
self.m_last_time = 0 | |||
self.m_freewheel = False | |||
self.m_timer = QTimer(self) | |||
self.m_process = QProcess(self) | |||
# ------------------------------------------------------------- | |||
# Set-up GUI stuff | |||
# Get List of formats | |||
self.m_process.start("jack_capture", ["-pf"]) | |||
self.m_process.waitForFinished() | |||
formats = str(self.m_process.readAllStandardOutput(), encoding="ascii").split(" ") | |||
for i in range(len(formats)-1): | |||
self.cb_format.addItem(formats[i]) | |||
if (formats[i] == "wav"): | |||
self.cb_format.setCurrentIndex(i) | |||
self.cb_depth.setCurrentIndex(4) #Float | |||
self.rb_stereo.setChecked(True) | |||
self.te_end.setTime(QTime(0, 3, 0)) | |||
self.progressBar.setMinimum(0) | |||
self.progressBar.setMaximum(0) | |||
self.progressBar.setValue(0) | |||
self.b_render.setIcon(getIcon("media-record")) | |||
self.b_stop.setIcon(getIcon("media-playback-stop")) | |||
self.b_close.setIcon(getIcon("window-close")) | |||
self.b_open.setIcon(getIcon("document-open")) | |||
self.b_stop.setVisible(False) | |||
self.le_folder.setText(HOME) | |||
# ------------------------------------------------------------- | |||
# Set-up connections | |||
self.connect(self.b_render, SIGNAL("clicked()"), SLOT("slot_renderStart()")) | |||
self.connect(self.b_stop, SIGNAL("clicked()"), SLOT("slot_renderStop()")) | |||
self.connect(self.b_open, SIGNAL("clicked()"), SLOT("slot_getAndSetPath()")) | |||
self.connect(self.b_now_start, SIGNAL("clicked()"), SLOT("slot_setStartNow()")) | |||
self.connect(self.b_now_end, SIGNAL("clicked()"), SLOT("slot_setEndNow()")) | |||
self.connect(self.te_start, SIGNAL("timeChanged(const QTime)"), SLOT("slot_updateStartTime(const QTime)")) | |||
self.connect(self.te_end, SIGNAL("timeChanged(const QTime)"), SLOT("slot_updateEndTime(const QTime)")) | |||
self.connect(self.m_timer, SIGNAL("timeout()"), SLOT("slot_updateProgressbar()")) | |||
@pyqtSlot() | |||
def slot_renderStart(self): | |||
if (os.path.exists(self.le_folder.text()) == False): | |||
QMessageBox.warning(self, self.tr("Warning"), self.tr("The selected directory does not exist. Please choose a valid one.")) | |||
return | |||
self.group_render.setEnabled(False) | |||
self.group_time.setEnabled(False) | |||
self.group_encoding.setEnabled(False) | |||
self.b_render.setVisible(False) | |||
self.b_stop.setVisible(True) | |||
self.b_close.setEnabled(False) | |||
self.m_freewheel = (self.cb_render_mode.currentIndex() == 1) | |||
new_buffer_size = int(self.cb_buffer_size.currentText()) | |||
time_start = self.te_start.time() | |||
time_end = self.te_end.time() | |||
min_time = (time_start.hour()*3600)+(time_start.minute()*60)+(time_start.second()) | |||
max_time = (time_end.hour()*3600)+(time_end.minute()*60)+(time_end.second()) | |||
self.m_max_time = max_time | |||
self.progressBar.setMinimum(min_time) | |||
self.progressBar.setMaximum(max_time) | |||
self.progressBar.setValue(min_time) | |||
self.progressBar.update() | |||
if (self.m_freewheel): | |||
self.m_timer.setInterval(100) | |||
else: | |||
self.m_timer.setInterval(500) | |||
arguments = [] | |||
# Bit depth | |||
arguments.append("-b") | |||
arguments.append(self.cb_depth.currentText()) | |||
# Channels | |||
arguments.append("-c") | |||
if (self.rb_mono.isChecked()): | |||
arguments.append("1") | |||
elif (self.rb_stereo.isChecked()): | |||
arguments.append("2") | |||
else: | |||
arguments.append(str(self.sb_channels.value())) | |||
# Format | |||
arguments.append("-f") | |||
arguments.append(self.cb_format.currentText()) | |||
# Controlled by transport | |||
arguments.append("-jt") | |||
# Silent mode | |||
arguments.append("-dc") | |||
arguments.append("-s") | |||
# Change current directory | |||
os.chdir(self.le_folder.text()) | |||
if (new_buffer_size != jacklib.get_buffer_size(self.m_jack_client)): | |||
print("NOTICE: buffer size changed before render") | |||
jacklib.set_buffer_size(self.m_jack_client, new_buffer_size) | |||
if (jacklib.transport_query(self.m_jack_client, None) > jacklib.JackTransportStopped): # >TransportStopped is rolling/starting | |||
jacklib.transport_stop(self.m_jack_client) | |||
jacklib.transport_locate(self.m_jack_client, min_time*self.m_sample_rate) | |||
self.m_last_time = -1 | |||
self.m_process.start("jack_capture", arguments) | |||
self.m_process.waitForStarted() | |||
if (self.m_freewheel): | |||
sleep(1) | |||
print("NOTICE: rendering in freewheel mode") | |||
jacklib.set_freewheel(jack_client, 1) | |||
self.m_timer.start() | |||
jacklib.transport_start(self.m_jack_client) | |||
@pyqtSlot() | |||
def slot_renderStop(self): | |||
jacklib.transport_stop(self.m_jack_client) | |||
if (self.m_freewheel): | |||
jacklib.set_freewheel(self.m_jack_client, 0) | |||
sleep(1) | |||
self.m_process.close() | |||
self.m_timer.stop() | |||
self.group_render.setEnabled(True) | |||
self.group_time.setEnabled(True) | |||
self.group_encoding.setEnabled(True) | |||
self.b_render.setVisible(True) | |||
self.b_stop.setVisible(False) | |||
self.b_close.setEnabled(True) | |||
self.progressBar.setMinimum(0) | |||
self.progressBar.setMaximum(0) | |||
self.progressBar.setValue(0) | |||
self.progressBar.update() | |||
# Restore buffer size | |||
new_buffer_size = jacklib.get_buffer_size(self.m_jack_client) | |||
if (new_buffer_size != self.m_buffer_size): | |||
jacklib.set_buffer_size(self.m_jack_client, new_buffer_size) | |||
@pyqtSlot() | |||
def slot_getAndSetPath(self): | |||
getAndSetPath(self, self.le_folder.text(), self.le_folder) | |||
@pyqtSlot() | |||
def slot_setStartNow(self): | |||
time = jacklib.get_current_transport_frame(self.m_jack_client)/self.m_sample_rate | |||
secs = time % 60 | |||
mins = (time / 60) % 60 | |||
hrs = (time / 3600) % 60 | |||
self.te_start.setTime(QTime(hrs, mins, secs)) | |||
@pyqtSlot() | |||
def slot_setEndNow(self): | |||
time = jacklib.get_current_transport_frame(self.m_jack_client)/self.m_sample_rate | |||
secs = time % 60 | |||
mins = (time / 60) % 60 | |||
hrs = (time / 3600) % 60 | |||
self.te_end.setTime(QTime(hrs, mins, secs)) | |||
@pyqtSlot(QTime) | |||
def slot_updateStartTime(self, time): | |||
if (time >= self.te_end.time()): | |||
self.te_end.setTime(time) | |||
self.b_render.setEnabled(False) | |||
else: | |||
self.b_render.setEnabled(True) | |||
@pyqtSlot(QTime) | |||
def slot_updateEndTime(self, time): | |||
if (time <= self.te_start.time()): | |||
time = self.te_start.setTime(time) | |||
self.b_render.setEnabled(False) | |||
else: | |||
self.b_render.setEnabled(True) | |||
@pyqtSlot() | |||
def slot_updateProgressbar(self): | |||
time = jacklib.get_current_transport_frame(self.m_jack_client)/self.m_sample_rate | |||
self.progressBar.setValue(time) | |||
if (time > self.m_max_time or (self.m_last_time > time and self.m_freewheel == False)): | |||
self.slot_renderStop() | |||
self.m_last_time = time | |||
def closeEvent(self, event): | |||
if (self.m_closeClient): | |||
jacklib.client_close(self.m_jack_client) | |||
QDialog.closeEvent(self, event) | |||
# ------------------------------------------------------------- | |||
# Allow to use this as a standalone app | |||
if __name__ == '__main__': | |||
# Additional imports | |||
import sys | |||
from PyQt4.QtGui import QApplication | |||
# App initialization | |||
app = QApplication(sys.argv) | |||
for iPATH in PATH: | |||
if os.path.exists(os.path.join(iPATH, "jack_capture")): | |||
break | |||
else: | |||
QMessageBox.critical(None, app.translate("RenderW", "Error"), app.translate("RenderW", "The 'jack_capture' application is not available.\nIs not possible to render without it!")) | |||
sys.exit(1) | |||
jack_status = jacklib.jack_status_t(0) | |||
jack_client = jacklib.client_open("Render", jacklib.JackNoStartServer, jacklib.pointer(jack_status)) | |||
if not jack_client: | |||
QMessageBox.critical(None, app.translate("RenderW", "Error"), app.translate("RenderW", "Could not connect to JACK, possible errors:\n%s" % (get_jack_status_error_string(jack_status)))) | |||
sys.exit(1) | |||
# Show GUI | |||
gui = RenderW(None, Qt.WindowFlags()) | |||
gui.setWindowIcon(getIcon("media-record", 48)) | |||
gui.show() | |||
# App-Loop | |||
ret = app.exec_() | |||
if (jack_client): | |||
jacklib.client_close(jack_client) | |||
# Exit properly | |||
sys.exit(ret) |
@@ -19,7 +19,7 @@ | |||
# Imports (Global) | |||
import os | |||
from PyQt4.QtCore import qDebug, qWarning | |||
from PyQt4.QtGui import QIcon | |||
from PyQt4.QtGui import QIcon, QMessageBox, QFileDialog | |||
# Small integrity tests | |||
HOME = os.getenv("HOME") | |||
@@ -41,3 +41,10 @@ else: | |||
# Get Icon from user theme, using our own as backup (Oxygen) | |||
def getIcon(icon, size=16): | |||
return QIcon.fromTheme(icon, QIcon(":/%ix%i/%s.png" % (size, size, icon))) | |||
# QLineEdit and QPushButtom combo | |||
def getAndSetPath(self, currentPath, lineEdit): | |||
newPath = QFileDialog.getExistingDirectory(self, self.tr("Set Path"), currentPath, QFileDialog.ShowDirsOnly) | |||
if (newPath): | |||
lineEdit.setText(newPath) | |||
return newPath |
@@ -0,0 +1,439 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<ui version="4.0"> | |||
<class>RenderW</class> | |||
<widget class="QDialog" name="RenderW"> | |||
<property name="geometry"> | |||
<rect> | |||
<x>0</x> | |||
<y>0</y> | |||
<width>585</width> | |||
<height>332</height> | |||
</rect> | |||
</property> | |||
<property name="windowTitle"> | |||
<string>Render</string> | |||
</property> | |||
<layout class="QGridLayout" name="gridLayout_3"> | |||
<item row="3" column="0" colspan="2"> | |||
<layout class="QHBoxLayout" name="horizontalLayout_2"> | |||
<item> | |||
<widget class="QProgressBar" name="progressBar"> | |||
<property name="value"> | |||
<number>24</number> | |||
</property> | |||
</widget> | |||
</item> | |||
<item> | |||
<widget class="QPushButton" name="b_render"> | |||
<property name="text"> | |||
<string>&Render</string> | |||
</property> | |||
<property name="icon"> | |||
<iconset resource="../icons/icons.qrc"> | |||
<normaloff>:/16x16/media-record.png</normaloff>:/16x16/media-record.png</iconset> | |||
</property> | |||
</widget> | |||
</item> | |||
<item> | |||
<widget class="QPushButton" name="b_stop"> | |||
<property name="text"> | |||
<string>&Stop</string> | |||
</property> | |||
<property name="icon"> | |||
<iconset resource="../icons/icons.qrc"> | |||
<normaloff>:/16x16/media-playback-stop.png</normaloff>:/16x16/media-playback-stop.png</iconset> | |||
</property> | |||
</widget> | |||
</item> | |||
<item> | |||
<widget class="QPushButton" name="b_close"> | |||
<property name="text"> | |||
<string>&Close</string> | |||
</property> | |||
<property name="icon"> | |||
<iconset resource="../icons/icons.qrc"> | |||
<normaloff>:/16x16/window-close.png</normaloff>:/16x16/window-close.png</iconset> | |||
</property> | |||
</widget> | |||
</item> | |||
</layout> | |||
</item> | |||
<item row="2" column="0" colspan="2"> | |||
<widget class="Line" name="line"> | |||
<property name="orientation"> | |||
<enum>Qt::Horizontal</enum> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="0" column="0" colspan="2"> | |||
<widget class="QGroupBox" name="group_render"> | |||
<property name="title"> | |||
<string>Render Options</string> | |||
</property> | |||
<layout class="QGridLayout" name="gridLayout_2"> | |||
<item row="0" column="0"> | |||
<widget class="QLabel" name="label"> | |||
<property name="text"> | |||
<string>Render &Mode:</string> | |||
</property> | |||
<property name="alignment"> | |||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||
</property> | |||
<property name="buddy"> | |||
<cstring>cb_render_mode</cstring> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="0" column="1"> | |||
<widget class="QComboBox" name="cb_render_mode"> | |||
<item> | |||
<property name="text"> | |||
<string>Realtime</string> | |||
</property> | |||
</item> | |||
<item> | |||
<property name="text"> | |||
<string>Freewheel</string> | |||
</property> | |||
</item> | |||
</widget> | |||
</item> | |||
<item row="0" column="2"> | |||
<spacer name="horizontalSpacer"> | |||
<property name="orientation"> | |||
<enum>Qt::Horizontal</enum> | |||
</property> | |||
<property name="sizeType"> | |||
<enum>QSizePolicy::Fixed</enum> | |||
</property> | |||
<property name="sizeHint" stdset="0"> | |||
<size> | |||
<width>275</width> | |||
<height>20</height> | |||
</size> | |||
</property> | |||
</spacer> | |||
</item> | |||
<item row="1" column="0"> | |||
<widget class="QLabel" name="label_2"> | |||
<property name="text"> | |||
<string>&Buffer Size:</string> | |||
</property> | |||
<property name="alignment"> | |||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||
</property> | |||
<property name="buddy"> | |||
<cstring>cb_buffer_size</cstring> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="1" column="1"> | |||
<widget class="QComboBox" name="cb_buffer_size"> | |||
<property name="editable"> | |||
<bool>true</bool> | |||
</property> | |||
<item> | |||
<property name="text"> | |||
<string>32</string> | |||
</property> | |||
</item> | |||
<item> | |||
<property name="text"> | |||
<string>64</string> | |||
</property> | |||
</item> | |||
<item> | |||
<property name="text"> | |||
<string>128</string> | |||
</property> | |||
</item> | |||
<item> | |||
<property name="text"> | |||
<string>256</string> | |||
</property> | |||
</item> | |||
<item> | |||
<property name="text"> | |||
<string>512</string> | |||
</property> | |||
</item> | |||
<item> | |||
<property name="text"> | |||
<string>1024</string> | |||
</property> | |||
</item> | |||
<item> | |||
<property name="text"> | |||
<string>2048</string> | |||
</property> | |||
</item> | |||
<item> | |||
<property name="text"> | |||
<string>4096</string> | |||
</property> | |||
</item> | |||
<item> | |||
<property name="text"> | |||
<string>8192</string> | |||
</property> | |||
</item> | |||
</widget> | |||
</item> | |||
<item row="1" column="2"> | |||
<spacer name="horizontalSpacer_2"> | |||
<property name="orientation"> | |||
<enum>Qt::Horizontal</enum> | |||
</property> | |||
<property name="sizeType"> | |||
<enum>QSizePolicy::Fixed</enum> | |||
</property> | |||
<property name="sizeHint" stdset="0"> | |||
<size> | |||
<width>275</width> | |||
<height>20</height> | |||
</size> | |||
</property> | |||
</spacer> | |||
</item> | |||
<item row="2" column="0"> | |||
<widget class="QLabel" name="label_3"> | |||
<property name="text"> | |||
<string>Output folder:</string> | |||
</property> | |||
<property name="alignment"> | |||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="2" column="1" colspan="2"> | |||
<layout class="QHBoxLayout" name="horizontalLayout"> | |||
<item> | |||
<widget class="QLineEdit" name="le_folder"/> | |||
</item> | |||
<item> | |||
<widget class="QToolButton" name="b_open"> | |||
<property name="text"> | |||
<string/> | |||
</property> | |||
<property name="icon"> | |||
<iconset resource="../icons/icons.qrc"> | |||
<normaloff>:/16x16/document-open.png</normaloff>:/16x16/document-open.png</iconset> | |||
</property> | |||
</widget> | |||
</item> | |||
</layout> | |||
</item> | |||
</layout> | |||
</widget> | |||
</item> | |||
<item row="1" column="0"> | |||
<widget class="QGroupBox" name="group_time"> | |||
<property name="title"> | |||
<string>Time</string> | |||
</property> | |||
<layout class="QGridLayout" name="gridLayout_4"> | |||
<item row="0" column="0"> | |||
<widget class="QLabel" name="label_4"> | |||
<property name="text"> | |||
<string>&Start Time:</string> | |||
</property> | |||
<property name="alignment"> | |||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||
</property> | |||
<property name="buddy"> | |||
<cstring>te_start</cstring> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="0" column="1"> | |||
<widget class="QTimeEdit" name="te_start"> | |||
<property name="displayFormat"> | |||
<string>hh:mm:ss</string> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="1" column="0"> | |||
<widget class="QLabel" name="label_5"> | |||
<property name="text"> | |||
<string>&End Time:</string> | |||
</property> | |||
<property name="alignment"> | |||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||
</property> | |||
<property name="buddy"> | |||
<cstring>te_end</cstring> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="1" column="1"> | |||
<widget class="QTimeEdit" name="te_end"> | |||
<property name="displayFormat"> | |||
<string>hh:mm:ss</string> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="0" column="2"> | |||
<widget class="QPushButton" name="b_now_start"> | |||
<property name="text"> | |||
<string>now</string> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="1" column="2"> | |||
<widget class="QPushButton" name="b_now_end"> | |||
<property name="text"> | |||
<string>now</string> | |||
</property> | |||
</widget> | |||
</item> | |||
</layout> | |||
</widget> | |||
</item> | |||
<item row="1" column="1"> | |||
<widget class="QGroupBox" name="group_encoding"> | |||
<property name="title"> | |||
<string>Encoding</string> | |||
</property> | |||
<layout class="QGridLayout" name="gridLayout"> | |||
<item row="0" column="0"> | |||
<widget class="QLabel" name="label_6"> | |||
<property name="text"> | |||
<string>&Format:</string> | |||
</property> | |||
<property name="alignment"> | |||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||
</property> | |||
<property name="buddy"> | |||
<cstring>cb_format</cstring> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="0" column="1" colspan="2"> | |||
<widget class="QComboBox" name="cb_format"/> | |||
</item> | |||
<item row="0" column="3"> | |||
<widget class="QToolButton" name="tb_format"> | |||
<property name="enabled"> | |||
<bool>false</bool> | |||
</property> | |||
<property name="text"> | |||
<string>...</string> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="1" column="0"> | |||
<widget class="QLabel" name="label_7"> | |||
<property name="text"> | |||
<string>Bit &Depth:</string> | |||
</property> | |||
<property name="alignment"> | |||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||
</property> | |||
<property name="buddy"> | |||
<cstring>cb_depth</cstring> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="1" column="1" colspan="3"> | |||
<widget class="QComboBox" name="cb_depth"> | |||
<item> | |||
<property name="text"> | |||
<string notr="true">8</string> | |||
</property> | |||
</item> | |||
<item> | |||
<property name="text"> | |||
<string notr="true">16</string> | |||
</property> | |||
</item> | |||
<item> | |||
<property name="text"> | |||
<string notr="true">24</string> | |||
</property> | |||
</item> | |||
<item> | |||
<property name="text"> | |||
<string notr="true">32</string> | |||
</property> | |||
</item> | |||
<item> | |||
<property name="text"> | |||
<string notr="true">Float</string> | |||
</property> | |||
</item> | |||
</widget> | |||
</item> | |||
<item row="2" column="0"> | |||
<widget class="QRadioButton" name="rb_mono"> | |||
<property name="text"> | |||
<string>Mono</string> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="2" column="1"> | |||
<widget class="QRadioButton" name="rb_stereo"> | |||
<property name="text"> | |||
<string>Stereo</string> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="2" column="2"> | |||
<widget class="QRadioButton" name="rb_outro"> | |||
<property name="text"> | |||
<string>Outro:</string> | |||
</property> | |||
</widget> | |||
</item> | |||
<item row="2" column="3"> | |||
<widget class="QSpinBox" name="sb_channels"> | |||
<property name="enabled"> | |||
<bool>false</bool> | |||
</property> | |||
<property name="minimum"> | |||
<number>1</number> | |||
</property> | |||
</widget> | |||
</item> | |||
</layout> | |||
</widget> | |||
</item> | |||
</layout> | |||
</widget> | |||
<resources> | |||
<include location="../icons/icons.qrc"/> | |||
</resources> | |||
<connections> | |||
<connection> | |||
<sender>b_close</sender> | |||
<signal>clicked()</signal> | |||
<receiver>RenderW</receiver> | |||
<slot>close()</slot> | |||
<hints> | |||
<hint type="sourcelabel"> | |||
<x>465</x> | |||
<y>343</y> | |||
</hint> | |||
<hint type="destinationlabel"> | |||
<x>258</x> | |||
<y>183</y> | |||
</hint> | |||
</hints> | |||
</connection> | |||
<connection> | |||
<sender>rb_outro</sender> | |||
<signal>toggled(bool)</signal> | |||
<receiver>sb_channels</receiver> | |||
<slot>setEnabled(bool)</slot> | |||
<hints> | |||
<hint type="sourcelabel"> | |||
<x>405</x> | |||
<y>259</y> | |||
</hint> | |||
<hint type="destinationlabel"> | |||
<x>484</x> | |||
<y>255</y> | |||
</hint> | |||
</hints> | |||
</connection> | |||
</connections> | |||
</ui> |