[Rqda-commits] r43 - pkg pkg/R www

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Sat Dec 13 07:27:27 CET 2008


Author: wincent
Date: 2008-12-13 07:27:27 +0100 (Sat, 13 Dec 2008)
New Revision: 43

Added:
   pkg/R/autoCoding.R
Modified:
   pkg/ChangeLog
   pkg/DESCRIPTION
   pkg/R/CaseFun.R
   pkg/R/CodesFun.R
   pkg/R/Coding_Buttons.R
   pkg/R/FileCatButton.R
   pkg/R/FilesFun.R
   pkg/R/GUIHandler.R
   pkg/R/deletion.R
   pkg/R/root_gui.R
   pkg/R/utils.R
   pkg/TODO
   www/ChangeLog.txt
Log:


Modified: pkg/ChangeLog
===================================================================
--- pkg/ChangeLog	2008-12-13 03:06:09 UTC (rev 42)
+++ pkg/ChangeLog	2008-12-13 06:27:27 UTC (rev 43)
@@ -1,10 +1,12 @@
 2008-12-12
-	* Fix bugs of SortByTime(), now should work for R < 2.8.0.
+	* Fix bugs of SortByTime(), now should work for R < 2.8.0. Fix bug of GetCodingTable and SummaryCoding.
 	* New function of RunOnSelected. Use it to replace select.list.
 	* Now popup menu of add to case/ category can add multiple files at a time (Files Tab). 
-	
+	* New Coding Button: C2Info
+
 2008-12-10
 	* New functions of SearchFiles.
+
 2008-12-09
 	* New functions to summary codings: SummaryCoding, GetCodingTable.
 	* Add documentation.

Modified: pkg/DESCRIPTION
===================================================================
--- pkg/DESCRIPTION	2008-12-13 03:06:09 UTC (rev 42)
+++ pkg/DESCRIPTION	2008-12-13 06:27:27 UTC (rev 43)
@@ -1,8 +1,8 @@
 Package: RQDA
 Type: Package
 Title: Qualitative Data Analysis
-Version: 0.1.5-38
-Date: 2008-12-08
+Version: 0.1.5-43
+Date: 2008-12-12
 Author: HUANG Ronggui
 Maintainer: HUANG Ronggui <ronggui.huang at gmail.com>
 Depends: R (>= 2.5.0), DBI, RSQLite, RGtk2, gWidgets, gWidgetsRGtk2

