[OGo-Developer] print view for task lists

Sebastian Reitenbach developer@opengroupware.org
Mon, 13 Nov 2006 11:05:09 -0000


Hi all,

I added a printview to task lists, which works well for LSWProjectJobList, but 
not for LSWJobs. When I enter the printMode (a BOOL defined in LSWJobs) by 
first clicking the print button, it stays forever in print mode. So when I 
then click hte "Tasks" menu entry, in the Dock, it enters LSWJobs, but will 
open it in printMode.
I created an enhancement report for it, with my patch:
http://bugzilla.opengroupware.org/bugzilla/show_bug.cgi?id=1807

yesterday afternoon I sat there for hours, trying to figure out, how to get 
the normal mode back.

below are my notes, that I have made, after I created the patch.

any hint on how I can I stop LSWJobs from thinking it has printMode = YES?

kind regards
Sebastian

Preparations in Objective-C backend
- LSWJobs.m needs to be divided into a .m and .h file, interface in the .h 
  file, and including the .h file in the .m file
- the LSWJobs.h file needs to declare a BOOL for printMode, and the LSWJobs.m 
  file has to implement the print methods:
======================================================
/* printing */

- (BOOL)printMode {
  return self->printMode ? YES : NO;
}
- (void)setPrintMode:(BOOL)_printMode {
  self->printMode = _printMode;
}

- (id)printList {
  WOResponse    *r;
  OGoComponent          *page;

  page = [self pageWithName:@"LSWPrintJobs"];
  [page takeValue:self->filteredJobList      forKey:@"filteredJobList"];
  [page takeValue:self->job     forKey:@"job"];
  [page takeValue:self->subJob  forKey:@"subJob"];
  [page takeValue:self->selectedAttribute       forKey:@"selectedAttribute"];
  [page takeValue:self->tabKey  forKey:@"tabKey"];
  [page takeValue:self->keywordsString  forKey:@"keywordsString"];
  [page takeValue:self->timeSelection   forKey:@"timeSelection"];
  [page takeValue:self->item    forKey:@"item"];
  [page takeValue:self->teams   forKey:@"teams"];
  [page takeValue:self->timeList        forKey:@"timeList"];
  [page takeValue:self->selectedTeam    forKey:@"selectedTeam"];
  r = [page generateResponse];
  [r setHeader:@"text/html" forKey:@"content-type"];

  return r;
}
======================================================
- LSWPrintJobs.m class needs to be created, inheriting from LSWJobs.h, not 
  adding anything to LSWJobs, including
======================================================
#include "LSWJobs.h"

@interface LSWPrintJobs : LSWJobs
{
}
@end

#include <NGMime/NGMimeType.h>
#include "common.h"
@implementation LSWPrintJobs
@end /* LSWPrintJobs */
======================================================
- add the LSWPrintJobs.m file in the GNUmakefile to the files to be compiled
- add the LSWPrintJobs class to the bundle-info.plist file, and add the print
  view there
======================================================
      {
        verb      = print;
        type      = "eo/job";
        component = LSWPrintJobs
      },
======================================================
- add a LSWPrintJobs.wox file in the Templates/JobUi directory:
======================================================
<?xml version='1.0' encoding="iso-8859-1" standalone="yes" ?>
<OGo:container
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:var="http://www.skyrix.com/od/binding"
  xmlns:const="http://www.skyrix.com/od/constant"
  xmlns:OGo="http://www.opengroupware.org/ns/wox/ogo"
>
  <!-- TODO: can we use <OGo:page-head> ? => different color/clash with tv -->
  <html>
  <head></head>
  <body bgcolor="white" text="black" onload="javascript:window.print()">
  <var:component className="LSWJobs"
    labels="labels"
    filteredJobList="filteredJobList"
    job="job"
    subJob="subJob"
    selectedAttribute="selectedAttribute"
    tabKey="tabKey"
    keywordsString="keywordsString"
    timeSelection="timeSelection"
    item="item"
    teams="teams"
    timeList="timeList"
    selectedTeam="selectedTeam"
    const:printMode="1" />
  </body>
  </html>
</OGo:container>
======================================================
- the LSWJobs.wod template connector has to be changed:
======================================================
Buttons: SkyButtonRow {
  ordering = ( print, new );
  onNew    = newJob;
  new      = labels.new;
  tipNew   = labels.new;

  onPrint     = printList;
  print       = labels.print;
  targetPrint = "OGoPrintView";

}
IsPrintMode: WOConditional {
  condition = printMode;
  negate = NO;
}
IsNotPrintMode: WOConditional {
  condition = printMode;
  negate = YES;
}
====================================================
- the LSWJobs.html template has to be changed to allow printMode:
<#IsNotPrintMode>
  ... old version ...
</#IsNotPrintMode>
<#IsPrintMode>
      <table width="100%" border="0" cellpadding="0" cellspacing="0">
        <tr>
          <td>
            <#TabView>
              <#TodoTab>
                <#ToDoList></#ToDoList>
              </#TodoTab>

              <#DelegateTab>
                <#DelegatedJobList></#DelegatedJobList>
              </#DelegateTab>

              <#ArchivedTab>
                <#ArchivedJobList/>
              </#ArchivedTab>

              <#IsPreferredExecutantEnabled>
                <#PreferredExecutantTab>
                  <#PreferredExecutantList></#PreferredExecutantList>
                </#PreferredExecutantTab>
              </#IsPreferredExecutantEnabled>
            </#TabView>
          </td>
        </tr>
      </table>
</#IsPrintMode>
======================================================