[Title]add level combobox to select default log level
authorhyunsik.noh <hyunsik.noh@samsung.com>
Tue, 25 Sep 2012 08:42:11 +0000 (17:42 +0900)
committerhyunsik.noh <hyunsik.noh@samsung.com>
Tue, 25 Sep 2012 08:42:11 +0000 (17:42 +0900)
[Type]enhancement
[Module]common
[Redmine#]7075

Change-Id: If424a71e21c71b03590ca010483cc41e9285b82c

org.tizen.common.connection/src/org/tizen/common/connection/log/LogPanel.java
org.tizen.common.connection/src/org/tizen/common/connection/log/LogTab.java
org.tizen.common.connection/src/org/tizen/common/connection/ui/LogView.java

index b7c92fb..5e2e3c7 100755 (executable)
@@ -249,15 +249,41 @@ public class LogPanel extends Panel implements IDeviceChangeListener
     }
 
     /**
-     * When user selects level icons, set level values and filter messages.
+     * When user selects level icons, update level value and filter messages.
      * @param level level type(Debug, Info, Error..)
-     * @param setCheck is Checked or not
+     * @param beChecked is Checked or not
      */
-    public void setLevel(int level, boolean setCheck)
+    public void changeLogLevelAndFilterMessages(int level, boolean beChecked)
     {
-        int levelMode = getSelectionLogTab().getLevelMode();
-        level = (int) Math.pow(2, level);
+        updateLevelMode(level, beChecked);
+        getSelectionLogTab().filterMessages();
+    }
 
+    /**
+     * When default log level changed, update level values and filter messages.
+     * if info level is selected, levels under info priority(warning, error) should be checked
+     * and others should be unchecked
+     * @param index combo selection(0: verbose, 1: debug, ...)
+     * @param beChecked is Checked or not
+     */
+    private void checkLogLevelsAndFilterMessages(int index, boolean beChecked)
+    {
+        for(int i= 0; i < index ; i++)
+        {
+            updateLevelMode(i, !beChecked);
+        }
+        for(int i= index; i < LogLevel.values().length -1; i++)
+        {
+            updateLevelMode(i, beChecked);
+        }
+        getSelectionLogTab().filterMessages();
+    }
+    
+    private void updateLevelMode(int level, boolean setCheck)
+    {
+        level = (int) Math.pow(2, level);
+        int levelMode = getSelectionLogTab().getLevelMode();
+        
         if (setCheck)
         {
             levelMode |= level;
@@ -266,9 +292,7 @@ public class LogPanel extends Panel implements IDeviceChangeListener
         {
             levelMode &= (~level);
         }
-
         getSelectionLogTab().setLevelMode(levelMode);
-        getSelectionLogTab().filterMessages();
     }
 
     // create the logtab with default devices
@@ -938,9 +962,16 @@ public class LogPanel extends Panel implements IDeviceChangeListener
         }
 
         boolean check = getEnabled(state, ENABLE_LEVEL);
-        for (Action level : levelActions)
+        boolean[] bEnable = {false, false, false, false, false};
+        if(check)
+        {
+//            this.getSelectionLogTab().get
+            bEnable[2] = bEnable[3] =bEnable[4] = true;
+        }
+
+        for(int i = 0; i < levelActions.length; i++)
         {
-            level.setEnabled(check);
+            levelActions[i].setEnabled(bEnable[i]);
         }
     }
 
@@ -960,7 +991,7 @@ public class LogPanel extends Panel implements IDeviceChangeListener
         //Scroll lock action is toggle action
         viewActions[3].setChecked(tab.getScrollLock());
     }
-
+    
     /**
      * Get enabled state for action depending on a logTab type.
      */
@@ -1006,4 +1037,21 @@ public class LogPanel extends Panel implements IDeviceChangeListener
     {
         getSelectionLogTab().setScrollLock(lock);
     }
-}
\ No newline at end of file
+    
+    public void changeDefaultLevel(int index)
+    {
+        checkLogLevelsAndFilterMessages(index, true);
+        
+        //The difference is 2 between default combo value and level priority
+        int value = index + 2;
+
+        for(LogLevel level : LogLevel.values())
+        {
+            if(level.getPriority() == value)
+            {
+                getSelectionLogTab().restart(level);
+                break;
+            }
+        }
+    }
+}
index f76f1fb..c80ab30 100755 (executable)
@@ -58,8 +58,10 @@ public class LogTab
     public static final int FILTER_MESSAGE = 2;
 
     public static final int LEVEL_ALL = 0x1F;
+    public static final int LEVEL_DEFAULT = 0x1C;
+    private int levelMode = LEVEL_DEFAULT;
     
-    private int levelMode = LEVEL_ALL;
+    private static LogLevel DEFAULT_LOGLEVEL = LogLevel.INFO;
 
     //words to filter
     private String[] pidFilters = null;
