macosx: Revive error panel for error and warning messages
authorDavid Fuhrmann <dfuhrmann@videolan.org>
Fri, 14 Apr 2017 10:27:27 +0000 (12:27 +0200)
committerDavid Fuhrmann <dfuhrmann@videolan.org>
Fri, 14 Apr 2017 10:34:00 +0000 (12:34 +0200)
VLC needs a list of errors as multiple errors can occur at the
same time.
This revives the existing error panel from
e3f2ec3e00f68f6dad9ea5ab732b7397a1b9891f.

refs #17262

extras/package/macosx/VLC.xcodeproj/project.pbxproj
modules/gui/macosx/Makefile.am
modules/gui/macosx/UI/ErrorPanel.xib [new file with mode: 0644]
modules/gui/macosx/UI/MainMenu.xib
modules/gui/macosx/VLCCoreDialogProvider.h
modules/gui/macosx/VLCCoreDialogProvider.m
modules/gui/macosx/VLCErrorWindowController.h [new file with mode: 0644]
modules/gui/macosx/VLCErrorWindowController.m [new file with mode: 0644]
modules/gui/macosx/VLCMainMenu.h
modules/gui/macosx/VLCMainMenu.m
po/POTFILES.in

index a323e05..23456d5 100644 (file)
                1C3114281E508D1B00D4DD76 /* VLCFullScreenPanel.xib in Sources */ = {isa = PBXBuildFile; fileRef = 6B8224181E4D2A9000833BE1 /* VLCFullScreenPanel.xib */; };
                1C3114291E508D1B00D4DD76 /* VLCRendererDialog.xib in Sources */ = {isa = PBXBuildFile; fileRef = 6B8224191E4D2A9000833BE1 /* VLCRendererDialog.xib */; };
                1C31142A1E508D1B00D4DD76 /* VLCStatusBarIconMainMenu.xib in Sources */ = {isa = PBXBuildFile; fileRef = 6B82241A1E4D2A9000833BE1 /* VLCStatusBarIconMainMenu.xib */; };
+               1CFE8D591EA0D42A00E94451 /* VLCErrorWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CFE8D581EA0D42A00E94451 /* VLCErrorWindowController.m */; };
                6B3BE42C1E6217CB008D098A /* VLCHUDImageButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B3BE42B1E6217CB008D098A /* VLCHUDImageButton.m */; };
                6B3BE4321E621F24008D098A /* VLCHUDToggleButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B3BE4311E621F24008D098A /* VLCHUDToggleButton.m */; };
                6B4D50901E79781F004479B5 /* VLCHotkeyChangeWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B4D508F1E79781F004479B5 /* VLCHotkeyChangeWindow.m */; };
                1CCB5F2F1A62A6A5004C3E90 /* Pseudo-VLC.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Pseudo-VLC.app"; sourceTree = BUILT_PRODUCTS_DIR; };
                1CD366791B7A242E0054E39F /* VLCTimeSelectionPanelController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCTimeSelectionPanelController.h; sourceTree = "<group>"; };
                1CD3667A1B7A242E0054E39F /* VLCTimeSelectionPanelController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCTimeSelectionPanelController.m; sourceTree = "<group>"; };
+               1CFE8D561EA0D3D300E94451 /* ErrorPanel.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ErrorPanel.xib; sourceTree = "<group>"; };
+               1CFE8D571EA0D42A00E94451 /* VLCErrorWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCErrorWindowController.h; sourceTree = "<group>"; };
+               1CFE8D581EA0D42A00E94451 /* VLCErrorWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCErrorWindowController.m; sourceTree = "<group>"; };
                5CCED71014C0D4A90057F8D1 /* VLCExtensionsDialogProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCExtensionsDialogProvider.h; sourceTree = "<group>"; };
                5CCED71114C0D4A90057F8D1 /* VLCExtensionsDialogProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCExtensionsDialogProvider.m; sourceTree = "<group>"; };
                5CCED71214C0D4A90057F8D1 /* VLCExtensionsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCExtensionsManager.h; sourceTree = "<group>"; };
                                1C67C8A71D58C0A40079E1C1 /* VLCAboutWindowController.m */,
                                1C67C8A31D58C0980079E1C1 /* VLCHelpWindowController.h */,
                                1C67C8A41D58C0980079E1C1 /* VLCHelpWindowController.m */,
