Added drag and drop support
Fixed the size estimation
This commit is contained in:
parent
9739d859b7
commit
2cd17b8f45
3 changed files with 93 additions and 47 deletions
|
|
@ -44,6 +44,9 @@
|
|||
<property name="window_position">center</property>
|
||||
<property name="icon">devede.svg</property>
|
||||
<signal name="delete-event" handler="on_wmain_window_delete_event" swapped="no"/>
|
||||
<signal name="drag-data-received" handler="on_wmain_window_drag_data_received" swapped="no"/>
|
||||
<signal name="drag-drop" handler="on_wmain_window_drag_drop" swapped="no"/>
|
||||
<signal name="drag-motion" handler="on_wmain_window_drag_motion" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkBox" id="box1">
|
||||
<property name="visible">True</property>
|
||||
|
|
@ -70,6 +73,7 @@
|
|||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="activate" handler="on_new_activate" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
|
|
@ -112,6 +116,7 @@
|
|||
<property name="can_focus">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="activate" handler="on_wmain_window_delete_event" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
|
|
|||
|
|
@ -45,6 +45,8 @@ class file_movie(devede.interface_manager.interface_manager):
|
|||
self.add_text("title_name", os.path.splitext(os.path.basename(file_name))[0])
|
||||
self.add_label("original_size",None)
|
||||
self.add_label("original_length",None)
|
||||
self.add_label("original_videorate",None)
|
||||
self.add_label("original_audiorate",None)
|
||||
self.add_label("original_aspect_ratio",None)
|
||||
self.add_label("original_fps",None)
|
||||
|
||||
|
|
@ -188,12 +190,13 @@ class file_movie(devede.interface_manager.interface_manager):
|
|||
# let's asume 8kbps for each subtitle
|
||||
sub_rate = 8 * len(self.subtitles_list)
|
||||
|
||||
return estimated_size, videorate_fixed_size, self.audio_rate_final, sub_rate, self.width_final, self.height_final, self.original_length, self.audio_streams
|
||||
return estimated_size, videorate_fixed_size, self.audio_rate_final * self.audio_streams, sub_rate, self.width_final, self.height_final, self.original_length
|
||||
|
||||
|
||||
def set_auto_video_rate(self, new_video_rate):
|
||||
def set_auto_video_audio_rate(self, new_video_rate, new_audio_rate):
|
||||
|
||||
self.video_rate_auto = new_video_rate
|
||||
self.video_rate_auto = int(new_video_rate)
|
||||
self.audio_rate_auto = int(new_audio_rate)
|
||||
|
||||
|
||||
def get_max_resolution(self,rx,ry,aspect):
|
||||
|
|
@ -376,7 +379,8 @@ class file_movie(devede.interface_manager.interface_manager):
|
|||
|
||||
def delete_file(self):
|
||||
|
||||
print("Deleted file "+self.file_name)
|
||||
return
|
||||
|
||||
|
||||
def properties(self):
|
||||
|
||||
|
|
@ -488,8 +492,8 @@ class file_movie(devede.interface_manager.interface_manager):
|
|||
self.on_aspect_classic_toggled(None)
|
||||
self.on_treeview_subtitles_cursor_changed(None)
|
||||
|
||||
def on_aspect_classic_toggled(self,b):
|
||||
|
||||
def on_aspect_classic_toggled(self,b):
|
||||
|
||||
status1 = self.waspect_classic.get_active()
|
||||
status2 = self.waspect_wide.get_active()
|
||||
|
|
|
|||
|
|
@ -15,10 +15,11 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import Gtk, Gdk
|
||||
import os
|
||||
import time
|
||||
import shutil
|
||||
import urllib.parse
|
||||
|
||||
import devede.file_movie
|
||||
import devede.ask
|
||||
|
|
@ -92,6 +93,11 @@ class devede_project:
|
|||
if (self.disc_type != None):
|
||||
self.set_type(None, self.disc_type)
|
||||
|
||||
self.wmain_window.drag_dest_set(Gtk.DestDefaults.ALL,[],Gdk.DragAction.COPY)
|
||||
targets = Gtk.TargetList.new([])
|
||||
targets.add(Gdk.Atom.intern("text/uri-list", False),0,0)
|
||||
self.wmain_window.drag_dest_set_target_list(targets)
|
||||
|
||||
|
||||
def set_type(self,obj=None,disc_type=None):
|
||||
""" this method sets the disk type to the specified one and adapts the interface
|
||||
|
|
@ -111,8 +117,10 @@ class devede_project:
|
|||
|
||||
if (self.disc_type == "dvd"):
|
||||
self.wframe_menu.show_all()
|
||||
self.wcreate_menu.set_active(True)
|
||||
else:
|
||||
self.wframe_menu.hide()
|
||||
self.wcreate_menu.set_active(False)
|
||||
|
||||
|
||||
def get_current_file(self):
|
||||
|
|
@ -199,16 +207,22 @@ class devede_project:
|
|||
|
||||
def on_add_file_clicked(self,b):
|
||||
|
||||
error_list = []
|
||||
ask_files = devede.add_files.add_files()
|
||||
if (ask_files.run()):
|
||||
for efile in ask_files.files:
|
||||
new_file = devede.file_movie.file_movie(efile)
|
||||
if (new_file.error):
|
||||
error_list.append(os.path.basename(efile))
|
||||
else:
|
||||
new_file.connect('title_changed',self.title_changed)
|
||||
self.wliststore_files.append([new_file, new_file.title_name])
|
||||
self.add_several_files(ask_files.files)
|
||||
|
||||
|
||||
def add_several_files(self,file_list):
|
||||
error_list = []
|
||||
for efile in file_list:
|
||||
if efile.startswith("file://"):
|
||||
efile = urllib.parse.unquote(efile[7:])
|
||||
new_file = devede.file_movie.file_movie(efile)
|
||||
if (new_file.error):
|
||||
error_list.append(os.path.basename(efile))
|
||||
else:
|
||||
new_file.connect('title_changed',self.title_changed)
|
||||
self.wliststore_files.append([new_file, new_file.title_name])
|
||||
if (len(error_list)!=0):
|
||||
devede.message.message_window(_("The following files could not be added:"),_("Error while adding files"),error_list)
|
||||
self.set_interface_status(None)
|
||||
|
|
@ -266,30 +280,57 @@ class devede_project:
|
|||
fixed_size = 0
|
||||
to_adjust = []
|
||||
for f in self.get_all_files():
|
||||
estimated_size, videorate_fixed_size, audio_rate, sub_rate, width, height, time_length, n_audio_streams = f.get_size_data()
|
||||
estimated_size, videorate_fixed_size, audio_rate, sub_rate, width, height, time_length = f.get_size_data()
|
||||
if videorate_fixed_size:
|
||||
fixed_size += estimated_size
|
||||
else:
|
||||
fixed_size += (((audio_rate * n_audio_streams) + sub_rate) * time_length) / 8
|
||||
fixed_size += ((audio_rate + sub_rate) * time_length)
|
||||
# 76800 = 320x240, which is the smallest resolution
|
||||
surface = ((width * height) / 76800.0) * time_length
|
||||
to_adjust.append( (f, surface, time_length) )
|
||||
surface = ((float(width) * float(height)) / 76800.0) * float(time_length)
|
||||
to_adjust.append( (f, surface, time_length, audio_rate) )
|
||||
total_resolution += surface
|
||||
|
||||
if (self.disc_type == "dvd") and (self.wcreate_menu.get_active()):
|
||||
fixed_size += self.menu.get_estimated_size()
|
||||
fixed_size += self.menu.get_estimated_size() * 8.0
|
||||
|
||||
if (total_resolution != 0):
|
||||
remaining_disc_size = ((1000 * self.get_dvd_size()[0]) - fixed_size) * 8 # in kbits
|
||||
remaining_disc_size = ((8000.0 * self.get_dvd_size()[0]) - fixed_size) # in kbits
|
||||
for l in to_adjust:
|
||||
f = l[0]
|
||||
surface = l[1]
|
||||
length = l[2]
|
||||
f.set_auto_video_rate((remaining_disc_size * surface) / (total_resolution * length))
|
||||
audio_rate = l[3]
|
||||
f.set_auto_video_audio_rate((remaining_disc_size * surface) / ( length * total_resolution), audio_rate)
|
||||
|
||||
self.refresh_disc_usage()
|
||||
|
||||
|
||||
def refresh_disc_usage(self):
|
||||
|
||||
used = 0.0
|
||||
|
||||
for f in self.get_all_files():
|
||||
estimated_size = f.get_estimated_size()
|
||||
used += float(estimated_size)
|
||||
|
||||
if self.wcreate_menu.get_active():
|
||||
used += float(self.menu.get_estimated_size())
|
||||
|
||||
used /= 1000.0
|
||||
|
||||
disc_size,minvrate,maxvrate = self.get_dvd_size()
|
||||
|
||||
if used > disc_size:
|
||||
self.wdisc_fill_level.set_fraction(1.0)
|
||||
addv=1
|
||||
else:
|
||||
self.wdisc_fill_level.set_fraction(used / disc_size)
|
||||
addv=0
|
||||
|
||||
self.wdisc_fill_level.set_text(str(addv+int((used / disc_size)*100))+"%")
|
||||
self.wdisc_fill_level.set_show_text(True)
|
||||
|
||||
|
||||
def on_menu_options_clicked(self,b):
|
||||
|
||||
self.menu.show_configuration(self.get_all_files())
|
||||
|
|
@ -339,31 +380,6 @@ class devede_project:
|
|||
return size,minvrate,maxvrate
|
||||
|
||||
|
||||
def refresh_disc_usage(self):
|
||||
|
||||
used = 0.0
|
||||
|
||||
for f in self.get_all_files():
|
||||
estimated_size = f.get_estimated_size()
|
||||
used += float(estimated_size)
|
||||
|
||||
if self.wcreate_menu.get_active():
|
||||
used += float(self.menu.get_estimated_size())
|
||||
|
||||
used /= 1000.0
|
||||
|
||||
disc_size,minvrate,maxvrate = self.get_dvd_size()
|
||||
|
||||
if used > disc_size:
|
||||
self.wdisc_fill_level.set_fraction(1.0)
|
||||
addv=1
|
||||
else:
|
||||
self.wdisc_fill_level.set_fraction(used / disc_size)
|
||||
addv=0
|
||||
self.wdisc_fill_level.set_text(str(addv+int((used / disc_size)*100))+"%")
|
||||
self.wdisc_fill_level.set_show_text(True)
|
||||
|
||||
|
||||
def on_disc_size_changed(self,c):
|
||||
|
||||
self.refresh_disc_usage()
|
||||
|
|
@ -483,4 +499,25 @@ class devede_project:
|
|||
|
||||
def on_about_activate(self,b):
|
||||
|
||||
w = devede.about.about_window()
|
||||
w = devede.about.about_window()
|
||||
|
||||
def on_new_activate(self,b):
|
||||
|
||||
w = devede.ask.ask_window()
|
||||
if w.run(_("Delete current project and start a fresh one?"), _("New project")):
|
||||
self.wliststore_files.clear()
|
||||
self.wmain_window.hide()
|
||||
devede.choose_disc_type.choose_disc_type()
|
||||
|
||||
def on_wmain_window_drag_motion(self,wid, context, x, y, time):
|
||||
Gdk.drag_status(context, Gdk.DragAction.COPY, time)
|
||||
return True
|
||||
|
||||
def on_wmain_window_drag_drop(self, wid, context, x, y, time):
|
||||
# Used with windows drag and drop
|
||||
return True
|
||||
|
||||
def on_wmain_window_drag_data_received(self, widget, drag_context, x,y, data, info, time):
|
||||
uris = data.get_uris()
|
||||
self.add_several_files(uris)
|
||||
Gtk.drag_finish (drag_context, True, Gdk.DragAction.COPY, time);
|
||||
Loading…
Add table
Add a link
Reference in a new issue