]> git.sesse.net Git - vlc/blobdiff - modules/gui/beos/MessagesWindow.cpp
Removes trailing spaces. Removes tabs.
[vlc] / modules / gui / beos / MessagesWindow.cpp
index 8200927a43d295706ab095b47672ce9a88b52904..7884d55da7f681d5dc3ef7ba770b770c274251f6 100644 (file)
@@ -1,8 +1,8 @@
 /*****************************************************************************
  * MessagesWindow.cpp: beos interface
  *****************************************************************************
- * Copyright (C) 1999, 2000, 2001 VideoLAN
- * $Id: MessagesWindow.cpp,v 1.7 2003/02/10 15:23:46 titer Exp $
+ * Copyright (C) 1999, 2000, 2001 the VideoLAN team
+ * $Id$
  *
  * Authors: Eric Petit <titer@videolan.org>
  *
@@ -18,7 +18,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
 /* BeOS headers */
 
 /* VLC headers */
 #include <vlc/vlc.h>
-#include <vlc/intf.h>
+#include <vlc_interface.h>
 
 /* BeOS module headers */
-#include "VlcWrapper.h"
 #include "InterfaceWindow.h"
 #include "MessagesWindow.h"
 
-static int UpdateMessages( intf_thread_t * p_intf );
+/*****************************************************************************
+ * MessagesView::Pulse
+ *****************************************************************************/
+void MessagesView::Pulse()
+{
+    bool isScrolling = false;
+    if( fScrollBar->LockLooper() )
+    {
+        float min, max;
+        fScrollBar->GetRange( &min, &max );
+        if( fScrollBar->Value() != max )
+            isScrolling = true;
+        fScrollBar->UnlockLooper();
+
+    }
+
+    int i_start, oldLength;
+    char * psz_module_type = NULL;
+    rgb_color red = { 200, 0, 0 };
+    rgb_color gray = { 150, 150, 150 };
+    rgb_color green = { 0, 150, 0 };
+    rgb_color orange = { 230, 180, 00 };
+    rgb_color color;
+
+    vlc_mutex_lock( p_sub->p_lock );
+    int i_stop = *p_sub->pi_stop;
+    vlc_mutex_unlock( p_sub->p_lock );
+
+    if( p_sub->i_start != i_stop )
+    {
+        for( i_start = p_sub->i_start;
+             i_start != i_stop;
+                 i_start = (i_start+1) % VLC_MSG_QSIZE )
+        {
+            /* Add message */
+            switch( p_sub->p_msg[i_start].i_type )
+            {
+                case VLC_MSG_INFO: color = green; break;
+                case VLC_MSG_WARN: color = orange; break;
+                case VLC_MSG_ERR: color = red; break;
+                case VLC_MSG_DBG: color = gray; break;
+            }
+
+            switch( p_sub->p_msg[i_start].i_object_type )
+            {
+                case VLC_OBJECT_ROOT: psz_module_type = "root"; break;
+                case VLC_OBJECT_VLC: psz_module_type = "vlc"; break;
+                case VLC_OBJECT_MODULE: psz_module_type = "module"; break;
+                case VLC_OBJECT_INTF: psz_module_type = "interface"; break;
+                case VLC_OBJECT_PLAYLIST: psz_module_type = "playlist"; break;
+                case VLC_OBJECT_ITEM: psz_module_type = "item"; break;
+                case VLC_OBJECT_INPUT: psz_module_type = "input"; break;
+                case VLC_OBJECT_DECODER: psz_module_type = "decoder"; break;
+                case VLC_OBJECT_VOUT: psz_module_type = "video output"; break;
+                case VLC_OBJECT_AOUT: psz_module_type = "audio output"; break;
+                case VLC_OBJECT_SOUT: psz_module_type = "stream output"; break;
+            }
+
+            if( LockLooper() )
+            {
+                oldLength = TextLength();
+                BString string;
+                string << p_sub->p_msg[i_start].psz_module
+                    << " " << psz_module_type << " : "
+                    << p_sub->p_msg[i_start].psz_msg << "\n";
+                Insert( TextLength(), string.String(), strlen( string.String() ) );
+                SetFontAndColor( oldLength, TextLength(), NULL, 0, &color );
+                Draw( Bounds() );
+                UnlockLooper();
+            }
+        }
+
+        vlc_mutex_lock( p_sub->p_lock );
+        p_sub->i_start = i_start;
+        vlc_mutex_unlock( p_sub->p_lock );
+    }
+
+    /* Scroll at the end unless the is user is scrolling or selecting something */
+    int32 start, end;
+    GetSelection( &start, &end );
+    if( !isScrolling && start == end && fScrollBar->LockLooper() )
+    {
+        float min, max;
+        fScrollBar->GetRange( &min, &max );
+        fScrollBar->SetValue( max );
+        fScrollBar->UnlockLooper();
+    }
+
+    BTextView::Pulse();
+}
 
 /*****************************************************************************
  * MessagesWindow::MessagesWindow
  *****************************************************************************/
