⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inputbox.c

📁 SEAL是DOS 下的32位保护模式的GUI程序
💻 C
字号:
/******************************************************************
 * SEAL 2.0                                                       *
 * Copyright (c) 1999-2002 SEAL Developers. All Rights Reserved.  *
 *                                                                *
 * Web site: http://sealsystem.sourceforge.net/                   *
 * E-mail (current maintainer): orudge@users.sourceforge.net      *
 ******************************************************************/

/*
   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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include <seal.h>
#include <app.h>
#include <dialogs.h>
#include <grfx.h>
#include <inputbox.h>

////////////////////////////////////////////////////////////////////////////////
l_text inputbox (l_text caption, l_text txt, l_text defaut) {

  l_text retvalue    = NULL;
  p_stattext lbl     = NULL;
  p_textline textbox = NULL;
  p_button   b       = NULL;
  l_dword    msg     = NULL;
  p_appwin   w       = appwin_init(_malloc(sizeof(t_appwin)),
                            rect_assign(0, 0, 400, 120),
                            caption,
                            NULL,
                            NULL,
                            NULL);


  if ( w ) VIEW(w)->align |= TX_ALIGN_CENTER;

  OBJECT(desktop)->insert(OBJECT(desktop), OBJECT(w));

  lbl = stattext_init(_malloc(sizeof(t_stattext)),
                      rect_assign(5, 20, 395, 60),
                      TX_ALIGN_BOTTOM,
                      txt);

  OBJECT(w)->insert(OBJECT(w), OBJECT(lbl));

  textbox = textline_init(_malloc(sizeof(t_textline)),
                           rect_assign(5, 65, 395, 85),
                           IO_DIR_LIMIT,
                           0);
  OBJECT(w)->insert(OBJECT(w), OBJECT(textbox));
  TEXTLINE(textbox )->set_text(TEXTLINE(textbox ), defaut);

  b = button_init(_malloc(sizeof(t_button)),
                      rect_assign(5, 90, 100, 115),
                      TXT_OK,
                      MSG_OK,
                      BF_DEFAULT);
  OBJECT(w)->insert(OBJECT(w), OBJECT(b));

  b = button_init(_malloc(sizeof(t_button)),
                      rect_assign(105, 90, 205, 115),
                      TXT_CANCEL,
                      MSG_CLOSE,
                      BF_DEFAULT);
  OBJECT(w)->insert(OBJECT(w), OBJECT(b));

  msg = desktop->execute_view(desktop, VIEW(w));

  if ( msg == MSG_OK ) retvalue = _strdup(textbox->text);

  dispose(OBJECT(w));

  return retvalue;

};
////////////////////////////////////////////////////////////////////////////////
l_long inputbox_list (l_text caption, l_text txt, p_list xlist, l_long def ) {

  l_long retvalue    = -1;
  p_stattext lbl     = NULL;
  p_history  in      = NULL;
  p_button   b       = NULL;
  l_dword    msg     = NULL;
  p_appwin   w       = appwin_init(_malloc(sizeof(t_appwin)),
                            rect_assign(0, 0, 400, 120),
                            caption,
                            NULL,
                            NULL,
                            NULL);


  if ( w ) VIEW(w)->align |= TX_ALIGN_CENTER;


  OBJECT(desktop)->insert(OBJECT(desktop), OBJECT(w));


  lbl = stattext_init(_malloc(sizeof(t_stattext)),
                      rect_assign(5, 20, 395, 60),
                      TX_ALIGN_BOTTOM,
                      txt);

  OBJECT(w)->insert(OBJECT(w), OBJECT(lbl));

  in = history_init(_malloc(sizeof(t_history)),
                            rect_assign(5, 65, 380, 85),
                            xlist ,
                            150,
                            HF_REWRITEUNABLE|LF_SELFLIST);
  in->current = def;
  OBJECT(w)->insert(OBJECT(w), OBJECT(in));

  b = button_init(_malloc(sizeof(t_button)),
                      rect_assign(5, 90, 100, 115),
                      TXT_OK,
                      MSG_OK,
                      BF_DEFAULT);
  OBJECT(w)->insert(OBJECT(w), OBJECT(b));

  b = button_init(_malloc(sizeof(t_button)),
                      rect_assign(105, 90, 205, 115),
                      TXT_CANCEL,
                      MSG_CLOSE,
                      BF_DEFAULT);
  OBJECT(w)->insert(OBJECT(w), OBJECT(b));

  msg = desktop->execute_view(desktop, VIEW(w));

  if (msg == MSG_OK) retvalue = in->current;

  dispose(OBJECT(w));

  return retvalue;

};
////////////////////////////////////////////////////////////////////////////////
BITMAP *COLSEL_IMG = NULL;

l_color rgbcolorbox ( l_color def ) {

  l_int r = NULL;
  l_int g = NULL;
  l_int b = NULL;
  l_text d = set_format_text(NULL, "%d", getr(def));
  l_text t = inputbox ("RGB Color",INI_TEXT("Red (0-255) ?"),  d );
  _free(d);
  if ( !t ) return def;
  r = atoi(t);
  _free(t);
  if ( (r < 0 ) || (r > 255) ) {   msgbox( MW_INFO, MB_OK, INI_TEXT("Bad red value !")); return def; };

  d = set_format_text(NULL, "%d", getg(def));
  t = inputbox ("RGB Color",INI_TEXT("Green (0-255)"), d );
  _free(d);
  if ( !t ) return def;
  g = atoi(t);
  _free(t);
  if ( (g < 0 ) || (g > 255) ) {   msgbox( MW_INFO, MB_OK, INI_TEXT("Bad green value !")); return def; };

  d = set_format_text(NULL, "%d", getb(def));
  t = inputbox ("RGB Color",INI_TEXT("Blue (0-255)"), d );
  _free(d);
  if ( !t ) return def;
  b = atoi(t);
  _free(t);
  if ( (b < 0 ) || (b > 255) ) {   msgbox( MW_INFO, MB_OK, INI_TEXT("Bad blue value !")); return def; };

  return makecol(r,g,b);

};

////////////////////////////////////////////////////////////////////////////////
void   sel_draw ( p_view o ) {
  t_rect  r = o->get_local_extent(o);
  t_point p;

  BITMAP *out = o->begin_paint(o, &p, r);
  if ( out ) {
    if ( COLSEL_IMG ) stretch_sprite(out, COLSEL_IMG, p.x, p.y, r.b.x, r.b.y - 10);
    rectfill(out, p.x, p.y + r.b.y - 10, p.x + r.b.x, p.y + r.b.y, o->brush.color);
  };
  o->end_of_paint(o, r);
};
////////////////////////////////////////////////////////////////////////////////
void   sel_translate_event ( p_object o, t_event *event ) {
  RETVIEW(o, event);
  if ( event->type & EV_MOUSE ) {
    if ( OBJECT(mouse)->state & MO_SF_MOUSELUP   ) {
      p_view vo = VIEW(o);
      t_point p2 = vo->get_local_point(vo, mouse->where);
      if ( p2.x > 0 && p2.x < rect_sizex(vo->bounds) &&  p2.y > 0 && p2.y < rect_sizey(vo->bounds) - 10 ) {
        t_rect  r = vo->get_local_extent(vo);
        t_point p;
        t_point pe =  VIEW(desktop)->get_local_point(VIEW(desktop), mouse->where);
        BITMAP *out = vo->begin_paint(vo, &p, r);
        vo->brush.color = getpixel(out, pe.x, pe.y);
        vo->end_of_paint(vo, r);
        sel_draw (vo);
      } else if ( p2.x > 0 && p2.x < rect_sizex(vo->bounds) &&  p2.y > rect_sizey(vo->bounds) - 10 && p2.y < rect_sizey(vo->bounds)  )  {
        vo->brush.color = rgbcolorbox ( vo->brush.color );
        sel_draw (vo);
      };
    };
  };
};
////////////////////////////////////////////////////////////////////////////////
p_grfx sel_init( t_rect r, l_color def ) {
  p_grfx o = grfx_init(_malloc(sizeof(t_grfx)),r );
  VIEW(o)->draw = &sel_draw;
  OBJECT(o)->translate_event = &sel_translate_event;
  VIEW(o)->brush.color = def;
  return o;
};
////////////////////////////////////////////////////////////////////////////////
l_color selectcolor ( l_color def ) {
  p_grfx     xsel = NULL;
  p_button   b    = NULL;
  p_button   bx   = NULL;
  l_dword    msg  = NULL;
  p_appwin   w    = appwin_init(_malloc(sizeof(t_appwin)),
                            rect_assign(0, 0, 220, 205),
                            "Color",
                            NULL,
                            NULL,
                            NULL);

  if ( w ) VIEW(w)->align |= TX_ALIGN_CENTER;

  if ( !COLSEL_IMG ) COLSEL_IMG = load_image("bmp/colsel.bmp");

  OBJECT(desktop)->insert(OBJECT(desktop), OBJECT(w));

  xsel = sel_init ( rect_assign(13, 20, 210, 173), def );
  OBJECT(w)->insert(OBJECT(w), OBJECT(xsel));

  b = button_init(_malloc(sizeof(t_button)),
                      rect_assign(3, 180, 100, 200),
                      TXT_OK,
                      MSG_OK,
                      BF_DEFAULT);
  OBJECT(w)->insert(OBJECT(w), OBJECT(b));

  bx = button_init(_malloc(sizeof(t_button)),
                      rect_assign(103, 180, 203, 200),
                      TXT_CANCEL,
                      MSG_CLOSE,
                      BF_DEFAULT);
  OBJECT(w)->insert(OBJECT(w), OBJECT(bx));

  msg = desktop->execute_view(desktop, VIEW(w));

  if ( msg == MSG_OK ) def = VIEW(xsel)->brush.color;

  dispose(OBJECT(w));

  return def;
};
////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -