Inheritance diagram for VideoBrowser::

Public Methods | |
| boolean | handleOpenSequence (String videoDir, String videoName) |
| boolean | handleOpenSequence () |
| This function is called by _bmenu if the associated menu item is selected. More... | |
| boolean | handleOpenSequence (String filename) |
| void | handleExit () |
| This function is called by _bmenu if the associated menu item is selected. More... | |
| void | handlePlayMode (String mode) |
| void | handlePlayMode (PlayMode mode) |
| void | handleScaleDisplay (double scale) |
| void | handleSingleWindow () |
| void | handleMultWindows () |
| void | handleWindowMode (String mode) |
| void | handleWindowMode (PlayerWindowMode mode) |
| void | handleCopyResults () |
| void | handlePasteResults () |
Static Public Methods | |
| void | main (String[] args) |
| main is called when this is used as an application. More... | |
Protected Methods | |
| boolean | buildSample (JFrame parent, JApplet applet, String[] args) |
| Initialization. More... | |
| HxCorba.DatabaseSession | openDBSession () |
| void | changeSession (HxCorba.DatabaseSession newSession) |
| void | addQueryPanel (String title, JPanel queryPanel) |
| void | removeQueryPanel (JPanel queryPanel) |
| QueryUser | makeBrowserQueryUser () |
|
|
main is called when this is used as an application. This function has to be overloaded in the "leaf node" application itself. Reimplemented from SampleApp. Reimplemented in VideoBrowserDemos.
00034 {
00035 VideoBrowser app = new VideoBrowser();
00036 app.doMain(args);
00037
00038 // doMain will call buildSample
00039 }
|
|
||||||||||||
|
00042 {
00043 //File file = videoDir.equals("")? new File(videoName+".mpg") :
00044 // new File(videoDir, videoName+".mpg");
00045 //file = file.getAbsoluteFile();
00046 /*if(!file.exists()) {
00047 ErrorStreamArea.println(file.getPath()+" doesn't exist");
00048 return false;
00049 }
00050 else*/
00051 // return handleOpenSequence(file);
00052 return handleOpenSequence(videoDir+videoName+".mpg");
00053 }
|
|
|
This function is called by _bmenu if the associated menu item is selected.
00058 {
00059 File file = askFilename(SEQ_FILTER, CorbaMediator.instance().hasLocalServer());
00060 if(file != null)
00061 return handleOpenSequence(file.getPath());
00062 else
00063 return false;
00064 }
|
|
|
00067 {
00068 _storyboard.clear();
00069 _director.stop();
00070 _butShowMoreShots.setEnabled(false);
00071 _butShowAllShots.setEnabled(false);
00072 _resultSetBox.setEnabled(false);
00073
00074 try {
00075 if(_seq != null) _seq.destroy();
00076 _seq = null;
00077 }
00078 catch(Exception e) {
00079 ErrorStreamArea.println(" "+e);
00080 e.printStackTrace();
00081 }
00082
00083 HxCorba.Constructor constructor =
00084 ServiceRepository.instance().getConstructor();
00085 if(constructor == null) return false;
00086
00087 // Here is some dirty stuff to release unused objects from HxServer:
00088 //HxCorba.Configure cfg = ServiceRepository.instance().getConfigure();
00089 //if(cfg != null) {
00090 // try {
00091 // HxCorba.ObjectUsage us = cfg.getDefaultObjectUsage();
00092 // us.setTotalLimit("Objects", 10);
00093 // us.close();
00094 // }
00095 // catch(Exception e) {}
00096 //}
00097
00098 try {
00099 _seq = constructor.constructBufferedImageSeq(filename, BUFF_SIZE+1);
00100 if(_seq == null) {
00101 ErrorStreamArea.println(constructor.getLastError());
00102 return false;
00103 }
00104
00105 _videoName = nameFromFile(new File(filename));
00106
00107 _seqDisplayer.setSequence(_seq);
00108 _externalPlayer.setSequencePath(filename);
00109
00110 _director = new PlayingDirector(_seq.nrFrames());
00111
00112 FrameNavigatorDisplayer navDisp = new FrameNavigatorDisplayer(_frameNav);
00113 FrameNavigatorDisplayer storyDisp = new FrameNavigatorDisplayer(_storyboard);
00114
00115 _director.addPlayingObserver(_seqDisplayer);
00116 _director.addPlayingObserver(makeFrameStatusDisplayer());
00117 _director.addPlayingObserver(navDisp.makeObserver(_director));
00118 _director.addPlayingObserver(_externalPlayer);
00119 //_director.addPlayingObserver(PlayingObserverFactory.makeDebugObserver());
00120
00121 //Set Director to enable buttons
00122 setDirector(_director);
00123
00124 HxCorba.VxSegmentation seg = _session.getSegmentation(_videoName, "blocks");
00125 if(seg != null) {
00126 _storyboard.updateSegs(_seq, seg, 5);
00127 _butShowMoreShots.setEnabled(true);
00128 _butShowAllShots.setEnabled(true);
00129 _resultSetBox.setEnabled(true);
00130 _director.addPlayingObserver(storyDisp.makeObserver(_director));
00131 }
00132 else ErrorStreamArea.println("There is no 'blocks' information for video.");
00133
00134 handlePlayMode(_playMode);
00135 _director.setCurrentFrame(0);
00136
00137 getParentFrame().setTitle(getSampleName()+" - "+_videoName);
00138
00139 return true;
00140 }
00141 catch(Exception e) {
00142 ErrorStreamArea.println(" "+e);
00143 e.printStackTrace();
00144 }
00145 return false;
00146 }
|
|
|
This function is called by _bmenu if the associated menu item is selected.
00151 {
00152 _externalPlayer.close();
00153
00154 try {
00155 if(_session != null) _session.close();
00156 }
00157 catch(Exception e) {
00158 ErrorStreamArea.println(" "+e);
00159 }
00160 quitSample();
00161 }
|
|
|
00164 {
00165 PlayMode playMode = PlayMode.getMode(mode);
00166 if(playMode == null)
00167 OutputStreamArea.println("Unknown PlayMode: "+mode);
00168 else
00169 handlePlayMode(playMode);
00170 }
|
|
|
00173 {
00174 _playMode = mode;
00175 if(_seq == null) return;
00176
00177 _externalPlayer.setMode(externalPlayerMode(mode));
00178 _director.setRealTime(isRealTimeMode(mode));
00179
00180 _seqDisplayer.setThreadedMode(mode == PlayMode.THREADED);
00181 _seqDisplayer.setEnabled(mode != PlayMode.EXTERNAL);
00182
00183 _director.showCurrentFrame();
00184 }
|
|
|
00187 {
00188 if(scale <= 0.0) {
00189 ErrorStreamArea.println("Scale must be bigger than 0.0");
00190 return;
00191 }
00192
00193 _seqDisplayer.setScale(scale);
00194 }
|
|
|
00197 {
00198 handleWindowMode(PlayerWindowMode.SINGLE);
00199 }
|
|
|
00202 {
00203 handleWindowMode(PlayerWindowMode.MDI);
00204 }
|
|
|
00207 {
00208 PlayerWindowMode windowMode = PlayerWindowMode.getMode(mode);
00209 if(windowMode == null)
00210 OutputStreamArea.println("Unknown WindowMode: "+mode);
00211 else
00212 handleWindowMode(windowMode);
00213 }
|
|
|
00216 {
00217 _windowMode = mode;
00218
00219 for(int i=0; i<_windows.size(); i++) {
00220 ((PlayerWindow)_windows.elementAt(i)).setMode(_windowMode);
00221 }
00222
00223 JComponent component = (mode == PlayerWindowMode.MDI)?
00224 (JComponent)_desktop : (JComponent)_fixedPanel;
00225
00226 JFrame parent = getParentFrame();
00227 changeContent(getParentFrame().getContentPane(), component);
00228
00229 _bmenu.remove((mode == PlayerWindowMode.MDI)? _singleWindowMenu : _mdiWindowMenu);
00230 _bmenu.add((mode == PlayerWindowMode.MDI)? _mdiWindowMenu : _singleWindowMenu);
00231 _bmenu.revalidate();
00232 _bmenu.repaint();
00233
00234 }
|
|
|
00238 {
00239 JInternalFrame frame = _desktop.getSelectedFrame();
00240 if(frame == null) {
00241 ErrorStreamArea.println("No results selected");
00242 return;
00243 }
00244
00245 QueryResultTable table = (QueryResultTable)frame.getClientProperty("Hx.ResultTable");
00246 if(table == null) {
00247 ErrorStreamArea.println("No results selected");
00248 return;
00249 }
00250
00251 int nRow = table.getRowCount();
00252 int nCol = table.getColumnCount();
00253 String text = "";
00254 for(int i=0; i<nRow; i++) {
00255 for(int j=0; j<nCol; j++) {
00256 text += table.getValueAt(i, j)+"\t";
00257 }
00258 text += "\n";
00259 }
00260 Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
00261 clip.setContents(new StringSelection(text), null);
00262 }
|
|
|
00265 {
00266 Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
00267 Transferable tr = clip.getContents(null);
00268 if(tr == null) {
00269 ErrorStreamArea.println("Empty clipboard");
00270 return;
00271 }
00272
00273 java.util.Vector vec = new java.util.Vector();
00274 try {
00275 String text = (String)tr.getTransferData(DataFlavor.stringFlavor);
00276 java.util.StringTokenizer tok = new java.util.StringTokenizer(text);
00277 while(tok.hasMoreTokens()) {
00278 HxCorba.SegmentQueryResult row = new HxCorba.SegmentQueryResult();
00279 row.videoName = tok.nextToken();
00280 String start = tok.nextToken();
00281 String end = tok.nextToken();
00282 row.time = new HxCorba.VxTimeSpan(Integer.parseInt(start),
00283 Integer.parseInt(end));
00284 vec.add(row);
00285 }
00286
00287 HxCorba.SegmentQueryResult[] results =
00288 new HxCorba.SegmentQueryResult[vec.size()];
00289 vec.toArray(results);
00290 showQueryResults(results);
00291
00292 }
00293 catch(java.io.IOException ex) {
00294 ErrorStreamArea.println("Can not paste results.");
00295 }
00296 catch(UnsupportedFlavorException ex) {
00297 ErrorStreamArea.println("Can not paste results: wrong clipboard content.");
00298 }
00299 catch(java.util.NoSuchElementException ex) {
00300 ErrorStreamArea.println("Can not paste results: wrong number of elements.");
00301 }
00302 catch(NumberFormatException ex) {
00303 int row = vec.size()+1;
00304 ErrorStreamArea.println("Can not paste results: wrong number found on row "+row);
00305 }
00306 }
|
|
||||||||||||||||
|
Initialization.
Reimplemented from SampleApp. Reimplemented in VideoBrowserDemos.
00317 {
00318 ErrorStreamArea err = new ErrorStreamArea(parent, 10, 80);
00319
00320 OutputStreamArea.println("Initializing CorbaMediator...");
00321 initCorbaMediator(args);
00322 setAdvancedLookupManager(parent);
00323
00324 _session = openDBSession();
00325 if(_session == null) return false;
00326
00327 OutputStreamArea.println("Building "+getSampleName()+" GUI...");
00328
00329 String playMode = getSampleProperty("PlayMode", PlayMode.NORMAL.toString());
00330 _playMode = PlayMode.getMode(playMode);
00331 if(_playMode == null) {
00332 OutputStreamArea.println("Unknown PlayMode: "+playMode);
00333 _playMode = PlayMode.NORMAL;
00334 }
00335
00336 // Sequence viewer
00337
00338 _seqDisplayer = new SequenceDisplayer(BUFF_SIZE);
00339 //_viewer = ViewerFactory.makeBasicViewer();
00340
00341 Image logo = Toolkit.getDefaultToolkit().createImage(CorbaSamplesRes.get_mia());
00342 _seqDisplayer.setStillImage(new CanvasCorbaImage(new JavaImageData(logo)));
00343
00344 JPanel seqFixedPanel = new JPanel(new BorderLayout());
00345 JInternalFrame seqFrame = new JInternalFrame("Sequence", true, false, true, true);
00346 _windows.add(new PlayerWindow(_seqDisplayer.getViewer(), seqFrame, seqFixedPanel));
00347
00348 // FrameNavigator
00349
00350 _frameNav = new SimpleFrameNavigator();
00351 JPanel ctrlPanel = getPlayingControlsPanel();
00352
00353 JPanel navComponent = new JPanel(new BorderLayout());
00354 navComponent.add(_frameNav, BorderLayout.CENTER);
00355 navComponent.add(ctrlPanel, BorderLayout.SOUTH);
00356
00357 JPanel navFixedPanel = new JPanel(new BorderLayout());
00358 JInternalFrame navFrame = new JInternalFrame("Frame Navigator", true, false, false, true);
00359 _windows.add(new PlayerWindow(navComponent, navFrame, navFixedPanel));
00360
00361 // Storyboard
00362
00363 String strFactor = getSampleProperty("KeyframeFactor", "0.3");
00364 try {
00365 double factor = Double.parseDouble(strFactor);
00366 _storyboard = new StoryboardPanel(factor);
00367 }
00368 catch(NumberFormatException ex) {
00369 ErrorStreamArea.println("Wrong KeyframeFactor value \""+
00370 strFactor+"\". Double value expected.");
00371 _storyboard = new StoryboardPanel();
00372 }
00373
00374 JScrollPane storyScroll = new JScrollPane(_storyboard);
00375
00376 _butShowMoreShots = new JButton(" Show 10 more ");
00377 _butShowMoreShots.setEnabled(false);
00378 _actions.addButton(_butShowMoreShots, "showMore");
00379
00380 _butShowAllShots = new JButton(" Show All ");
00381 _butShowAllShots.setEnabled(false);
00382 _actions.addButton(_butShowAllShots, "showAll");
00383
00384 _resultSetBox = new JComboBox();
00385 _resultSetBox.setEnabled(false);
00386 ResultSet empty = new ResultSet("none");
00387
00388 JToolBar storyToolBar = new JToolBar();
00389 storyToolBar.addSeparator();
00390 storyToolBar.add(new JLabel("Result set: "));
00391 storyToolBar.add(_resultSetBox);
00392 storyToolBar.addSeparator();
00393 storyToolBar.add(_butShowMoreShots);
00394 storyToolBar.add(_butShowAllShots);
00395 storyToolBar.addSeparator();
00396 storyToolBar.setFloatable(false);
00397
00398 JPanel storyPanel = new JPanel(new BorderLayout());
00399 storyPanel.add(storyScroll, BorderLayout.CENTER);
00400 storyPanel.add(storyToolBar, BorderLayout.NORTH);
00401
00402 JPanel storyFixedPanel = new JPanel(new BorderLayout());
00403 final JInternalFrame storyFrame = new JInternalFrame("StoryBoard", true, false, false, true);
00404 //storyFrame.addComponentListener(new ShowPosition());
00405 _windows.add(new PlayerWindow(storyPanel, storyFrame, storyFixedPanel));
00406
00407 // QueryPanel (Tree)
00408
00409 BrowserQueryUser queryUser = new BrowserQueryUser();
00410
00411 _queryPanel = new QueryTreePanel(_session);
00412 _queryPanel.setUser(queryUser);
00413 _queryPanel.allowMultipleVideos(true);
00414
00415 JPanel queryFixedPanel = new JPanel(new BorderLayout());
00416 JInternalFrame queryFrame = new JInternalFrame("Tree Query", true, false, false, true);
00417 //queryFrame.addComponentListener(new ShowPosition());
00418 _windows.add(new PlayerWindow(_queryPanel, queryFrame, queryFixedPanel));
00419
00420
00421 // VideoList
00422
00423 _videoList = new JList(_session.listVideos());
00424 _videoList.addMouseListener(new VideoListMouseListener());
00425 _videoList.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
00426 JScrollPane listScroll = new JScrollPane(_videoList);
00427
00428 JPanel videoListPanel = new JPanel(new BorderLayout(10,10));
00429 videoListPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
00430 videoListPanel.add(listScroll, BorderLayout.CENTER);
00431
00432 JPanel vListFixedPanel = new JPanel(new BorderLayout());
00433 JInternalFrame videoListFrame = new JInternalFrame("Videos", true, false, false, true);
00434 //videoListFrame.addComponentListener(new ShowPosition());
00435 _windows.add(new PlayerWindow(videoListPanel, videoListFrame, vListFixedPanel));
00436
00437
00438 // Create desktop
00439
00440 _desktop = new JDesktopPane();
00441 _desktop.putClientProperty("JDesktopPane.dragMode", "outline");
00442
00443 seqFrame.setLocation(0, 0);
00444 navFrame.setLocation(25,350);
00445 storyFrame.setLocation(465,65);
00446 queryFrame.setLocation(430, 35);
00447 videoListFrame.setLocation(25, 455);
00448
00449 navFrame.setPreferredSize(new Dimension(380,100));
00450 storyFrame.setPreferredSize(new Dimension(525,600));
00451 videoListFrame.setPreferredSize(new Dimension(380, 175));
00452
00453 // Last in list will appear on top
00454 JInternalFrame[] frames = {queryFrame, seqFrame, navFrame,
00455 storyFrame, videoListFrame};
00456 for(int i=0; i<frames.length; i++) {
00457 _desktop.add(frames[i]);
00458 frames[i].setVisible(true);
00459 }
00460
00461 // Create fixed panel
00462
00463 _fixedPanel = new JPanel(new BorderLayout());
00464
00465 JPanel auxPanel = new JPanel(new BorderLayout());
00466 auxPanel.add(seqFixedPanel, BorderLayout.CENTER);
00467 auxPanel.add(navFixedPanel, BorderLayout.SOUTH);
00468
00469 JPanel sqlFixedPanel = new JPanel(new BorderLayout());
00470 JPanel resFixedPanel = new JPanel(new BorderLayout());
00471
00472 SQLQueryPanel sqlPanel = new SQLQueryPanel(_session);
00473 sqlPanel.setUser(queryUser);
00474
00475 _sqlWindows = new ExtraPlayerWindow(sqlPanel, sqlFixedPanel);
00476 _windows.add(_sqlWindows);
00477
00478 JTable resultTable = new QueryResultTable();
00479 JScrollPane tableScroll = new JScrollPane(resultTable);
00480 tableScroll.setVerticalScrollBarPolicy(tableScroll.VERTICAL_SCROLLBAR_ALWAYS);
00481 tableScroll.getViewport().setBackground(Color.white);
00482
00483 _resWindows = new ExtraPlayerWindow(tableScroll, resFixedPanel);
00484 _windows.add(_resWindows);
00485
00486 _tabbedPane = new JTabbedPane();
00487 _tabbedPane.addTab("Video List", null, vListFixedPanel);
00488 _tabbedPane.addTab("Tree Query", null, queryFixedPanel);
00489 _tabbedPane.addTab("SQL Query", null, sqlFixedPanel);
00490 _tabbedPane.addTab("Query results", null, resFixedPanel);
00491
00492 JSplitPane splitH = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
00493 auxPanel, _tabbedPane);
00494 splitH.setOneTouchExpandable(false);
00495 splitH.setDividerLocation(450);
00496
00497 JSplitPane splitV = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
00498 splitH, storyFixedPanel);
00499 splitV.setOneTouchExpandable(false);
00500 splitV.setDividerLocation(375);
00501
00502 _fixedPanel.add(splitV, BorderLayout.CENTER);
00503
00504
00505 // Create ExtMenuBar:
00506
00507 _bmenu = new ExtMenuBar(this);
00508 _bmenu.addMenu("File");
00509 if(isStandalone()) {
00510 _bmenu.addMenuItem("File", "Open Sequence", "handleOpenSequence");
00511 _bmenu.addSeparator("File");
00512 }
00513 _bmenu.addMenuItem("File", "Exit", "handleExit");
00514
00515 if(isStandalone()) {
00516 _bmenu.addMenu("Edit");
00517 _bmenu.addMenuItem("Edit", "Copy Results", "handleCopyResults");
00518 _bmenu.addMenuItem("Edit", "Paste Results", "handlePasteResults");
00519 }
00520
00521 _bmenu.addMenu("Preferences");
00522 _bmenu.addSubMenu("Preferences", "Play mode");
00523 _bmenu.addGroupMenu("Play mode", PlayMode.getNames(), "handlePlayMode",
00524 _playMode.toString());
00525 _bmenu.addMenuItem("Preferences", "Scale Display",
00526 new HxJava.Util.CallableMethod("handleScaleDisplay",
00527 "double", "scale", "double"));
00528
00529 _mdiWindowMenu = _bmenu.addMenu("Windows Mdi");
00530 ButtonGroup windowGroup = new ButtonGroup();
00531 for(int i=0; i<frames.length; i++)
00532 _mdiWindowMenu.add(makeWindowMenuItem(frames[i], windowGroup));
00533 _bmenu.addSeparator("Windows Mdi");
00534 _bmenu.addMenuItem("Windows Mdi", "Single Window", "handleSingleWindow");
00535
00536 _singleWindowMenu = _bmenu.addMenu("Windows Single");
00537 _bmenu.addMenuItem("Windows Single", "Multiple Windows", "handleMultWindows");
00538
00539 _mdiWindowMenu.setText("Windows");
00540 _singleWindowMenu.setText("Windows");
00541 _bmenu.remove(_mdiWindowMenu);
00542
00543 parent.setJMenuBar(_bmenu);
00544
00545 handleWindowMode(PlayerWindowMode.MDI); // Show desktop in order to pack
00546 for(int i=0; i<frames.length; i++)
00547 frames[i].pack();
00548
00549 String windowMode = getSampleProperty("WindowMode", PlayerWindowMode.MDI.toString());
00550 handleWindowMode(windowMode);
00551
00552 handlePlayMode(_playMode);
00553
00554 parent.setSize(1000, 730);
00555
00556 OutputStreamArea.println("Done.");
00557 return true;
00558 }
|
|
|
Reimplemented in VideoBrowserDemos.
00561 {
00562 HxCorba.Database db = ServiceRepository.instance().getDatabase();
00563 if(db == null) return null;
00564
00565 PasswordPane passPane = new PasswordPane(getSampleProperty("Username"),
00566 getSampleProperty("Password"));
00567 boolean ok = passPane.askIdentification(this);
00568 if(!ok) return null;
00569
00570 try {
00571 return db.openSession(passPane.getName(), passPane.getPassword());
00572 }
00573 catch(HxCorba.DatabaseException ex) {
00574 ErrorStreamArea.println(ex.message);
00575 return null;
00576 }
00577 }
|
|
|
00580 {
00581 _session = newSession;
00582 _queryPanel.setSession(_session);
00583 _videoList.setListData(_session.listVideos());
00584 }
|
|
||||||||||||
|
00587 {
00588 JPanel queryFixedPanel = new JPanel(new BorderLayout());
00589 JInternalFrame queryFrame = new JInternalFrame(title, true, false, false, true);
00590 PlayerWindow pw = new PlayerWindow(queryPanel, queryFrame, queryFixedPanel);
00591
00592 pw.setMode(_windowMode);
00593 _windows.add(pw);
00594
00595 queryFrame.setSize(queryPanel.getPreferredSize());
00596
00597 _desktop.add(queryFrame);
00598 queryFrame.setVisible(true);
00599 try {
00600 queryFrame.setSelected(true);
00601 } catch (java.beans.PropertyVetoException e) {}
00602
00603 _tabbedPane.addTab(title, null, queryFixedPanel);
00604 _tabbedPane.setSelectedComponent(queryFixedPanel);
00605 }
|
|
|
00608 {
00609 for(int i=0; i<_windows.size(); i++) {
00610 PlayerWindow pw = (PlayerWindow)_windows.elementAt(i);
00611 if(pw.component == queryPanel) {
00612 String title = pw.frame.getTitle();
00613 int nTab = _tabbedPane.indexOfTab(title);
00614 _tabbedPane.removeTabAt(nTab);
00615 pw.frame.dispose();
00616
00617 _windows.remove(i);
00618 return;
00619 }
00620 }
00621
00622 System.out.println("No panel found");
00623 }
|
|
|
00626 {
00627 return new BrowserQueryUser();
00628 }
|
1.2.12 written by Dimitri van Heesch,
© 1997-2001