-MessagesWindow::MessagesWindow( intf_thread_t * p_intf,
+MessagesWindow::MessagesWindow( intf_thread_t * _p_intf,
                                 BRect frame, const char * name )
-       : BWindow( frame, name, B_FLOATING_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
-               B_NOT_ZOOMABLE )
+    : BWindow( frame, name, B_FLOATING_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
+               B_NOT_ZOOMABLE ),
+    p_intf(_p_intf)
 {
-       this->p_intf = p_intf;
-       
-       BRect rect, textRect;
-       
-       rect = Bounds();
-       rect.right -= B_V_SCROLL_BAR_WIDTH;
-       textRect = rect;
-       textRect.InsetBy( 5, 5 );
-       fMessagesView = new BTextView( rect, "messages", textRect,
-                                      B_FOLLOW_ALL, B_WILL_DRAW );
-       fMessagesView->MakeEditable( false );
-       fMessagesView->SetStylable( true );
-       fScrollView = new BScrollView( "scrollview", fMessagesView, B_WILL_DRAW,
-                                      B_FOLLOW_ALL, false, true );
-       fScrollBar = fScrollView->ScrollBar( B_VERTICAL );
-       AddChild( fScrollView );
-       
+    SetSizeLimits( 400, 2000, 200, 2000 );
+
+    p_sub = msg_Subscribe( p_intf, MSG_QUEUE_NORMAL );
+    BRect rect, textRect;
+
+    rect = Bounds();
+    rect.right -= B_V_SCROLL_BAR_WIDTH;
+    textRect = rect;
+    textRect.InsetBy( 5, 5 );
+    fMessagesView = new MessagesView( p_sub,
+                                      rect, "messages", textRect,
+                                      B_FOLLOW_ALL, B_WILL_DRAW );
+    fMessagesView->MakeEditable( false );
+    fMessagesView->SetStylable( true );
+    fScrollView = new BScrollView( "scrollview", fMessagesView, B_WILL_DRAW,
+                                   B_FOLLOW_ALL, false, true );
+    fMessagesView->fScrollBar = fScrollView->ScrollBar( B_VERTICAL );
+    AddChild( fScrollView );
     /* start window thread in hidden state */
     Hide();
     Show();
-
-    /* update it */
-    if( vlc_thread_create( p_intf, "update messages", UpdateMessages,
-                           VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) )
-    {
-        msg_Err( p_intf, "cannot create update messages thread" );
-    }
 }
 
 /*****************************************************************************
@@ -78,14 +163,15 @@ MessagesWindow::MessagesWindow( intf_thread_t * p_intf,
  *****************************************************************************/
 MessagesWindow::~MessagesWindow()
 {
-    vlc_thread_join( p_intf );
+     msg_Unsubscribe( p_intf, p_sub );
 }
 
 /*****************************************************************************
  * MessagesWindow::FrameResized
  *****************************************************************************/
-void MessagesWindow::FrameResized( float, float )
+void MessagesWindow::FrameResized( float width, float height )
 {
+    BWindow::FrameResized( width, height );
     BRect rect = fMessagesView->Bounds();
     rect.InsetBy( 5, 5 );
     fMessagesView->SetTextRect( rect );
@@ -109,95 +195,3 @@ void MessagesWindow::ReallyQuit()
     Hide();
     Quit();
 }
-
-/*****************************************************************************
- * UpdateMessages
- *****************************************************************************/
-static int UpdateMessages( intf_thread_t * p_intf )
-{
-    /* workaround: wait a bit or it'll crash */
-    msleep( 500000 );
-
-    intf_sys_t * p_sys = (intf_sys_t*)p_intf->p_sys;
-    msg_subscription_t * p_sub = p_sys->p_sub;
-    MessagesWindow * messagesWindow = p_sys->p_window->fMessagesWindow;
-    BTextView * messagesView = messagesWindow->fMessagesView;
-    BScrollBar * scrollBar = messagesWindow->fScrollBar;
-
-    while( !p_intf->b_die )
-    {
-        int i_start, oldLength;
-        char * psz_module_type = NULL;
-        rgb_color red = { 200, 0, 0 };
-        rgb_color gray = { 150, 150, 150 };
-        rgb_color green = { 0, 150, 0 };
-        rgb_color orange = { 230, 180, 00 };
-        rgb_color color;
-    
-        vlc_mutex_lock( p_sub->p_lock );
-        int i_stop = *p_sub->pi_stop;
-        vlc_mutex_unlock( p_sub->p_lock );
-
-        if( p_sub->i_start != i_stop )
-        {
-            for( i_start = p_sub->i_start;
-                 i_start != i_stop;
-                 i_start = (i_start+1) % VLC_MSG_QSIZE )
-            {
-                /* Add message */
-                switch( p_sub->p_msg[i_start].i_type )
-                {
-                    case VLC_MSG_INFO: color = green; break;
-                    case VLC_MSG_WARN: color = orange; break;
-                    case VLC_MSG_ERR: color = red; break;
-                    case VLC_MSG_DBG: color = gray; break;
-                }
-            
-                switch( p_sub->p_msg[i_start].i_object_type )
-                {
-                    case VLC_OBJECT_ROOT: psz_module_type = "root"; break;
-                    case VLC_OBJECT_VLC: psz_module_type = "vlc"; break;
-                    case VLC_OBJECT_MODULE: psz_module_type = "module"; break;
-                    case VLC_OBJECT_INTF: psz_module_type = "interface"; break;
-                    case VLC_OBJECT_PLAYLIST: psz_module_type = "playlist"; break;
-                    case VLC_OBJECT_ITEM: psz_module_type = "item"; break;
-                    case VLC_OBJECT_INPUT: psz_module_type = "input"; break;
-                    case VLC_OBJECT_DECODER: psz_module_type = "decoder"; break;
-                    case VLC_OBJECT_VOUT: psz_module_type = "video output"; break;
-                    case VLC_OBJECT_AOUT: psz_module_type = "audio output"; break;
-                    case VLC_OBJECT_SOUT: psz_module_type = "stream output"; break;
-                }
-   
-                if ( messagesView->LockLooper() )
-                {
-                   oldLength = messagesView->TextLength();
-                   BString string;
-                   string << p_sub->p_msg[i_start].psz_module << " " << psz_module_type << " : " <<
-                       p_sub->p_msg[i_start].psz_msg << "\n";
-                   messagesView->Insert( string.String() );
-                   messagesView->SetFontAndColor( oldLength,
-                                                  messagesView->TextLength(),
-                                                  NULL, 0, &color );
-                   messagesView->Draw( messagesView->Bounds() );
-                       messagesView->UnlockLooper();
-                }
-            
-                /* Scroll at the end */
-                if( scrollBar->LockLooper() )
-                {
-                    float min, max;
-                    scrollBar->GetRange( &min, &max );
-                    scrollBar->SetValue( max );
-                    scrollBar->UnlockLooper();
-                }
-            }
-
-            vlc_mutex_lock( p_sub->p_lock );
-            p_sub->i_start = i_start;
-            vlc_mutex_unlock( p_sub->p_lock );
-        }
-        /* Wait a bit */
-        msleep( INTF_IDLE_SLEEP );
-    }
-    return 0;
-}