Modified: pkg/R/CaseFun.R
===================================================================
--- pkg/R/CaseFun.R	2008-12-13 03:06:09 UTC (rev 42)
+++ pkg/R/CaseFun.R	2008-12-13 06:27:27 UTC (rev 43)
@@ -61,7 +61,7 @@
         exist <- dbGetQuery(.rqda$qdacon,sprintf("select fid from caselinkage where status=1 and fid in (%s) and caseid=%i",paste("'",fid,"'",sep="",collapse=","),caseid))
         if (nrow(exist)!=length(fid)){
           ## write only when the selected file associated with specific case is not in the caselinkage table
-          DAT <- data.frame(caseid=caseid, fid=fid[!fid %in% exist$fid], selfirst=0, selend=selend, status=1,owner=.rqda$owner,data=date(),memo='')
+          DAT <- data.frame(caseid=caseid, fid=fid[!fid %in% exist$fid], selfirst=0, selend=selend[!fid %in% exist$fid], status=1,owner=.rqda$owner,data=date(),memo='')
           success <- dbWriteTable(.rqda$qdacon,"caselinkage",DAT,row.name=FALSE,append=TRUE)
           ## write to caselinkage table
           if (!success) gmessage("Fail to write to database.")

Modified: pkg/R/CodesFun.R
===================================================================
--- pkg/R/CodesFun.R	2008-12-13 03:06:09 UTC (rev 42)
+++ pkg/R/CodesFun.R	2008-12-13 06:27:27 UTC (rev 43)
@@ -132,8 +132,9 @@
 
 
 
-retrieval <- function(){
-  currentCode <- svalue(.rqda$.codes_rqda)
+retrieval <- function(CodeNameWidget){
+##CodeNameWidget=.rqda$.codes_rqda
+  currentCode <- svalue(CodeNameWidget)
   if (length(currentCode)!=0){
   Encoding(currentCode) <- "UTF-8"
   currentCid <- dbGetQuery(.rqda$qdacon,sprintf("select id from freecode where name== '%s' ",currentCode))[1,1]

Modified: pkg/R/Coding_Buttons.R
===================================================================
--- pkg/R/Coding_Buttons.R	2008-12-13 03:06:09 UTC (rev 42)
+++ pkg/R/Coding_Buttons.R	2008-12-13 06:27:27 UTC (rev 43)
@@ -335,3 +335,37 @@
     }
   }
 
+
+CodingInfoButton <- function(label="C2Info")
+{
+  gbutton(label,handler= function(h,...) c2InfoFun())
+}
+
+c2InfoFun <- function(){
+    con <- .rqda$qdacon
+    if (is_projOpen(env=.rqda,conName="qdacon")) {
+      W <- tryCatch( get(".openfile_gui",env=.rqda), error=function(e){})
+      ## get the widget for file display. If it does not exist, then return NULL.
+      sel_index <- tryCatch(sindex(W),error=function(e) {})
+      ## if the not file is open, it doesn't work.
+      if (is.null(sel_index)) {gmessage("Open a file first!",con=TRUE)}
+      else {
+          CodeTable <-  dbGetQuery(con,"select id,name from freecode where status==1")
+          SelectedFile <- svalue(.rqda$.root_edit); Encoding(SelectedFile) <- "UTF-8" ##file title
+          currentFid <-  dbGetQuery(con,sprintf("select id from source where name=='%s'",SelectedFile))[,1]
+          codings_index <-  dbGetQuery(con,sprintf("select rowid, cid, fid, selfirst, selend from coding where fid==%i ", currentFid))
+          ## should only work with those related to current code and current file.
+          rowid <- codings_index$rowid[(codings_index$selfirst  >= sel_index$startN) &
+                                       (codings_index$selend  <= sel_index$endN)
+                                       ] ## determine which codes correspond to the selection
+          cid <- codings_index$cid[codings_index$rowid %in% rowid]
+          Codes <- CodeTable$name[CodeTable$id %in% cid]
+          ## should not use data frame as x, otherwise, svalue(c2infoWidget) is a factor rather than a character
+          if (length(Codes)!=0){
+          tryCatch(dispose(.rqda$.c2info),error=function(e){})
+          gw <- gwindow(title="Associted code-list.",heigh=min(33*length(Codes),600),parent=.rqda$.openfile_gui)
+          c2infoWidget <- gtable(Codes,con=gw)
+          assign(".c2info",gw,env=.rqda)
+          addhandlerdoubleclick(c2infoWidget,handler=function(h,...) retrieval(CodeNameWidget=c2infoWidget))
+          }
+        }}}

Modified: pkg/R/FileCatButton.R
===================================================================
--- pkg/R/FileCatButton.R	2008-12-13 03:06:09 UTC (rev 42)
+++ pkg/R/FileCatButton.R	2008-12-13 06:27:27 UTC (rev 43)
@@ -146,36 +146,37 @@
 
 
 
-AddToFileCategory<- function(){
-  ## filenames -> fid -> selfirst=0; selend=nchar(filesource)
-  filename <- svalue(.rqda$.fnames_rqda)
-  Encoding(filename) <- "unknown"
-  query <- dbGetQuery(.rqda$qdacon,sprintf("select id, file from source where name in(%s) and status=1",paste("'",filename,"'",sep="",collapse=","))) ## multiple fid
-  fid <- query$id
-  Encoding(query$file) <- "UTF-8"
+## AddToFileCategory<- function(){
+## moved to FilesFun.R
+##   ## filenames -> fid -> selfirst=0; selend=nchar(filesource)
+##   filename <- svalue(.rqda$.fnames_rqda)
+##   Encoding(filename) <- "unknown"
+##   query <- dbGetQuery(.rqda$qdacon,sprintf("select id, file from source where name in(%s) and status=1",paste("'",filename,"'",sep="",collapse=","))) ## multiple fid
+##   fid <- query$id
+##   Encoding(query$file) <- "UTF-8"
   
-  ## select a F-cat name -> F-cat id
-  Fcat <- dbGetQuery(.rqda$qdacon,"select catid, name from filecat where status=1")
-  if (nrow(Fcat)!=0){
-    Encoding(Fcat$name) <- "UTF-8"
-    ##ans <- select.list(Fcat$name,multiple=FALSE)
-    CurrentFrame <- sys.frame(sys.nframe())
-    RunOnSelected(Fcat$name,multiple=TRUE,enclos=CurrentFrame,expr={
-    if (Selected!=""){ ## must use Selected to represent the value of selected items. see RunOnSelected() for info.
-      Selected <- iconv(Selected,to="UTF-8")
-      Fcatid <- Fcat$catid[Fcat$name %in% Selected]
-      exist <- dbGetQuery(.rqda$qdacon,sprintf("select fid from treefile where status=1 and fid in (%s) and catid=%i",paste("'",fid,"'",sep="",collapse=","),Fcatid))
-    if (nrow(exist)!=length(fid)){
-    ## write only when the selected file associated with specific f-cat is not there
-      DAT <- data.frame(fid=fid[!fid %in% exist$fid], catid=Fcatid, date=date(),dateM=date(),memo='',status=1)
-      ## should pay attention to the var order of DAT, must be the same as that of treefile table
-      success <- dbWriteTable(.rqda$qdacon,"treefile",DAT,row.name=FALSE,append=TRUE)
-      ## write to caselinkage table
-      if (success) {
-      UpdateFileofCatWidget()
-      }
-      if (!success) gmessage("Fail to write to database.")
-    }}})}}
+##   ## select a F-cat name -> F-cat id
+##   Fcat <- dbGetQuery(.rqda$qdacon,"select catid, name from filecat where status=1")
+##   if (nrow(Fcat)==0){gmessage("Add File Categroy first.",con=TRUE)} else{
+##     Encoding(Fcat$name) <- "UTF-8"
+##     ##ans <- select.list(Fcat$name,multiple=FALSE)
+##     CurrentFrame <- sys.frame(sys.nframe())
+##     RunOnSelected(Fcat$name,multiple=TRUE,enclos=CurrentFrame,expr={
+##     if (Selected!=""){ ## must use Selected to represent the value of selected items. see RunOnSelected() for info.
+##       Selected <- iconv(Selected,to="UTF-8")
+##       Fcatid <- Fcat$catid[Fcat$name %in% Selected]
+##       exist <- dbGetQuery(.rqda$qdacon,sprintf("select fid from treefile where status=1 and fid in (%s) and catid=%i",paste("'",fid,"'",sep="",collapse=","),Fcatid))
+##     if (nrow(exist)!=length(fid)){
+##     ## write only when the selected file associated with specific f-cat is not there
+##       DAT <- data.frame(fid=fid[!fid %in% exist$fid], catid=Fcatid, date=date(),dateM=date(),memo='',status=1)
+##       ## should pay attention to the var order of DAT, must be the same as that of treefile table
+##       success <- dbWriteTable(.rqda$qdacon,"treefile",DAT,row.name=FALSE,append=TRUE)
+##       ## write to caselinkage table
+##       if (success) {
+##       UpdateFileofCatWidget()
+##       }
+##       if (!success) gmessage("Fail to write to database.")
+##     }}})}}
 
 
 

Modified: pkg/R/FilesFun.R
===================================================================
--- pkg/R/FilesFun.R	2008-12-13 03:06:09 UTC (rev 42)
+++ pkg/R/FilesFun.R	2008-12-13 06:27:27 UTC (rev 43)
@@ -286,3 +286,36 @@
                 )
 fid
 }
