view anagram/guisupport/wm1.cpp @ 15:f5acaf0c8a29

Don't cast through "volatile int". Causes a gcc warning nowadays. XXX: should put something else back here to frighten the optimizer
author David A. Holland
date Tue, 31 May 2022 01:00:55 -0400
parents 13d2b8934445
children
line wrap: on
line source

/*
 * AnaGram, A System for Syntax Directed Programming
 * Copyright 1993-1999 Parsifal Software. All Rights Reserved.
 * See the file COPYING for license and usage terms.
 *
 * wm1.cpp - Window Management Module
 */

#include "ctrlpanel.hpp"
#include "dpanel.hpp"
#include "dspar.hpp"
#include "dvplug.hpp"
#include "fileview.hpp"
#include "gtview.hpp"
#include "rule.h"
#include "wm1.h"

//#define INCLUDE_LOGGING
#include "log.h"    //LOG


void set_text_line(int line, int col , int right) {
  LOGSECTION("set_text_line");
  LOGV(syntaxFileId);
  if (syntaxFileId == 0) return;

  FileWindow *syntaxWindow =
    (FileWindow *) AgFrame::windowRegistry.find(syntaxFileId);
  LOGV((int) syntaxWindow);
  if (syntaxWindow == 0) return;
  LOGV(line);
  LOGV(col);
  line--;
  col--;
  cint whereNow = syntaxWindow->getCursorLocation();
  LOGV(whereNow);
  if (whereNow.y < line) {
    syntaxWindow->setCursorLocation(cint(col, line+4));
  }
  if (whereNow.y > line) {
    syntaxWindow->setCursorLocation(cint(col, line-4));
  }
  syntaxWindow->setCursorLocation(cint(col,line));
  LOGS("setCursorLocation returned");
}

void set_rule_line(unsigned fn) {
  LOGSECTION("set_rule_line");
  LOGV(fn);
  if (fn == 0 || fn > nforms_base) {
    return;
  }
  Rule rule(fn);

  set_text_line(rule->line, rule->col, 0);
  LOGS("set_text_line returned");
}


void pop_up_window(dc_ref window) {
  LOGSECTION("pop_up_window(dc_ref)");
  if (!window.exists()) {
    return;
  }
  LOGV(window->head_title) LCV(window->foot_title);

  AgFrame *newPanel;
  if (window->head_title == "Auxiliary Trace"
     || window->head_title == "Conflict Trace"
     || window->head_title == "Error Trace"
     || window->head_title == "Keyword Anomaly Trace"
      || window->head_title == "Reduction Trace") {
    newPanel = new GTWindow((trace_window_dc *) (dc *) window);
  }
  else {
    LOGS("ready to construct data panel");
    AgDataViewPlug *connector = new AgDataViewPlug(window);
    LOGS("connector built");
    window->windowConnector = connector;
    newPanel = new AgDataPanel(connector);
    LOGS("newPanel built");
    newPanel->syntaxDependent = connector->syntaxDependent();
    newPanel->show();
    LOGS("window showing");
  }
  newPanel->setAutoDeleteObject();
  LOGS("set autodelete");
  newPanel->setFocus();
  LOGS("succeeded in setting focus");
}

/* End WM1.C */