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 } |