+
+
+AddToFileCategory<- function(){
+  ## filenames -> fid -> selfirst=0; selend=nchar(filesource)
+  filename <- svalue(.rqda$.fnames_rqda)
+  Encoding(filename) <- "unknown"
+  query <- dbGetQuery(.rqda$qdacon,sprintf("select id, file from source where name in(%s) and status=1",paste("'",filename,"'",sep="",collapse=","))) ## multiple fid
+  fid <- query$id
+  Encoding(query$file) <- "UTF-8"
+  
+  ## select a F-cat name -> F-cat id
+  Fcat <- dbGetQuery(.rqda$qdacon,"select catid, name from filecat where status=1")
+  if (nrow(Fcat)==0){gmessage("Add File Categroy first.",con=TRUE)} else{
+    Encoding(Fcat$name) <- "UTF-8"
+    ##ans <- select.list(Fcat$name,multiple=FALSE)
+    CurrentFrame <- sys.frame(sys.nframe())
+    RunOnSelected(Fcat$name,multiple=TRUE,enclos=CurrentFrame,expr={
+    if (Selected!=""){ ## must use Selected to represent the value of selected items. see RunOnSelected() for info.
+      Selected <- iconv(Selected,to="UTF-8")
+      Fcatid <- Fcat$catid[Fcat$name %in% Selected]
+      exist <- dbGetQuery(.rqda$qdacon,sprintf("select fid from treefile where status=1 and fid in (%s) and catid=%i",paste("'",fid,"'",sep="",collapse=","),Fcatid))
+    if (nrow(exist)!=length(fid)){
+    ## write only when the selected file associated with specific f-cat is not there
+      DAT <- data.frame(fid=fid[!fid %in% exist$fid], catid=Fcatid, date=date(),dateM=date(),memo='',status=1)
+      ## should pay attention to the var order of DAT, must be the same as that of treefile table
+      success <- dbWriteTable(.rqda$qdacon,"treefile",DAT,row.name=FALSE,append=TRUE)
+      ## write to caselinkage table
+      if (success) {
+      UpdateFileofCatWidget()
+      }
+      if (!success) gmessage("Fail to write to database.")
+    }}})}}
+