+                               1CFE8D571EA0D42A00E94451 /* VLCErrorWindowController.h */,
+                               1CFE8D581EA0D42A00E94451 /* VLCErrorWindowController.m */,
                                7DF0435E1972E26A0022B534 /* VLCAddonListItem.h */,
                                7DF0435F1972E26A0022B534 /* VLCAddonListItem.m */,
                                7DB65D5218ABD6380053B874 /* VLCAddonsWindowController.h */,
                                6B8224031E4D2A9000833BE1 /* ConvertAndSave.xib */,
                                6B8224041E4D2A9000833BE1 /* CoreDialogs.xib */,
                                6B8224051E4D2A9000833BE1 /* DetachedVideoWindow.xib */,
+                               1CFE8D561EA0D3D300E94451 /* ErrorPanel.xib */,
                                6B8224061E4D2A9000833BE1 /* FSPanel.xib */,
                                6B8224071E4D2A9000833BE1 /* Help.xib */,
                                6B8224081E4D2A9000833BE1 /* LogMessageWindow.xib */,
                                        };
                                };
                        };
-                       buildConfigurationList = C2F2A6EA09588F1B00018C74 /* Build configuration list for PBXProject "VLC" */;
+                       buildConfigurationList = C2F2A6EA09588F1B00018C74 /* Build configuration list for PBXProject "vlc" */;
                        compatibilityVersion = "Xcode 3.2";
                        developmentRegion = English;
                        hasScannedForEncodings = 1;
                                1C31142A1E508D1B00D4DD76 /* VLCStatusBarIconMainMenu.xib in Sources */,
                                1C3114021E508C8800D4DD76 /* AppleRemote.h in Sources */,
                                1C3114031E508C8800D4DD76 /* AppleRemote.m in Sources */,
+                               1CFE8D591EA0D42A00E94451 /* VLCErrorWindowController.m in Sources */,
                                1C3114041E508C8800D4DD76 /* SideBarItem.h in Sources */,
                                1C3114051E508C8800D4DD76 /* SideBarItem.m in Sources */,
                                6B4D50961E7A7D16004479B5 /* NSSound+VLCAdditions.m in Sources */,
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Default;
                };
