diff mbox

[v2] ui/cocoa.m: fix help menus

Message ID 7496E78D-73BB-464E-929D-9F93E18FF179@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Programmingkid March 7, 2016, 4:03 p.m. UTC
Make the help menus actually work. The code will search thru three different
locations for the help file. If it can't be found, it will look on the web for
it.

Signed-off-by: John Arbuckle <programmingkidx@gmail.com>

---
Moved opening code to one method. 
Searches three different locations on the user's computer first.
Attempts to open file on web if file can't be found on user's computer.

 ui/cocoa.m | 37 +++++++++++++++++++++++++++++++++----
 1 file changed, 33 insertions(+), 4 deletions(-)

Comments

Peter Maydell March 15, 2016, 5:16 p.m. UTC | #1
On 7 March 2016 at 16:03, Programmingkid <programmingkidx@gmail.com> wrote:
> Make the help menus actually work. The code will search thru three different
> locations for the help file. If it can't be found, it will look on the web for
> it.
>
> Signed-off-by: John Arbuckle <programmingkidx@gmail.com>
>
> ---
> Moved opening code to one method.
> Searches three different locations on the user's computer first.
> Attempts to open file on web if file can't be found on user's computer.
>
>  ui/cocoa.m | 37 +++++++++++++++++++++++++++++++++----
>  1 file changed, 33 insertions(+), 4 deletions(-)
>
> diff --git a/ui/cocoa.m b/ui/cocoa.m
> index 3ee5549..66f0f79 100644
> --- a/ui/cocoa.m
> +++ b/ui/cocoa.m
> @@ -858,6 +858,7 @@ QemuCocoaView *cocoaView;
>  - (void)ejectDeviceMedia:(id)sender;
>  - (void)changeDeviceMedia:(id)sender;
>  - (BOOL)verifyQuit;
> +- (void)openDocumentation:(NSString *)filename;
>  @end
>
>  @implementation QemuCocoaAppController
> @@ -994,20 +995,48 @@ QemuCocoaView *cocoaView;
>      [cocoaView toggleFullScreen:sender];
>  }
>
> +/* Tries to find then open the specified filename */
> +- (void) openDocumentation: (NSString *) filename
> +{
> +    /* Where to look for local files */
> +    NSString *path_array[] = {@"../share/doc/qemu/", @"../doc/qemu/", @"../"};
> +    NSString *full_file_path;
> +    const int number_of_paths = 3;

You should be able to use ARRAY_SIZE(path_array) here, you don't
need to hard code the 3.

> +
> +    /* iterate thru the possible paths until the file is found */
> +    int index;
> +    for (index = 0; index < number_of_paths; index++) {
> +        full_file_path = [[NSBundle mainBundle] executablePath];
> +        full_file_path = [full_file_path stringByDeletingLastPathComponent];
> +        full_file_path = [NSString stringWithFormat: @"%@/%@%@", full_file_path,
> +                          path_array[index], filename];
> +        if ([[NSWorkspace sharedWorkspace] openFile: full_file_path] == YES) {
> +            return;
> +        }
> +    }
> +
> +    /* Try to open the file on the web if possible */
> +    full_file_path = [NSString stringWithFormat: @"%s%@",
> +                      "http://qemu.weilnetz.de/", filename];

None of our other UI frontends try to look up the docs on the web.
If we do want to do this we should be using a qemu-project.org URL,
ie one we control directly as a project. Plus there's no versioning
here so it will show the docs for the latest version even if you're
running an old QEMU.

Adding a URL lookup should be a different patch if you want to do
it, but I don't think it is worth the effort of maintaining versioned
documentation on the web for all future QEMU releases, when the
local files should be right there anyway.

> +    NSURL *url = [NSURL URLWithString: full_file_path];
> +    if ([[NSWorkspace sharedWorkspace] openURL: url] == NO) {
> +        NSBeep();
> +        QEMU_Alert(@"Failed to open file");
> +    }
> +}
> +
>  - (void)showQEMUDoc:(id)sender
>  {
>      COCOA_DEBUG("QemuCocoaAppController: showQEMUDoc\n");
>
> -    [[NSWorkspace sharedWorkspace] openFile:[NSString stringWithFormat:@"%@/../doc/qemu/qemu-doc.html",
> -        [[NSBundle mainBundle] resourcePath]] withApplication:@"Help Viewer"];
> +    [self openDocumentation: @"qemu-doc.html"];
>  }
>
>  - (void)showQEMUTec:(id)sender
>  {
>      COCOA_DEBUG("QemuCocoaAppController: showQEMUTec\n");
>
> -    [[NSWorkspace sharedWorkspace] openFile:[NSString stringWithFormat:@"%@/../doc/qemu/qemu-tech.html",
> -        [[NSBundle mainBundle] resourcePath]] withApplication:@"Help Viewer"];
> +    [self openDocumentation: @"qemu-tech.html"];
>  }
>
>  /* Stretches video to fit host monitor size */