Modified: pkg/R/GUIHandler.R
===================================================================
--- pkg/R/GUIHandler.R	2008-12-13 03:06:09 UTC (rev 42)
+++ pkg/R/GUIHandler.R	2008-12-13 06:27:27 UTC (rev 43)
@@ -76,7 +76,7 @@
 ##                         )
 
   addhandlerdoubleclick(.rqda$.codes_rqda,handler=function(h,...) {
-            if (is_projOpen(env=.rqda,conName="qdacon"))  retrieval()
+            if (is_projOpen(env=.rqda,conName="qdacon"))  retrieval(.rqda$.codes_rqda)
           }
                         )
   add3rdmousepopupmenu(.rqda$.codes_rqda,CodesNamesWidgetMenu)

Added: pkg/R/autoCoding.R
===================================================================
--- pkg/R/autoCoding.R	                        (rev 0)
+++ pkg/R/autoCoding.R	2008-12-13 06:27:27 UTC (rev 43)
@@ -0,0 +1,11 @@
+AutoCoding <- function(KeyWord,expansion=6){
+  Files <- SearchFiles(paste("%",KeyWordm,"%",collapse=""),content=TRUE)
+  AnsIndex <- gregexpr(KeyWord,Files$file)
+  AnsIndex2 <- lapply(AnsIndex, FUN=function(x) {
+    begin <- x-expansion
+    begin[begin<0]<-0
+    data.frame(begin=begin,end=x+attr(x,"match.length"))
+  })
+  ## if any index > nchar(Files$file), set to nchar(Files$file)
+  ## for each file, simplify the coding index, so erase the overlapping codings or proximity with distance=0
+}