-               C2F2A6EA09588F1B00018C74 /* Build configuration list for PBXProject "VLC" */ = {
+               C2F2A6EA09588F1B00018C74 /* Build configuration list for PBXProject "vlc" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                                C2F2A6EB09588F1B00018C74 /* Development */,
index 7e4f74a..e73345e 100644 (file)
@@ -32,6 +32,7 @@ libmacosx_plugin_la_SOURCES = \
        VLCMainWindowControlsBar.m VLCMainWindowControlsBar.h \
        VLCConvertAndSaveWindowController.h VLCConvertAndSaveWindowController.m \
        VLCCoreInteraction.h VLCCoreInteraction.m \
+       VLCErrorWindowController.h VLCErrorWindowController.m \
        VLCExtensionsDialogProvider.h VLCExtensionsDialogProvider.m \
        VLCExtensionsManager.h VLCExtensionsManager.m \
        VLCHelpWindowController.h VLCHelpWindowController.m \
@@ -106,6 +107,7 @@ nobase_libmacosx_plugin_la_DATA = \
        UI/ConvertAndSave.nib \
        UI/CoreDialogs.nib \
        UI/DetachedVideoWindow.nib \
+       UI/ErrorPanel.nib \
        UI/FSPanel.nib \
        UI/Help.nib \
        UI/LogMessageWindow.nib \
@@ -136,6 +138,7 @@ libmacosx_plugin_la_SOURCES += \
        UI/ConvertAndSave.xib \
        UI/CoreDialogs.xib \
        UI/DetachedVideoWindow.xib \
+       UI/ErrorPanel.xib \
        UI/FSPanel.xib \
        UI/Help.xib \
        UI/LogMessageWindow.xib \
diff --git a/modules/gui/macosx/UI/ErrorPanel.xib b/modules/gui/macosx/UI/ErrorPanel.xib
new file mode 100644 (file)
index 0000000..9a33498
--- /dev/null
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10117" systemVersion="15G1421" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
+    <dependencies>
+        <deployment version="1060" identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10117"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="VLCErrorWindowController">
+            <connections>
+                <outlet property="o_cleanup_button" destination="11" id="13"/>
+                <outlet property="o_error_table" destination="8" id="12"/>
+                <outlet property="window" destination="5" id="75"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application"/>
+        <window title="Errors and Warnings" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="ErrorsAndWarnings" animationBehavior="default" id="5" userLabel="Non-Blocking errors" customClass="NSPanel">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" utility="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="304" y="373" width="397" height="209"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1680" height="1027"/>
+            <value key="minSize" type="size" width="260" height="120"/>
+            <view key="contentView" id="6">
+                <rect key="frame" x="0.0" y="0.0" width="397" height="209"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <scrollView autohidesScrollers="YES" horizontalLineScroll="47" horizontalPageScroll="10" verticalLineScroll="47" verticalPageScroll="10" usesPredominantAxisScrolling="NO" id="7">
+                        <rect key="frame" x="0.0" y="39" width="398" height="170"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <clipView key="contentView" id="vJx-40-Cca">
+                            <rect key="frame" x="1" y="1" width="396" height="168"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="45" id="8">
+                                    <rect key="frame" x="0.0" y="0.0" width="396" height="168"/>
+                                    <autoresizingMask key="autoresizingMask"/>
+                                    <size key="intercellSpacing" width="3" height="2"/>
+                                    <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
+                                    <tableColumns>
+                                        <tableColumn identifier="icon" editable="NO" width="45" minWidth="32" maxWidth="1000" id="9">
+                                            <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="center" title="icons">
+                                                <font key="font" metaFont="smallSystem"/>
+                                                <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
+                                            </tableHeaderCell>
+                                            <imageCell key="dataCell" refusesFirstResponder="YES" alignment="left" animates="YES" imageScaling="proportionallyDown" id="18"/>
+                                            <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
+                                        </tableColumn>
+                                        <tableColumn identifier="error_msg" width="344.99560000000002" minWidth="39.995609999999999" maxWidth="1000" id="10">
+                                            <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="errors">
+                                                <font key="font" metaFont="smallSystem"/>
+                                                <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" white="0.33333299" alpha="1" colorSpace="calibratedWhite"/>
+                                            </tableHeaderCell>
+                                            <textFieldCell key="dataCell" selectable="YES" editable="YES" alignment="left" id="23">
+                                                <font key="font" metaFont="smallSystem"/>
+                                                <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                            <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
+                                        </tableColumn>
+                                    </tableColumns>
+                                    <connections>
+                                        <outlet property="dataSource" destination="-2" id="16"/>
+                                        <outlet property="delegate" destination="-2" id="17"/>
+                                    </connections>
+                                </tableView>
+                            </subviews>
+                            <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </clipView>
+                        <scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="74">
+                            <rect key="frame" x="1" y="-30" width="381" height="15"/>
+                            <autoresizingMask key="autoresizingMask"/>
+                        </scroller>
+                        <scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="73">
+                            <rect key="frame" x="-30" y="1" width="15" height="168"/>
+                            <autoresizingMask key="autoresizingMask"/>
+                        </scroller>
+                    </scrollView>
+                    <button verticalHuggingPriority="750" id="11">
+                        <rect key="frame" x="15" y="7" width="94" height="28"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <buttonCell key="cell" type="push" title="Clean up" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" inset="2" id="71">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="smallSystem"/>
+                        </buttonCell>
+                        <connections>
+                            <action selector="cleanupTable:" target="-2" id="15"/>
+                        </connections>
+                    </button>
+                </subviews>
+            </view>
+        </window>
+    </objects>
+</document>
index bca91fd..3bcfccf 100644 (file)
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11542" systemVersion="15G1108" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10117" systemVersion="15G1421" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
     <dependencies>
         <deployment identifier="macosx"/>
         <development version="7000" identifier="xcode"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11542"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10117"/>
     </dependencies>
     <objects>
         <customObject id="-2" userLabel="File's Owner" customClass="VLCMainMenu">
@@ -50,6 +50,7 @@
                 <outlet property="donation" destination="2298" id="ZzJ-yC-jOi"/>
                 <outlet property="double_window" destination="1171" id="DIg-sW-WS6"/>
                 <outlet property="editMenu" destination="205" id="6Mt-eK-QAx"/>
+                <outlet property="errorsAndWarnings" destination="n1B-wa-XGR" id="gNg-1z-gua"/>
                 <outlet property="extensions" destination="4942" id="qSU-2W-Chy"/>
                 <outlet property="extensionsMenu" destination="4943" id="IAw-5Z-Wvo"/>
                 <outlet property="fileMenu" destination="81" id="lbA-s5-6qj"/>
                             <menuItem isSeparatorItem="YES" id="2394">
                                 <modifierMask key="keyEquivalentModifierMask" command="YES"/>
                             </menuItem>
+                            <menuItem title="Errors and Warnings" keyEquivalent="m" id="n1B-wa-XGR">
+                                <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
+                                <connections>
+                                    <action selector="showErrorsAndWarnings:" target="-2" id="4xx-kx-Wxo"/>
+                                </connections>
+                            </menuItem>
                             <menuItem title="Messages..." keyEquivalent="M" id="1003">
                                 <connections>
                                     <action selector="showMessagesPanel:" target="-2" id="Suq-dt-QZE"/>
index d074c08..211b4ee 100644 (file)
@@ -30,6 +30,8 @@
  * VLCCoreDialogProvider interface
  *****************************************************************************/
 
+@class VLCErrorWindowController;
+
 @interface VLCCoreDialogProvider : NSObject
 {
     /* authentication dialog */
@@ -52,6 +54,8 @@
     IBOutlet NSWindow *progressWindow;
 }
 
+@property (readonly) VLCErrorWindowController* errorPanel;
+
 @property (atomic,readwrite) BOOL progressCancelled;
 
 - (IBAction)authenticationDialogAction:(id)sender;
index 49cbfe4..1ed2fa6 100644 (file)
@@ -26,6 +26,8 @@
 #import "VLCCoreDialogProvider.h"
 #import "misc.h"
 
+#import "VLCErrorWindowController.h"
+
 /* for the icon in our custom error panel */
 #import <ApplicationServices/ApplicationServices.h>
 
@@ -153,6 +155,8 @@ static void updateProgressCallback(void *p_data,
         msg_Dbg(getIntf(), "Register dialog provider");
         [NSBundle loadNibNamed:@"CoreDialogs" owner: self];
 
+        _errorPanel = [[VLCErrorWindowController alloc] init];
+
         intf_thread_t *p_intf = getIntf();
         /* subscribe to various interactive dialogues */
 
@@ -194,13 +198,8 @@ static void updateProgressCallback(void *p_data,
 
 - (void)displayError:(NSArray *)dialogData
 {
-    NSAlert *alert = [NSAlert alertWithMessageText:[dialogData objectAtIndex:0]
-                                     defaultButton:_NS("OK")
-                                   alternateButton:nil
-                                       otherButton:nil
-                         informativeTextWithFormat:@"%@", [dialogData objectAtIndex:1]];
-    [alert setAlertStyle:NSCriticalAlertStyle];
-    [alert runModal];
+    [_errorPanel showWindow:nil];
+    [_errorPanel addError:[dialogData objectAtIndex:0] withMsg:[dialogData objectAtIndex:1]];
 }
 
 - (void)displayLoginDialog:(NSArray *)dialogData
diff --git a/modules/gui/macosx/VLCErrorWindowController.h b/modules/gui/macosx/VLCErrorWindowController.h
new file mode 100644 (file)
index 0000000..d01a545
--- /dev/null
@@ -0,0 +1,40 @@
+/*****************************************************************************
+ * HelpWindowController.h
+ *****************************************************************************
+ * Copyright (C) 2017 VLC authors and VideoLAN
+ * $Id$
+ *
+ * Authors: Derk-Jan Hartman <thedj@users.sourceforge.net>
+ *          Felix Paul Kühne <fkuehne -at- videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+
+@interface VLCErrorWindowController : NSWindowController
+{
+    IBOutlet id o_cleanup_button;
+    IBOutlet id o_error_table;
+
+    NSMutableArray *o_errors;
+    NSMutableArray *o_icons;
+}
+
+- (IBAction)cleanupTable:(id)sender;
+
+-(void)addError:(NSString *)o_error withMsg:(NSString *)o_msg;
+
+@end
diff --git a/modules/gui/macosx/VLCErrorWindowController.m b/modules/gui/macosx/VLCErrorWindowController.m
new file mode 100644 (file)
index 0000000..4bbf9ab
--- /dev/null
@@ -0,0 +1,96 @@
+/*****************************************************************************
+ * HelpWindowController.m
+ *****************************************************************************
+ * Copyright (C) 2017 VLC authors and VideoLAN
+ * $Id$
+ *
+ * Authors: Derk-Jan Hartman <thedj@users.sourceforge.net>
+ *          Felix Paul Kühne <fkuehne -at- videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import "VLCErrorWindowController.h"
+
+#import "VLCStringUtility.h"
+
+@implementation VLCErrorWindowController
+
+- (id)init
+{
+    self = [super initWithWindowNibName:@"ErrorPanel"];
+    if (self) {
+        /* init data sources */
+        o_errors = [[NSMutableArray alloc] init];
+        o_icons = [[NSMutableArray alloc] init];
+    }
+
+    return self;
+}
+
+- (void)windowDidLoad
+{
+    /* init strings */
+    [[self window] setTitle: _NS("Errors and Warnings")];
+    [o_cleanup_button setTitle: _NS("Clean up")];
+}
+
+-(void)addError: (NSString *)o_error withMsg:(NSString *)o_msg
+{
+    /* format our string as desired */
+    NSMutableAttributedString * ourError;
+    ourError = [[NSMutableAttributedString alloc] initWithString:
+                [NSString stringWithFormat:@"%@\n%@", o_error, o_msg]
+                                                      attributes:
+                [NSDictionary dictionaryWithObject: [NSFont systemFontOfSize:11] forKey: NSFontAttributeName]];
+    [ourError
+     addAttribute: NSFontAttributeName
+     value: [NSFont boldSystemFontOfSize:11]
+     range: NSMakeRange(0, [o_error length])];
+    [o_errors addObject: ourError];
+
+    [o_icons addObject: [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kAlertStopIcon)]];
+
+    [o_error_table reloadData];
+}
+
+-(IBAction)cleanupTable:(id)sender
+{
+    [o_errors removeAllObjects];
+    [o_icons removeAllObjects];
+    [o_error_table reloadData];
+}
+
+/*----------------------------------------------------------------------------
+ * data source methods
+ *---------------------------------------------------------------------------*/
+- (NSInteger)numberOfRowsInTableView:(NSTableView *)theDataTable
+{
+    return [o_errors count];
+}
+
+- (id)tableView:(NSTableView *)theDataTable objectValueForTableColumn:
+(NSTableColumn *)theTableColumn row: (NSInteger)row
+{
+    if ([[theTableColumn identifier] isEqualToString: @"error_msg"])
+        return [o_errors objectAtIndex:row];
+
+    if ([[theTableColumn identifier] isEqualToString: @"icon"])
+        return [o_icons objectAtIndex:row];
+
+    return @"";
+}
+
+@end
index 167412b..36a69dd 100644 (file)
 @property (readwrite, weak) IBOutlet NSMenuItem *bookmarks;
 @property (readwrite, weak) IBOutlet NSMenuItem *playlist;
 @property (readwrite, weak) IBOutlet NSMenuItem *info;