thanks
-- PMM
diff mbox

Patch

diff --git a/ui/cocoa.m b/ui/cocoa.m
index 3ee5549..66f0f79 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -858,6 +858,7 @@  QemuCocoaView *cocoaView;
 - (void)ejectDeviceMedia:(id)sender;
 - (void)changeDeviceMedia:(id)sender;
 - (BOOL)verifyQuit;
+- (void)openDocumentation:(NSString *)filename;
 @end
 
 @implementation QemuCocoaAppController
@@ -994,20 +995,48 @@  QemuCocoaView *cocoaView;
     [cocoaView toggleFullScreen:sender];
 }
 
+/* Tries to find then open the specified filename */
+- (void) openDocumentation: (NSString *) filename
+{
+    /* Where to look for local files */
+    NSString *path_array[] = {@"../share/doc/qemu/", @"../doc/qemu/", @"../"};
+    NSString *full_file_path;
+    const int number_of_paths = 3;
+
+    /* iterate thru the possible paths until the file is found */
+    int index;
+    for (index = 0; index < number_of_paths; index++) {
+        full_file_path = [[NSBundle mainBundle] executablePath];
+        full_file_path = [full_file_path stringByDeletingLastPathComponent];
+        full_file_path = [NSString stringWithFormat: @"%@/%@%@", full_file_path,
+                          path_array[index], filename];
+        if ([[NSWorkspace sharedWorkspace] openFile: full_file_path] == YES) {
+            return;
+        }
+    }
+
+    /* Try to open the file on the web if possible */
+    full_file_path = [NSString stringWithFormat: @"%s%@",
+                      "http://qemu.weilnetz.de/", filename];
+    NSURL *url = [NSURL URLWithString: full_file_path];
+    if ([[NSWorkspace sharedWorkspace] openURL: url] == NO) {
+        NSBeep();
+        QEMU_Alert(@"Failed to open file");
+    }
+}
+
 - (void)showQEMUDoc:(id)sender
 {
     COCOA_DEBUG("QemuCocoaAppController: showQEMUDoc\n");
 
-    [[NSWorkspace sharedWorkspace] openFile:[NSString stringWithFormat:@"%@/../doc/qemu/qemu-doc.html",
-        [[NSBundle mainBundle] resourcePath]] withApplication:@"Help Viewer"];
+    [self openDocumentation: @"qemu-doc.html"];
 }
 
 - (void)showQEMUTec:(id)sender
 {
     COCOA_DEBUG("QemuCocoaAppController: showQEMUTec\n");
 
-    [[NSWorkspace sharedWorkspace] openFile:[NSString stringWithFormat:@"%@/../doc/qemu/qemu-tech.html",
-        [[NSBundle mainBundle] resourcePath]] withApplication:@"Help Viewer"];
+    [self openDocumentation: @"qemu-tech.html"];
 }
 
 /* Stretches video to fit host monitor size */