Modified: pkg/R/deletion.R
===================================================================
--- pkg/R/deletion.R	2008-12-13 03:06:09 UTC (rev 42)
+++ pkg/R/deletion.R	2008-12-13 06:27:27 UTC (rev 43)
@@ -124,7 +124,7 @@
         print("Nothing to clear.")
       } else {
         if (ask){
-          del <- select.list(del[,1],multiple=TRUE)
+          del <- select(del[,1],multiple=TRUE)$selected ##select.list(del[,1],multiple=TRUE)
         } else {
         del <- del[,1]
       }
@@ -228,7 +228,7 @@
       print("Nothing to clear.")
     } else {
       if (ask){
-        del <- select.list(del[,1],multiple=TRUE)
+        del <- select(del[,1],multiple=TRUE)$selected ##select.list(del[,1],multiple=TRUE)
       } else {
         del <- del[,1]
       }

Modified: pkg/R/root_gui.R
===================================================================
--- pkg/R/root_gui.R	2008-12-13 03:06:09 UTC (rev 42)
+++ pkg/R/root_gui.R	2008-12-13 06:27:27 UTC (rev 43)
@@ -69,6 +69,7 @@
   .codes_button[1,3] <- FreeCode_RenameButton(label="Rename",CodeNamesWidget=.codes_rqda)
   .codes_button[1,4] <- CodeMemoButton(label="C-Memo")
   .codes_button[1,5]<- CodingMemoButton(label="C2Memo")
+  .codes_button[2,1]<- CodingInfoButton()
   .codes_button[2,2]<- HL_ALLButton()
  # .codes_button[2,2]<- RetrievalButton("Retrieval")
   .codes_button[2,3]<- ExtendButton("Retrieval")

Modified: pkg/R/utils.R
===================================================================
--- pkg/R/utils.R	2008-12-13 03:06:09 UTC (rev 42)
+++ pkg/R/utils.R	2008-12-13 06:27:27 UTC (rev 43)
@@ -1,23 +1,24 @@
-OrderByTime <- function(date,decreasing = FALSE){
-## return tbe permutation of the date which is get by sql "select date from ..."
-## see order for the meaning of permutation. It can be used as index to sort vector or date frame
-oldLCTIME<- Sys.getlocale("LC_TIME")
-Sys.setlocale("LC_TIME","C")
-on.exit(Sys.setlocale("LC_TIME",oldLCTIME))
-Newdate <- strptime(date, "%a %b %d %H:%M:%S %Y")
-permutation <- order(Newdate,decreasing = decreasing)
+OrderByTime <- function(date,decreasing = FALSE)
+{
+  ## return tbe permutation of the date which is get by sql "select date from ..."
+  ## see order for the meaning of permutation. It can be used as index to sort vector or date frame
+  ##   if (getRversion()<"2.8.0"){
+  ##     permutation <- ifelse(decreasing,1:length(date),length(date):1)
+  ##     ## should rewrite it when project merge is provided.
+  ##   } else{
+  ## Work for R.2.8.0 or above for Dateclass,so convert to character
+  oldLCTIME<- Sys.getlocale("LC_TIME")
+  Sys.setlocale("LC_TIME","C")
+  on.exit(Sys.setlocale("LC_TIME",oldLCTIME))
+  Newdate <- as.character(strptime(date, "%a %b %d %H:%M:%S %Y"))
+  permutation <- order(Newdate,decreasing = decreasing)
+  ##  }
 }
 ## dd<- dbGetQuery(.rqda$qdacon,"select date from source")$date
 ## sort(dd) == dd[order(dd)] ## but the order is not correct.
 ## dd[OrderByTime(dd)]
 
 
-setEncoding <- function(encoding="unknown"){
-  ## specify what encoding is used in the imported files.
-  .rqda$encoding <- encoding
-}
-
-
 MemoWidget <- function(prefix,widget,dbTable){
   ## prefix of window tile. E.g. "Code" ->  tile of gwindow becomes "Code Memo:"
   ## widget of the F-cat/C-cat list, such as widget=.rqda$.fnames_rqda
@@ -56,18 +57,25 @@
 ## summary coding information
 GetCodingTable <- function(){
   ## test when any table is empty
+  ## http://archives.postgresql.org/pgsql-sql/2004-01/msg00160.php
   if ( isIdCurrent(.rqda$qdacon)) {
-    Codings <- dbGetQuery(.rqda$qdacon,"select freecode.name as codename, freecode.id as cid, 
-            coding.cid as cid2,coding.fid as fid,source.id as fid2, source.name as filename,
-            coding.selend - coding.selfirst as CodingLength,coding.selend, coding.selfirst
-            from coding, freecode, source 
-            where coding.status==1 and freecode.id=coding.cid and coding.fid=source.id")
+   ## Codings <- dbGetQuery(.rqda$qdacon,"select freecode.name as codename, freecode.id as cid, 
+   ##         coding.cid as cid2,coding.fid as fid,source.id as fid2, source.name as filename,
+   ##         coding.selend - coding.selfirst as CodingLength,coding.selend, coding.selfirst
+   ##         from coding, freecode, source 
+   ##         where coding.status==1 and freecode.id=coding.cid and coding.fid=source.id")
+   Codings <- dbGetQuery(.rqda$qdacon,"select coding.cid, coding.fid, freecode.name as codename, source.name as filename,
+                                       coding.selend - coding.selfirst as CodingLength
+                                      from coding left join freecode on (coding.cid=freecode.id)
+                                                  left join source on (coding.fid=source.id) 
+                                      where coding.status==1 and source.status=1 and freecode.status=1")
+
     if (nrow(Codings)!=0){
       Encoding(Codings$codename) <- Encoding(Codings$filename) <- "UTF-8"
     }
-    if (!all (all.equal(Codings$cid,Codings$cid2),all.equal(Codings$fid,Codings$fid2))){
-      stop("Errors!") ## check to make sure the sql is correct
-    }
+   ## if (!all (all.equal(Codings$cid,Codings$cid2),all.equal(Codings$fid,Codings$fid2))){
+   ##   stop("Errors!") ## check to make sure the sql is correct
+   ## }
     Codings
   } else cat("Open a project first.\n")
 }
@@ -78,7 +86,7 @@
     if (nrow(Codings)>0){
       NumOfCoding <- table(Codings$codename,...) ## how many coding for each code
       AvgLength <- tapply(Codings$CodingLength,Codings$codename,FUN=mean,...) # Average of words for each code
-      NumOfFile <- tapply(Codings$fid1,Codings$codename,FUN=length,...) # Number of files for each code
+      NumOfFile <- tapply(Codings$fid,Codings$codename,FUN=length,...) # Number of files for each code
       if (byFile){
         CodingOfFile <- tapply(Codings$codename,Codings$filename,FUN=table,...) # summary of codings for each file
       } else CodingOfFile <- NULL
@@ -110,3 +118,65 @@
   cat("Number of files associated with each code.\n\n")
   print(x$NumOfFile)
 }
+
+
+SearchFiles <- function(pattern,content=FALSE,Widget=NULL,is.UTF8=FALSE){
+##SearchFiles("file like '%ÐÂÃñÍí±¨%'")
+##SearchFiles("name like '%ÎïȨ·¨%'")
+##SearchFiles("file like '%ÐÂÃñÍí±¨%'",Widget=.rqda$.fnames_rqda)
+  if ( isIdCurrent(.rqda$qdacon)) {
+if(!is.UTF8){
+pattern <- iconv(pattern,to="UTF-8")
+}
+Encoding(pattern) <- "unknown"
+if (content){
+ans <- dbGetQuery(.rqda$qdacon,sprintf("select id, name,file from source where status==1 and %s",pattern))
+} else {
+ans <- dbGetQuery(.rqda$qdacon,sprintf("select id, name from source where status==1 and %s",pattern))
+}
+if (nrow(ans)>0) Encoding(ans$name) <- "UTF-8"
+if (!is.null(ans$file)) Encoding(ans$file) <- "UTF-8"
+if (!is.null(Widget)) eval(substitute(widget[] <- ans$name,list(widget=quote(Widget))))
+invisible(ans)
+  } else cat("Open a project first.\n")
+}
+
+select <- function(x,multiple=TRUE,title=NULL,...){
+## select a method for selecting items conditional on the OS, to maxizied the chance of GUI-style of selection.
+## use as replacement of  select.list.
+  if (.Platform$OS.type == "unix" && capabilities("tcltk") && capabilities("X11"))
+    {
+      ans <- tcltk::tk_select.list(x,multiple=multiple,title=title,...)
+    } else {
+      ans <- select.list(x,multiple=multiple,title=title,...)
+    }
+  return(list(selected=ans))
+}
+
+
+RunOnSelected <- function(x,multiple=TRUE,expr,enclos,title=NULL,...){
+  if (is.null(title)) title <- ifelse(multiple,"Select one or more","Select one")
+  g <- gwindow(title=title,wid=250,heigh=600,parent=c(395, 10))
+  x1<-ggroup(FALSE,con=g)
+  ##x1 at widget@widget$parent$parent$parent$SetTitle(title)
+  ##x1 at widget@widget$parent$parent$parent$SetDefaultSize(200, 500)
+  x2<-gtable(x,multiple=multiple,con=x1,expand=TRUE)
+  gbutton("Cancel",con=x1,handler=function(h,...){
+    dispose(x1)
+  })
+  gbutton("OK",con=x1,handler=function(h,...){
+    Selected <- svalue(x2)
+    if (Selected!=""){
+    eval(h$action$expr,env=pairlist(Selected=Selected),enclos=h$action$enclos)
+    ## evaluate expr in env
+    ## Variable Selected will be found in env
+    ## because env is parilist and there are variables not there, which will be found in enclos.
+    dispose(g)
+   } else gmessage("Select before Click OK.\n",con=TRUE,icon="error")
+  },
+          action=list(expr=substitute(expr),enclos=enclos)
+          )
+  invisible()
+}
+
+

Modified: pkg/TODO
===================================================================
--- pkg/TODO	2008-12-13 03:06:09 UTC (rev 42)
+++ pkg/TODO	2008-12-13 06:27:27 UTC (rev 43)
@@ -1,7 +1,7 @@
+*Todo
+
 documentation
 
-summary functions for review of coding.
-
 Merge *rqda from different coders
 
 inter-coder reliability 

Modified: www/ChangeLog.txt
===================================================================
--- www/ChangeLog.txt	2008-12-13 03:06:09 UTC (rev 42)
+++ www/ChangeLog.txt	2008-12-13 06:27:27 UTC (rev 43)
@@ -1,3 +1,12 @@
+2008-12-12
+	* Fix bugs of SortByTime(), now should work for R < 2.8.0. Fix bug of GetCodingTable and SummaryCoding.
+	* New function of RunOnSelected. Use it to replace select.list.
+	* Now popup menu of add to case/ category can add multiple files at a time (Files Tab). 
+	* New Coding Button: C2Info
+
+2008-12-10
+	* New functions of SearchFiles.
+
 2008-12-09
 	* New functions to summary codings: SummaryCoding, GetCodingTable.
 	* Add documentation.



More information about the Rqda-commits mailing list