+@property (readwrite, weak) IBOutlet NSMenuItem *errorsAndWarnings;
 @property (readwrite, weak) IBOutlet NSMenuItem *messages;
 @property (readwrite, weak) IBOutlet NSMenuItem *bring_atf;
 
 @property (readwrite, weak) IBOutlet NSMenuItem *website;
 @property (readwrite, weak) IBOutlet NSMenuItem *donation;
 @property (readwrite, weak) IBOutlet NSMenuItem *forum;
-@property (readwrite, weak) IBOutlet NSMenuItem *errorsAndWarnings;
 
 /* dock menu */
 @property (readwrite, weak) IBOutlet NSMenuItem *dockMenuplay;
 - (IBAction)openWebsite:(id)sender;
 - (IBAction)openForum:(id)sender;
 - (IBAction)openDonate:(id)sender;
+- (IBAction)showErrorsAndWarnings:(id)sender;
 - (IBAction)showMessagesPanel:(id)showMessagesPanel;
 - (IBAction)showMainWindow:(id)sender;
 - (IBAction)showPlaylist:(id)sender;
index 7264ed7..e0281d4 100644 (file)
@@ -31,6 +31,7 @@
 #import "VLCAboutWindowController.h"
 #import "VLCOpenWindowController.h"
 #import "VLCAudioEffectsWindowController.h"