@@ -242,10 +244,14 @@ public class LogTab
     {
         return table;
     }
-
+    
     public void start()
     {
+        start(DEFAULT_LOGLEVEL);
+    }
 
+    public void start(final LogLevel level)
+    {
         if (device != null)
         {
             // create a new output receiver
@@ -275,7 +281,7 @@ public class LogTab
 
                     try
                     {
-                        device.executeShellCommand("dlogutil -v long *:v", logReceiver, 0 /* timeout */); //$NON-NLS-1$
+                        device.executeShellCommand("dlogutil -v long *:" + level.getPriorityLetter(), logReceiver, 0 /* timeout */); //$NON-NLS-1$
                     } catch (Exception e)
                     {
                         Logger.error("LogTab", e);
@@ -301,6 +307,19 @@ public class LogTab
         }
     }
 
+    /**
+     * Stop current logger and start with new level
+     * It can be lost some log messages in time interval between stop and restart 
+     * @param level start logger with level
+     */
+    public void restart(LogLevel level)
+    {
+        IDevice old = device;
+        stop(true);
+        setDevice(old);
+        start(level);
+    }
+
     // add message to filtered message and replace old message to
     // new message
     public void addFilteredMessage(LogMessage newMessage, LogMessage oldMessage)
index aaf7200..323d177 100755 (executable)
 package org.tizen.common.connection.ui;
 
 import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ControlContribution;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.action.Separator;
+import org.eclipse.swt.SWT;
 import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.PlatformUI;
@@ -152,6 +158,7 @@ public final class LogView extends ViewPart
 
         LogLevel[] levels = LogLevel.values();
         logLevelActions = new Action[logLevelIcons.length];
+        boolean[] defaultState = {false, false, true, true, true, true};
         for (int i = 0; i < logLevelActions.length; i++)
         {
             String name = levels[i].getStringValue();
@@ -173,13 +180,13 @@ public final class LogView extends ViewPart
                                 {
                                     a.setChecked(a.isChecked());
                                 }
-                                logPanel.setLevel(i, a.isChecked());
+                                logPanel.changeLogLevelAndFilterMessages(i, a.isChecked());
                             }
                         }
                     }
                 }
             };
-            logLevelActions[i].setChecked(true);
+            logLevelActions[i].setChecked(defaultState[i]);
             logLevelActions[i].setToolTipText(name);
             logLevelActions[i].setImageDescriptor(ConnectionPlugin.getImageDescriptorFromPlugin(logLevelIcons[i]));
         }
@@ -256,6 +263,8 @@ public final class LogView extends ViewPart
 
         // and then in the toolbar
         IToolBarManager toolBarManager = actionBars.getToolBarManager();
+        LevelCombo levelCombo = new LevelCombo();
+        toolBarManager.add(levelCombo);
         toolBarManager.add(new Separator());
         for (Action a : logLevelActions)
         {
@@ -272,9 +281,78 @@ public final class LogView extends ViewPart
         toolBarManager.add(clearAction);
         toolBarManager.add(new Separator());
     }
+    
+    public void setLevelActionEnable()
+    {
+        
+    }
 
     public LogPanel getPanel()
     {
         return logPanel;
     }
+    
+    private void setLogLevelActionState(Action level, boolean state)
+    {
+        level.setEnabled(state);
+        level.setChecked(state);
+    }
+    
+    public class LevelCombo extends ControlContribution {
+
+        Combo combo;
+        public LevelCombo()
+        {
+            super(null);
+        }
+
+        @Override
+        protected Control createControl(Composite parent)
+        {
+            combo = new Combo(parent, SWT.NONE | SWT.DROP_DOWN | SWT.READ_ONLY);
+            
+            LogLevel[] levels = LogLevel.values();
+            //0: verbose
+            //1: debug
+            //2: info
+            //3: warning
+            //4: error
+            //5: assert - not use
+            for(int i = 0; i < levels.length -1; i++)
+            {
+                combo.add( levels[i].getStringValue());
+            }
+
+            combo.setTextLimit(10);
+            //info is a default setting 
+            combo.select(2);
+            combo.addSelectionListener(new SelectionListener()
+            {
+
+                public void widgetSelected(SelectionEvent e)
+                {
+                    Combo combo = (Combo) e.widget;
+                    int index = combo.getSelectionIndex();
+                    
+                    for (int i = 0; i < logLevelActions.length; i++)
+                    {
+                        setLogLevelActionState(logLevelActions[i], i >= index);
+                    }
+                    getPanel().changeDefaultLevel(index);
+                }
+
+                @Override
+                public void widgetDefaultSelected(SelectionEvent e)
+                {}
+            });
+
+            return combo;
+        }
+
+        public void setValue(int index)
+        {
+            combo.select(index);
+        }
+
+    }
 }
\ No newline at end of file