1 package org.thestaticvoid.iriverter; 2 3 import org.eclipse.swt.*; 4 import org.eclipse.swt.widgets.*; 5 import org.eclipse.swt.layout.*; 6 import org.eclipse.swt.custom.*; 7 import org.eclipse.swt.graphics.*; 8 import org.eclipse.swt.events.*; 9 import org.eclipse.swt.dnd.*; 10 11 import java.io.*; 12 import java.util.*; 13 14 public class ConverterUI implements SelectionListener, CTabFolder2Listener, DropTargetListener { 15 private Display display; 16 private Shell shell; 17 private ToolItem convertTool, newSingleVideoTool, newDirectoryTool, newDVDTool; 18 private CTabFolder tabFolder; 19 private Map profileMenuItems, dimensionsMenuItems; 20 private MenuItem convert, playFile, newSingleVideo, newDirectory, newDVD, advancedJobs, manualSplit, joinVideos, moveUp, moveDown, closeJob, closeAllJobs, quit, bitrate, videoSize, panAndScan, advancedOptions, audioSync, automaticallySplit, volume, contents, logViewer, about; 21 private Menu videoSizeMenu; 22 private DropTarget target; 23 private String fileName; 24 private Process proc; 25 private ProgressDialog progressDialog; 26 ConverterUI()27 public ConverterUI() { 28 display = new Display(); 29 30 shell = new Shell(display); 31 shell.setText("iriverter"); 32 InputStream is = getClass().getResourceAsStream("icons/iriverter.png"); 33 shell.setImage(new Image(display, is)); 34 GridLayout gridLayout = new GridLayout(); 35 gridLayout.horizontalSpacing = 0; 36 gridLayout.marginHeight = 0; 37 gridLayout.marginWidth = 0; 38 gridLayout.verticalSpacing = 0; 39 shell.setLayout(gridLayout); 40 41 setupMenus(); 42 setupToolBar(); 43 44 tabFolder = new CTabFolder(shell, SWT.CLOSE); 45 tabFolder.setSimple(false); 46 tabFolder.setBorderVisible(true); 47 tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH)); 48 tabFolder.addSelectionListener(this); 49 tabFolder.addCTabFolder2Listener(this); 50 51 target = new DropTarget(shell, DND.DROP_MOVE | DND.DROP_COPY); 52 target.setTransfer(new Transfer[]{FileTransfer.getInstance()}); 53 target.addDropListener(this); 54 55 shell.setMinimumSize(400, 267); 56 shell.setSize(500, 334); 57 shell.open(); 58 while (!shell.isDisposed()) 59 if (!display.readAndDispatch()) 60 display.sleep(); 61 62 display.dispose(); 63 } 64 setupMenus()65 public void setupMenus() { 66 Menu menu = new Menu(shell, SWT.BAR); 67 shell.setMenuBar(menu); 68 69 MenuItem jobs = new MenuItem(menu, SWT.CASCADE); 70 jobs.setText("&Jobs"); 71 72 Menu jobsMenu = new Menu(shell, SWT.DROP_DOWN); 73 jobs.setMenu(jobsMenu); 74 75 convert = new MenuItem(jobsMenu, SWT.PUSH); 76 convert.setText("&Convert...\tShift+Ctrl+C"); 77 convert.setAccelerator(SWT.SHIFT + SWT.CTRL + 'C'); 78 convert.addSelectionListener(this); 79 80 playFile = new MenuItem(jobsMenu, SWT.PUSH); 81 playFile.setText("&Play File...\tShift+Ctrl+F"); 82 playFile.setAccelerator(SWT.SHIFT + SWT.CTRL + 'F'); 83 playFile.addSelectionListener(this); 84 85 new MenuItem(jobsMenu, SWT.SEPARATOR); 86 87 MenuItem newJob = new MenuItem(jobsMenu, SWT.CASCADE); 88 newJob.setText("&New"); 89 90 Menu newJobMenu = new Menu(shell, SWT.DROP_DOWN); 91 newJob.setMenu(newJobMenu); 92 93 newSingleVideo = new MenuItem(newJobMenu, SWT.PUSH); 94 newSingleVideo.setText("&Single Video\tShift+Ctrl+S"); 95 newSingleVideo.setAccelerator(SWT.SHIFT + SWT.CTRL + 'S'); 96 newSingleVideo.addSelectionListener(this); 97 98 newDirectory = new MenuItem(newJobMenu, SWT.PUSH); 99 newDirectory.setText("&Directory\tShift+Ctrl+D"); 100 newDirectory.setAccelerator(SWT.SHIFT + SWT.CTRL + 'D'); 101 newDirectory.addSelectionListener(this); 102 103 newDVD = new MenuItem(newJobMenu, SWT.PUSH); 104 newDVD.setText("D&VD\tShift+Ctrl+V"); 105 newDVD.setAccelerator(SWT.SHIFT + SWT.CTRL + 'V'); 106 newDVD.addSelectionListener(this); 107 108 advancedJobs = new MenuItem(newJobMenu, SWT.CASCADE); 109 advancedJobs.setText("&Advanced"); 110 111 advancedJobs.setEnabled(ConverterOptions.getCurrentProfile().getWrapperFormat().equals("avi")); 112 113 Menu advancedJobsMenu = new Menu(shell, SWT.DROP_DOWN); 114 advancedJobs.setMenu(advancedJobsMenu); 115 116 manualSplit = new MenuItem(advancedJobsMenu, SWT.PUSH); 117 manualSplit.setText("Manual &Split"); 118 manualSplit.addSelectionListener(this); 119 120 joinVideos = new MenuItem(advancedJobsMenu, SWT.PUSH); 121 joinVideos.setText("&Join Videos"); 122 joinVideos.addSelectionListener(this); 123 124 new MenuItem(jobsMenu, SWT.SEPARATOR); 125 126 moveUp = new MenuItem(jobsMenu, SWT.PUSH); 127 moveUp.setText("Move &Up\tPage Up"); 128 moveUp.setAccelerator(SWT.PAGE_UP); 129 moveUp.setEnabled(false); 130 moveUp.addSelectionListener(this); 131 132 moveDown = new MenuItem(jobsMenu, SWT.PUSH); 133 moveDown.setText("Move &Down\tPage Down"); 134 moveDown.setAccelerator(SWT.PAGE_DOWN); 135 moveDown.setEnabled(false); 136 moveDown.addSelectionListener(this); 137 138 new MenuItem(jobsMenu, SWT.SEPARATOR); 139 140 closeJob = new MenuItem(jobsMenu, SWT.PUSH); 141 closeJob.setText("&Close\tCtrl+W"); 142 closeJob.setAccelerator(SWT.CTRL + 'W'); 143 closeJob.setEnabled(false); 144 closeJob.addSelectionListener(this); 145 146 closeAllJobs = new MenuItem(jobsMenu, SWT.PUSH); 147 closeAllJobs.setText("&Close All\tShift+Ctrl+W"); 148 closeAllJobs.setAccelerator(SWT.SHIFT + SWT.CTRL + 'W'); 149 closeAllJobs.setEnabled(false); 150 closeAllJobs.addSelectionListener(this); 151 152 quit = new MenuItem(jobsMenu, SWT.PUSH); 153 quit.setText("&Quit\tCtrl+Q"); 154 quit.setAccelerator(SWT.CTRL + 'Q'); 155 quit.addSelectionListener(this); 156 157 MenuItem options = new MenuItem(menu, SWT.CASCADE); 158 options.setText("&Options"); 159 160 Menu optionsMenu = new Menu(shell, SWT.DROP_DOWN); 161 options.setMenu(optionsMenu); 162 163 MenuItem device = new MenuItem(optionsMenu, SWT.CASCADE); 164 device.setText("&Device"); 165 166 Menu deviceMenu = new Menu(shell, SWT.DROP_DOWN); 167 device.setMenu(deviceMenu); 168 169 profileMenuItems = new HashMap(); 170 Profile[] profiles = Profile.getAllProfiles(); 171 Profile currentProfile = ConverterOptions.getCurrentProfile(); 172 173 Map deviceToProfile = new HashMap(); 174 Map brandToDevices = new TreeMap(); 175 for (int i = 0; i < profiles.length; i++) { 176 Set devices = (Set) brandToDevices.get(profiles[i].getBrand()); 177 if (devices == null) { 178 devices = new TreeSet(); 179 brandToDevices.put(profiles[i].getBrand(), devices); 180 } 181 182 devices.add(profiles[i].getDevice()); 183 deviceToProfile.put(profiles[i].getDevice(), profiles[i]); 184 } 185 186 Iterator brandItr = brandToDevices.keySet().iterator(); 187 for (int i = 0; brandItr.hasNext(); i++) { 188 String brand = (String) brandItr.next(); 189 190 MenuItem brandMenuItem = new MenuItem(deviceMenu, SWT.CASCADE); 191 brandMenuItem.setText("&" + (i + 1) + " " + brand); 192 193 Menu brandMenu = new Menu(shell, SWT.DROP_DOWN); 194 brandMenuItem.setMenu(brandMenu); 195 196 Iterator deviceItr = ((Set) brandToDevices.get(brand)).iterator(); 197 for (int j = 0; deviceItr.hasNext(); j++) { 198 String deviceStr = (String) deviceItr.next(); 199 Profile profile = (Profile) deviceToProfile.get(deviceStr); 200 201 MenuItem profileMenuItem = new MenuItem(brandMenu, SWT.RADIO); 202 profileMenuItem.setText("&" + (j + 1) + " " + deviceStr); 203 profileMenuItem.setSelection(profile.getProfileName().equals(currentProfile.getProfileName())); 204 profileMenuItem.addSelectionListener(this); 205 206 profileMenuItems.put(profileMenuItem, profile.getProfileName()); 207 } 208 } 209 210 new MenuItem(optionsMenu, SWT.SEPARATOR); 211 212 bitrate = new MenuItem(optionsMenu, SWT.PUSH); 213 bitrate.setText("&Bitrate...\tShift+Ctrl+B"); 214 bitrate.setAccelerator(SWT.SHIFT + SWT.CTRL + 'B'); 215 bitrate.addSelectionListener(this); 216 217 new MenuItem(optionsMenu, SWT.SEPARATOR); 218 219 videoSize = new MenuItem(optionsMenu, SWT.CASCADE); 220 videoSize.setText("Video &Size"); 221 222 videoSizeMenu = new Menu(shell, SWT.DROP_DOWN); 223 videoSize.setMenu(videoSizeMenu); 224 225 new MenuItem(optionsMenu, SWT.SEPARATOR); 226 227 panAndScan = new MenuItem(optionsMenu, SWT.CHECK); 228 panAndScan.setText("&Pan and Scan\tShift+Ctrl+P"); 229 panAndScan.setAccelerator(SWT.SHIFT + SWT.CTRL + 'P'); 230 panAndScan.setSelection(ConverterOptions.getPanAndScan()); 231 panAndScan.addSelectionListener(this); 232 233 advancedOptions = new MenuItem(optionsMenu, SWT.CASCADE); 234 advancedOptions.setText("&Advanced"); 235 236 Menu advancedOptionsMenu = new Menu(shell, SWT.DROP_DOWN); 237 advancedOptions.setMenu(advancedOptionsMenu); 238 239 audioSync = new MenuItem(advancedOptionsMenu, SWT.PUSH); 240 audioSync.setText("Audio &Sync..."); 241 audioSync.addSelectionListener(this); 242 243 automaticallySplit = new MenuItem(advancedOptionsMenu, SWT.PUSH); 244 automaticallySplit.setText("&Automatically Split..."); 245 automaticallySplit.addSelectionListener(this); 246 247 automaticallySplit.setEnabled(ConverterOptions.getCurrentProfile().getWrapperFormat().equals("avi")); 248 249 volume = new MenuItem(advancedOptionsMenu, SWT.PUSH); 250 volume.setText("&Volume..."); 251 volume.addSelectionListener(this); 252 253 MenuItem help = new MenuItem(menu, SWT.CASCADE); 254 help.setText("&Help"); 255 256 Menu helpMenu = new Menu(shell, SWT.DROP_DOWN); 257 help.setMenu(helpMenu); 258 259 contents = new MenuItem(helpMenu, SWT.PUSH); 260 contents.setText("&Contents\tF1"); 261 contents.setAccelerator(SWT.F1); 262 contents.addSelectionListener(this); 263 264 logViewer = new MenuItem(helpMenu, SWT.PUSH); 265 logViewer.setText("&Log Viewer"); 266 logViewer.addSelectionListener(this); 267 268 new MenuItem(helpMenu, SWT.SEPARATOR); 269 270 about = new MenuItem(helpMenu, SWT.PUSH); 271 about.setText("&About"); 272 about.addSelectionListener(this); 273 274 dimensionsMenuItems = new HashMap(); 275 profileChanged(); 276 } 277 setupToolBar()278 public void setupToolBar() { 279 ToolBar toolBar = new ToolBar(shell, SWT.HORIZONTAL | SWT.FLAT); 280 toolBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); 281 282 convertTool = new ToolItem(toolBar, SWT.PUSH); 283 InputStream is = getClass().getResourceAsStream("icons/convert-24.png"); 284 convertTool.setImage(new Image(display, is)); 285 convertTool.setToolTipText("Convert"); 286 convertTool.addSelectionListener(this); 287 288 new ToolItem(toolBar, SWT.SEPARATOR); 289 290 newSingleVideoTool = new ToolItem(toolBar, SWT.PUSH); 291 is = getClass().getResourceAsStream("icons/singlevideo-24.png"); 292 newSingleVideoTool.setImage(new Image(display, is)); 293 newSingleVideoTool.setToolTipText("Single Video"); 294 newSingleVideoTool.addSelectionListener(this); 295 296 newDirectoryTool = new ToolItem(toolBar, SWT.PUSH); 297 is = getClass().getResourceAsStream("icons/directory-24.png"); 298 newDirectoryTool.setImage(new Image(display, is)); 299 newDirectoryTool.setToolTipText("Directory"); 300 newDirectoryTool.addSelectionListener(this); 301 302 newDVDTool = new ToolItem(toolBar, SWT.PUSH); 303 is = getClass().getResourceAsStream("icons/dvd-24.png"); 304 newDVDTool.setImage(new Image(display, is)); 305 newDVDTool.setToolTipText("DVD"); 306 newDVDTool.addSelectionListener(this); 307 } 308 widgetDefaultSelected(SelectionEvent e)309 public void widgetDefaultSelected(SelectionEvent e) { 310 // empty 311 } 312 widgetSelected(SelectionEvent e)313 public void widgetSelected(SelectionEvent e) { 314 if (e.getSource() == tabFolder) 315 tabChanged(false); 316 317 if (e.getSource() == convert || e.getSource() == convertTool) { 318 java.util.List jobs = new ArrayList(); 319 for (int i = 0; i < tabFolder.getItemCount(); i++) 320 jobs.add(tabFolder.getItem(i).getControl()); 321 322 progressDialog = new ProgressDialog(shell, SWT.NONE); 323 Converter converter = new Converter(jobs, progressDialog); 324 converter.start(); 325 progressDialog.open(); 326 converter.cancel(); 327 } 328 329 if (e.getSource() == playFile) { 330 FileDialog fileDialog = new FileDialog(shell, SWT.OPEN); 331 fileDialog.setText("Input Video"); 332 fileDialog.setFilterExtensions(new String[]{"*.avi;*.vob;*.mkv;*.mpg;*.mpeg;*.ogm;*.mov;*.rm;*.ram;*.wmv;*.asf", "*.avi", "*.vob", "*.mkv", "*.mpg;*.mpeg", "*.ogm", "*.mov", "*.rm;*.ram", "*.wmv;*.asf"}); 333 fileDialog.setFilterNames(new String[]{"All Video Files", "AVI Video (*.avi)", "DVD Video Object (*.vob)", "Matroska Video (*.mkv)", "MPEG Video (*.mpg, *.mpeg)", "Ogg Video (*.ogm)", "Quicktime Movie (*.mov)", "Real Video (*.rm, *.ram)", "Windows Media Video (*.wmv, *.asf)"}); 334 String file = fileDialog.open(); 335 336 if (file != null) { 337 try { 338 proc = Runtime.getRuntime().exec(new String[]{MPlayerInfo.getMPlayerPath() + "mplayer", file}); 339 } catch (IOException io) { 340 io.printStackTrace(); 341 } 342 } 343 } 344 345 if (e.getSource() == newSingleVideo || e.getSource() == newSingleVideoTool) 346 newSingleVideo(); 347 348 if (e.getSource() == newDirectory || e.getSource() == newDirectoryTool) 349 newDirectory(); 350 351 if (e.getSource() == newDVD || e.getSource() == newDVDTool) 352 newDVD(); 353 354 if (e.getSource() == manualSplit) 355 newManualSplit(); 356 357 if (e.getSource() == joinVideos) 358 newJoinVideos(); 359 360 if (e.getSource() == moveUp) { 361 Image image = tabFolder.getSelection().getImage(); 362 String title = tabFolder.getSelection().getText(); 363 Control control = tabFolder.getSelection().getControl(); 364 int index = tabFolder.getSelectionIndex(); 365 366 tabFolder.getSelection().dispose(); 367 CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE, --index); 368 tabItem.setImage(image); 369 tabItem.setText(title); 370 tabItem.setControl(control); 371 ((TabItemControl) control).setTabItem(tabItem); 372 tabFolder.setSelection(index); 373 374 tabChanged(false); 375 } 376 377 if (e.getSource() == moveDown) { 378 Image image = tabFolder.getSelection().getImage(); 379 String title = tabFolder.getSelection().getText(); 380 Control control = tabFolder.getSelection().getControl(); 381 int index = tabFolder.getSelectionIndex(); 382 383 tabFolder.getSelection().dispose(); 384 CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE, ++index); 385 tabItem.setImage(image); 386 tabItem.setText(title); 387 tabItem.setControl(control); 388 ((TabItemControl) control).setTabItem(tabItem); 389 tabFolder.setSelection(index); 390 391 tabChanged(false); 392 } 393 394 if (e.getSource() == closeJob) { 395 tabFolder.getSelection().dispose(); 396 tabChanged(false); 397 } 398 399 if (e.getSource() == closeAllJobs) { 400 CTabItem[] tabItems = tabFolder.getItems(); 401 for (int i = 0; i < tabItems.length; i++) 402 tabItems[i].dispose(); 403 tabChanged(false); 404 } 405 406 if (e.getSource() == quit) 407 shell.dispose(); 408 409 // Consider putting the actual profile in the map 410 if (profileMenuItems.containsKey(e.getSource())) { 411 MenuItem selectedMenuItem = (MenuItem) e.getSource(); 412 String selectedProfileName = (String) profileMenuItems.get(selectedMenuItem); 413 414 if (selectedProfileName.equals(ConverterOptions.getCurrentProfile().getProfileName())) 415 return; 416 417 for (Iterator i = profileMenuItems.keySet().iterator(); i.hasNext();) 418 ((MenuItem) i.next()).setSelection(false); 419 selectedMenuItem.setSelection(true); 420 421 ConverterOptions.setCurrentProfile(Profile.getProfile(selectedProfileName)); 422 profileChanged(); 423 } 424 425 if (e.getSource() == bitrate) { 426 BitrateDialog bitrateDialog = new BitrateDialog(shell, SWT.NONE, new Bitrate(ConverterOptions.getCurrentProfile().getMaxVideoBitrate(), ConverterOptions.getCurrentProfile().getMaxAudioBitrate()), new Bitrate(ConverterOptions.getVideoBitrate(), ConverterOptions.getAudioBitrate())); 427 Bitrate newBitrate = bitrateDialog.open(); 428 ConverterOptions.writeOption("videoBitrate", "" + newBitrate.getVideo()); 429 ConverterOptions.writeOption("audioBitrate", "" + newBitrate.getAudio()); 430 } 431 432 if (dimensionsMenuItems.containsKey(e.getSource())) { 433 434 } 435 436 if (e.getSource() == panAndScan) 437 ConverterOptions.writeOption("panAndScan", "" + panAndScan.getSelection()); 438 439 if (e.getSource() == audioSync) { 440 int audioDelay = new AudioSyncDialog(shell, SWT.NONE, (ConverterOptions.getAutoSync()) ? AudioSyncDialog.AUTO_SYNC : ConverterOptions.getAudioDelay()).open(); 441 442 if (audioDelay == AudioSyncDialog.AUTO_SYNC) { 443 ConverterOptions.writeOption("autoSync", "true"); 444 ConverterOptions.writeOption("audioDelay", "0"); 445 } else { 446 ConverterOptions.writeOption("autoSync", "false"); 447 ConverterOptions.writeOption("audioDelay", "" + audioDelay); 448 } 449 } 450 451 if (e.getSource() == automaticallySplit) { 452 int splitTime = new AutomaticallySplitDialog(shell, SWT.NONE, ConverterOptions.getAutoSplit(), ConverterOptions.getSplitTime()).open(); 453 454 if (splitTime == AutomaticallySplitDialog.NO_SPLIT) 455 ConverterOptions.writeOption("autoSplit", "false"); 456 else { 457 ConverterOptions.writeOption("autoSplit", "true"); 458 ConverterOptions.writeOption("splitTime", "" + splitTime); 459 } 460 } 461 462 if (e.getSource() == volume) { 463 double volume = new VolumeDialog(shell, SWT.NONE, ConverterOptions.getVolumeFilter(), ConverterOptions.getGain()).open(); 464 465 if (volume == VolumeDialog.NONE) 466 ConverterOptions.writeOption("volumeFilter", "none"); 467 else if (volume == VolumeDialog.VOLNORM) 468 ConverterOptions.writeOption("volumeFilter", "volnorm"); 469 else { 470 ConverterOptions.writeOption("volumeFilter", "volume"); 471 ConverterOptions.writeOption("gain", "" + volume); 472 } 473 } 474 475 if (e.getSource() == contents) { 476 String index; 477 if (Config.getPackageDataDir().equals(".")) 478 index = "file://" + System.getProperty("user.dir") + "/doc/html/index.html"; 479 else 480 index = "file://" + Config.getPackageDataDir() + "/doc/html/index.html"; 481 482 new HelpBrowser(index); 483 } 484 485 if (e.getSource() == logViewer) { 486 if (LogViewer.getSingleton() == null) 487 new LogViewer(); 488 else 489 LogViewer.getSingleton().getShell().setActive(); 490 } 491 492 if (e.getSource() == about) 493 new AboutDialog(shell, SWT.NONE).open(); 494 } 495 profileChanged()496 public void profileChanged() { 497 for (Iterator i = dimensionsMenuItems.keySet().iterator(); i.hasNext();) 498 ((MenuItem) i.next()).dispose(); 499 500 dimensionsMenuItems.clear(); 501 502 Dimensions[] dimensions = ConverterOptions.getCurrentProfile().getDimensions(); 503 Dimensions currentDimensions = ConverterOptions.getDimensions(); 504 505 for (int i = 0; i < dimensions.length; i++) { 506 MenuItem dimensionsMenuItem = new MenuItem(videoSizeMenu, SWT.RADIO); 507 dimensionsMenuItem.setText("&" + (i + 1) + " " + dimensions[i].toString()); 508 dimensionsMenuItem.setSelection(dimensions[i].toString().equals(currentDimensions.toString())); 509 dimensionsMenuItem.addSelectionListener(this); 510 511 dimensionsMenuItems.put(dimensionsMenuItem, dimensions[i]); 512 } 513 514 advancedJobs.setEnabled(ConverterOptions.getCurrentProfile().getWrapperFormat().equals("avi")); 515 automaticallySplit.setEnabled(ConverterOptions.getCurrentProfile().getWrapperFormat().equals("avi")); 516 } 517 close(CTabFolderEvent event)518 public void close(CTabFolderEvent event) { 519 tabChanged(true); 520 } 521 maximize(CTabFolderEvent event)522 public void maximize(CTabFolderEvent event) { 523 // empty 524 } 525 minimize(CTabFolderEvent event)526 public void minimize(CTabFolderEvent event) { 527 // empty 528 } 529 restore(CTabFolderEvent event)530 public void restore(CTabFolderEvent event) { 531 // empty 532 } 533 showList(CTabFolderEvent event)534 public void showList(CTabFolderEvent event) { 535 // empty 536 } 537 tabChanged(boolean closed)538 public void tabChanged(boolean closed) { 539 int index = tabFolder.getSelectionIndex(); 540 if (closed) 541 index--; 542 543 if (index == -1) { 544 moveUp.setEnabled(false); 545 moveDown.setEnabled(false); 546 closeJob.setEnabled(false); 547 closeAllJobs.setEnabled(false); 548 } else { 549 moveUp.setEnabled(true); 550 moveDown.setEnabled(true); 551 closeJob.setEnabled(true); 552 closeAllJobs.setEnabled(true); 553 554 if (index == 0) 555 moveUp.setEnabled(false); 556 if (index == (tabFolder.getItemCount() - (closed ? 2 : 1))) 557 moveDown.setEnabled(false); 558 } 559 } 560 dragEnter(DropTargetEvent e)561 public void dragEnter(DropTargetEvent e) { 562 563 } 564 dragLeave(DropTargetEvent e)565 public void dragLeave(DropTargetEvent e) { 566 567 } 568 dragOperationChanged(DropTargetEvent e)569 public void dragOperationChanged(DropTargetEvent e) { 570 571 } 572 dragOver(DropTargetEvent e)573 public void dragOver(DropTargetEvent e) { 574 575 } 576 drop(DropTargetEvent e)577 public void drop(DropTargetEvent e) { 578 if (e.getSource() == target) { 579 if (e.data == null) { 580 e.detail = DND.DROP_NONE; 581 return; 582 } 583 584 String[] files = (String[]) e.data; 585 for (int i = 0; i < files.length; i++) { 586 File file = new File(files[i]); 587 588 if (file.isFile() && new VideoFileFilter().accept(file)) 589 newSingleVideo().setInputVideo(files[i]); 590 else if (file.isDirectory()) 591 if (new File(files[i] + File.separator + "VIDEO_TS").exists()) 592 newDVD().setDrive(files[i]); 593 else 594 newDirectory().setInputDirectory(files[i]); 595 } 596 } 597 } 598 dropAccept(DropTargetEvent e)599 public void dropAccept(DropTargetEvent e) { 600 601 } 602 newSingleVideo()603 private SingleVideo newSingleVideo() { 604 CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE); 605 SingleVideo singleVideo = new SingleVideo(tabFolder, SWT.NONE, tabItem); 606 tabItem.setControl(singleVideo); 607 tabFolder.setSelection(tabItem); 608 tabChanged(false); 609 610 return singleVideo; 611 } 612 newDirectory()613 private Directory newDirectory() { 614 CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE); 615 Directory directory = new Directory(tabFolder, SWT.NONE, tabItem); 616 tabItem.setControl(directory); 617 tabFolder.setSelection(tabItem); 618 tabChanged(false); 619 620 return directory; 621 } 622 newDVD()623 private DVD newDVD() { 624 DVD lastDVD = null; 625 for (int i = tabFolder.getItemCount() - 1; i >= 0 && lastDVD == null; i--) 626 if (tabFolder.getItem(i).getControl() instanceof DVD) 627 lastDVD = (DVD) tabFolder.getItem(i).getControl(); 628 629 CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE); 630 DVD dvd = new DVD(tabFolder, SWT.NONE, tabItem); 631 tabItem.setControl(dvd); 632 tabFolder.setSelection(tabItem); 633 tabChanged(false); 634 635 if (lastDVD != null && !lastDVD.getDrive().equals("")) { 636 dvd.setDrive(lastDVD.getDrive()); 637 dvd.setTitleInfo(lastDVD.getTitleInfo()); 638 } else 639 dvd.setTitleCombo(); 640 641 return dvd; 642 } 643 newManualSplit()644 private ManualSplit newManualSplit() { 645 CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE); 646 ManualSplit manualSplit = new ManualSplit(tabFolder, SWT.NONE, tabItem); 647 tabItem.setControl(manualSplit); 648 tabFolder.setSelection(tabItem); 649 tabChanged(false); 650 651 return manualSplit; 652 } 653 newJoinVideos()654 private JoinVideos newJoinVideos() { 655 CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE); 656 JoinVideos joinVideos = new JoinVideos(tabFolder, SWT.NONE, tabItem); 657 tabItem.setControl(joinVideos); 658 tabFolder.setSelection(tabItem); 659 tabChanged(false); 660 661 return joinVideos; 662 } 663 main(String[] args)664 public static void main(String[] args) { 665 try { 666 new ConverterUI(); 667 } catch (Throwable t) { 668 String message = "An unhandled exception occured: " + t.getClass() + "\n" + t.getMessage() + "\n\n"; 669 StackTraceElement[] st = t.getStackTrace(); 670 for (int i = 0; i < st.length; i++) 671 message += st[i] + "\n"; 672 673 Logger.logMessage(message, Logger.ERROR); 674 675 MessageBox messageBox = new MessageBox(new Shell(Display.getDefault()), SWT.ICON_ERROR | SWT.OK); 676 messageBox.setText("Error"); 677 messageBox.setMessage("An unhandled exception occured. The program will close. Please see the log for details."); 678 messageBox.open(); 679 } 680 } 681 } 682