+#import "VLCErrorWindowController.h"
 #import "VLCTrackSynchronizationWindowController.h"
 #import "VLCHelpWindowController.h"
 #import "VLCVideoEffectsWindowController.h"
@@ -39,6 +40,7 @@
 #import "VLCPlaylist.h"
 #import "VLCPlaylistInfo.h"
 #import "VLCVoutView.h"
+#import "VLCCoreDialogProvider.h"
 #import "VLCCoreInteraction.h"
 #import "VLCMainWindow.h"
 #import "VLCMainWindowControlsBar.h"
     [_addonsController showWindow:self];
 }
 
+- (IBAction)showErrorsAndWarnings:(id)sender
+{
+    [[[[VLCMain sharedInstance] coreDialogProvider] errorPanel] showWindow:self];
+}
+
 - (IBAction)showMessagesPanel:(id)showMessagesPanel
 {
     [[[VLCMain sharedInstance] debugMsgPanel] showWindow:self];
index 0281098..a07b215 100644 (file)
@@ -543,6 +543,8 @@ modules/gui/macosx/VLCCoreDialogProvider.h
 modules/gui/macosx/VLCCoreDialogProvider.m
 modules/gui/macosx/VLCCoreInteraction.h
 modules/gui/macosx/VLCCoreInteraction.m
+modules/gui/macosx/VLCErrorWindowController.h
+modules/gui/macosx/VLCErrorWindowController.m
 modules/gui/macosx/VLCExtensionsDialogProvider.h
 modules/gui/macosx/VLCExtensionsDialogProvider.m
 modules/gui/macosx/VLCExtensionsManager.h